I have had some experience with "always sync". It takes care of syncing all the servers with same code base. you can find it here: http://allwaysync.com/
Having mercurial is one more option. you can make changes to one server and then push them to all the servers using mercurial. This is not an ideal tool for this sync feature but it does work very nicely if we use it for this purpose: http://mercurial.selenic.com/
Note: mercurial is not a tool for syncing. it is more of a version control/source control system. but i have seen it being used for sync to remote servers and it does work fine.