Great read. Did you look at etcd[0][1] when considering a distributed kv store/locking mechanism? If so, what were the pros/cons of each and what lead you to consul?
I was using Consul because we had that already deployed. After quick research looks like etcd client doesn't provide nice abstraction for creating dist locks. I found [1] and [2] though. Definitely it's doable with etcd.
[0] https://github.com/coreos/etcd [1] https://github.com/coreos/etcd/tree/master/client