ZooKeeper: Wait-free coordination for Internet-scale systems
muratbuffalo.blogspot.com
muratbuffalo.blogspot.com
Curator implements a bunch of algorithms often implemented on top of ZooKeeper. I like to think of ZooKeeper as the distributed systems equivalent of peer-reviewed implementations of cryptographic primitives. Curator is a like a whole cryptographic protocol / cryptosystem. In both cases: don't implement your own!
I've also used it in a WAN setup for low throughput, transactional data that I needed solid exactly-once semantics. Some of the docs related to WAN settings were non-existent but eventually it worked as intended, thanks to the help of the community.
There are some interesting new alternatives such as etcd / serf/consul - but at the time ZooKeeper had the best track record (under Jepsen analysis). Things might have changed since then.
Aphyr has done a bunch of analysis of these systems part of his Jepsen tool: http://aphyr.com/tags/jepsen and http://aphyr.com/posts/291-call-me-maybe-zookeepe
If you are going to use ZooKeeper I strongly suggest looking at both Apache Curator and Netflix Exhibitor (they are complimentary).
The examples bundled with ZK don't handle all errors/edge cases...
Curator is a library of common patterns available to use mostly out of the box.
Exhibitor is a ZooKeeper "aware" supervisor system: https://github.com/Netflix/exhibitor
Also always remember your ensemble should have an odd number of nodes (3,5,7)
The "Partition-tolerant consensus algorithms: Paxos, Raft, ZAB" section is relevant, along with the "Further Reading" which follows it.