Tuesday, September 1, 2009

DNS load balancing

I got annoyed that to get a DNS server that does geographic load balancing, you have to buy expensive Foundry or F5 gear. It seems like you should be able to plug in your own code to an existing DNS server and have it perform a health check before resolving a request. Apparently there's no great option to do this though.

So I started a project to do this: http://sourceforge.net/projects/pymds Note, there is not an official release yet, so just get the latest from SVN.

The basic idea is that pymds (python modular DNS) is a simple DNS server where all the real logic is supplied by extensions written in python. So the standard ability to read a zone file and answer responses is one extension. Round-robin load balancing is another extension. You can chain extensions together so, for example, you could use the zone file extension to look up several possible IPs to return and then the load balancing extension will pick one.

Next up is to write a health check extension that will ping a set of servers and not return their IP address if they haven't recently passed a health check.

I've used this server on some personal domains for a while and tested resolving against it using a bunch of different resolver libraries. That said, this is still extremely alpha software and probably will erase your hard drive or something else terrible if you were to be silly enough to try and actually use it.
blog comments powered by Disqus