First of, I'm fairly new to this whole linux thing... So be gentle.
The setup:
I have a couple of Ubuntu servers... A pair of DNS servers running Bind, and a pair of servers running Nginx and HAProxy to load-balance requests to some back-end servers.
Now, the Bind servers pretty much keep each other up to date by doing zone transfers, although there are some settings in bind that I would like to share between them. However, The load-balancer servers are completely independent which is really bad. This is bad because I then have to change the configurations on both servers independently when I want to make config changes. This of course opens the servers up for mistakes where I accidentally configure the two servers differently, which will inevitably turn into "hard to debug" errors and bugs at some point.
The question
So my question is... How do I sync config changes between the servers, as well as automatically restart the services when their configuration changes?
You might want to look at either Puppet or CFengine. Both offer ways to keep configurations in sync, and execute commands after syncing.
They operate under different philosophies though, I cannot say which would work best for you, you would have to read up and test which best suits your environment and workstyle.
You can, in theory, just rsync (bits of) the configuration back and forth as required, but that gets real messy, real fast. Instead, you should use a real configuration management system such as Puppet or Chef to maintain the configuration for you (and restart things when the configuration changes).
We are releasing our hosted configuration management service soon which is another way to solve your problem as it centralizes the configuration in one place and eliminates the need for synchornization. If you want you can signup for a beta here http://woot.configchief.com/