Announcing the etcd 2.0 Release Candidate

• By Xiang Li

We are pleased to announce the first release candidate for etcd v2.0.0. This is a big day for us: we have been working hard to deliver a new version of etcd and are looking forward to getting your eyes on this major release.

For those unfamiliar with etcd, it is an open source, distributed, consistent key-value store for shared configuration, service discovery, and scheduler coordination. etcd is a core component of CoreOS software that facilitates safe automatic updates, coordinates work being scheduled to hosts, and sets up overlay networking for containers. It is also actively used by other projects such as Kubernetes and Cloud Foundry, and mentioned by name in 500 projects on GitHub.

New in this Release

This etcd release improves the whole core of etcd, from the API handling internals to rethinking how to build a solid and practical Raft library. And we have taken feedback from all of you to greatly improve the operational experience with this release; thank you for taking the time to reach out on mailing lists, IRC, and in-person at our meetups. We hope that the new tooling in etcdctl and internal changes in etcd make it foolproof to configure and easy to debug.

At the heart of this release is a rethink of our Raft implementation. Raft enables etcd to do safe distributed compare-and-swap operations on keys and perform automatic leader election in the face of host failures. As many engineers have observed, implementing a consensus algorithm like Raft is a non-trivial task. But the etcd team has been hard at work. By leveraging all the latest knowledge and best practices in the Raft ecosystem, we’ve developed the new etcd Raft in 600 lines of Go and 2000 lines of tests, covering all cases in the state machine and every case described in the paper.

Working with the Community

We’re already hearing good things about the new implementation from our community:

“I ran across etcd's raft package and really liked it! It's such a nice minimal raft library that I could embed that in Beehive in 1 day with less than 200 LOC.” – Soheil Hassas Yeganeh author of Beehive

And from the co-author of the Raft paper:

"I appreciate how you're being careful to preserve the semantics of the unoptimized protocol." – Diego Ongaro co-author of the Raft paper

We also owe a hearty thank you to Blake Mizerany for his architecture guidance, and Ben Darnell and the CockroachDB team who have provided a lot of feedback on and contributions to our Raft library and recently finished integrating it into their own project.

With this new solid core, etcd will become an even better fundamental building block for composing distributed systems. To give it a shot, please head on over to our GitHub release page for container images and binaries for Linux and OS X.

Frequently Asked Questions

What happened to etcd v1.0?

Early in the development cycle of etcd we had an API that was called "v1". This API was on the path for removal since the v0.2.0 release over a year ago. Since we are removing this "v1" API we decided to make the major number line up with the API version number, thus etcd v2.0.0. Up until today v2.0.0 was the v0.5.0 development that has been happening in the master branch.

Is etcd v0.4 compatible with v2.0.0?

For clients, the v2 API is fully supported and shouldn’t require any changes to your code unless you’re relying on older metadata about the etcd nodes. The mechanism for peer communication has been improved through the work on the Raft library and isn’t compatible with v0.4 peers. A few other implementation details were also changed and are described in the backwards compatibility document.

When will etcd v2.0.0 appear in CoreOS?

After the release of etcd v2.0.0, it will first appear in the CoreOS alpha channel and then work its way into the beta and stable channels, following the normal CoreOS release process. If you’d like to use etcd v2.0.0 on CoreOS before its official release, it can easily be run as a container.

Is etcd v2.0.0 available as a container?

Yes! The releases page on GitHub has instructions for containers, Linux, and OS X.