[Pdns-users] Multi server deployment

Nick Williams nicholas at nicholaswilliams.net
Wed Nov 10 15:01:21 UTC 2010


Let me share with you what we did at the company I used to work for (and this is an identical configuration to what I have setup for myself). We don't have master and slave PDNS servers. We have "workers" of sorts. Our master and slaves are the MySQL backends.

We have a master MySQL server which is the server that we perform all writes against. It serves as the master backend, and no PDNS installations connect to it directly. In fact, PDNS isn't even installed on the server that hosts the master backend. Then, on each physical (or virtual) DNS server, we have MySQL server and PDNS installed. The MySQL server, which is a slave backend, replicates off of the master backend. Then, PDNS connects to the local MySQL server for its backend.

There are many advantages to setting it up this way:

- Performance: Our PDNS servers are able to more quickly serve out answers to questions since they are connecting to a local MySQL instance instead of a remote MySQL instance, and we don't have multiple PDNS servers querying the same MySQL database, which also decreases response time.
- Robustness: If our master backend goes down, all PDNS servers can continue to answer questions because they are oblivious to this downtime. This is very convenient for maintenance periods, also. If one of the "worker" servers goes down, again, this is transparent to the master backend and to the other workers, which continue to operate as if nothing had happened. We don't use master-master replication and, in fact, this increases redundancy, it doesn't decrease it. 

This is a pretty standard way of configuring PowerDNS, and it has worked very well for us. We have had 0% DNS-answer downtime in the last three years, even when our master backend crashed due to a hardware failure six months ago. It's hard to find any problems with that kind of result.

This is likely a good fit with your organization's needs, as well. I encourage you to look into it. As always, when using MySQL replication, make sure you have a DBA who understands (or at least is willing to devote serious time to understanding beforehand) MySQL replication before implementing this system. MySQL replication is very powerful, but it is also a challenging system to set up. If you do it right, it will work great for you. If you tune something wrong, you could experience some hard-to-diagnose replication issues (which, fortunately, will not affect the uptime of your PowerDNS services).

One more thing, which I believe you will find very helpful. The nature of MySQL replication is that it can go down temporarily to account for minor network fluctuations and recover gracefully. However, problems can arise if it's down for long periods of time; say, over 48 hours. What we did is set up a very small, PHP-based Cron job that runs on every worker server every ten minutes, connects to the local MySQL slave backend, and executes the query "SHOW SLAVE STATUS;". It then looks at the columns "Slave_IO_Running" and "Slave_SQL_Running" in the result set. If they aren't BOTH "Yes", it sends us an alert email, and we know there's an issue that needs to be addressed. I highly recommend you do something similar.

Feel free to ask me any questions you may have.


On Nov 10, 2010, at 8:29 AM, Atha Kouroussis wrote:

> Hi all,
> we are looking to migrate from bind to PowerDNS with MySQL backend. Our initial tests have gone really well and we are now looking into finalizing the architecture for the final deployment and migration. In that respect we have a couple of doubts.
> Since we are going to be using the MySQL backend, and we are going to have multiple PowerDNS servers deployed, is it possible to have several instances of pdns share the same backend? How does that affect slave updates in case a master has more than one slave configured and both slaves use the same backend?
> If its not possible to use the same backend, we are thinking of using MySQL replication, master-slave, and have only one pdns instance listed as slave. What we don't like about this setup is the lack of redundancy since in order to have more than one slave listed we would have to use master-master replication, which we are trying to avoid.
> What are your thoughts on this? Are there any best practices/recommendations for large deployments? Thanks in advance for all your help.
> Cheers,
> Atha
> _______________________________________________
> Pdns-users mailing list
> Pdns-users at mailman.powerdns.com
> http://mailman.powerdns.com/mailman/listinfo/pdns-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.powerdns.com/pipermail/pdns-users/attachments/20101110/0a8c5571/attachment-0001.html>

More information about the Pdns-users mailing list