肖劲 分布式实验室
etcd是一个用于配置共享和服务发现的高性能的键值存储系统。在2.0版本发布半年之后,etcd终于发布了新的2.1版本,2.1修复了2.0中的众多BUG,并引入了很多新功能,如在线不中断更新与新的鉴权API等众多改进与新功能。
经过数月的艰苦工作,etcd 2.1终于发布了。自从1月份2.0版本发布以来,整个研发团队收集了很多非常有价值的反馈,而且这些反馈都来自于真实生产环境。在这些反馈的基础上,我们发布了新的2.1版本,新功能包括:鉴定/授权API、新的监控API、提升了传输的稳定性、改进了etcd服务器集群之间传输数据的性能、增强了集群的运行稳定性。
快速回顾下,我们发现etcd是一个开源的、分布式的、基于持续键值对存储的服务器集群共享配置、服务发现以及服务节点调度解决方案。使用etcd,即使面对单个服务器失效,应用依然可以继续运行。同时etcd也是CoreOS的核心组件,它为CoreOS带来了安全的自动更新、主机调度的协调工作以及容器的覆盖网络(overlay)等功能。
如果你觉得看简介比较繁琐,你可以在GitHub上下载我们最新的二进制文件。同时,etcd 2.1.1已经包含在了CoreOS 725.1.0中了(现在在alpha通道中),所以你可以自己下载去玩。
从2.0版升级到2.1版是一个零宕机滚动升级过程。你可以根据向导提示,将集群一步步从2.0升级到2.1。详细信息可以参考升级文档。如果你当前运行的版本低于0.4.x,那么你必须先升级到2.0,然后从2.0版升级到2.1。
同时,随着版本的发布,etcd 2.1是目前最稳定的etcd版本,所以所有的bug修改都会以2.1.x版本为基础,不再针对之前的2.0.x版本发布修改。
这个版本的一个重要特性是/v2/auth
端,为etcd的键值对API加入了鉴权功能。这个API允许为用户和角色加key前缀,并且允许用户使用HTTP基本认证功能,这样可以使团队合作更加可控。这个功能包含在etcd的HTTP Server、etcdctl命令行客户端以及etcd/client的Go开发包中。你可以在etcd权限管理文档中找到更多的细节。但是还是要注意,这是个实验性的功能,而且会随着用户的反馈而不断改进。我想我们的方向是正确的,但是对于API的细节可能会发生调整。
很多使用etcd的用户所在的网络环境不是很好,包括高延迟、网络数据不一致等问题比较多。我们虽然不能保证etcd可以应付所有复杂的网络环境,但是我们在这一版中对etcd在使用网络方面做了很多优化,使得etcd在复杂网络环境情况下能够更好的工作。
首先,我们减少了建立连接的开销,同时使得一致性协议(raft)的通信更加高效与稳定,现在etcd的节点之间通过长连接来进行通信。其次,减少raft命令的提交延迟,现在每个raft附加消息(append massage)都附属在一个提交索引(commit index)之下。在轻负荷(<100写操作/秒)情况下提交延迟由100ms减少到1ms。最后,etcd的raft实现能提供更好的内部数据流转控制,显著的减少了raft消息丢包的情况同时还改进了CPU与内存的使用效率。
我们在发布2.1之前的4个月里,在自建的故障注入(fault-injecting)型功能测试框架里运行etcd,来对etcd做严格测试。我们的目标是让etcd在重度使用的情况下仍能够保持功能上的容错性;在这几个月的测试中,我们发现etcd能够在很多极其严苛与各种功能失效的情况下保持服务的鲁棒性。而且我们会在2.1发布之后持续对etcd进行测试。
现在支持分级日志了。用户根据业务需要设置日志级别。同时对于DEBUG级别的日志我们会重复啰嗦的记录几遍,所以etcd的默认日志的可读性会提高很多。你可以通过设置flag来控制日志的级别,参考https://github.com/coreos/etcd/blob/master/Documentation/configuration.md#logging-flags。
etcd 2.1发布了新的监控API,并可以用于排错(debug)与实时(real-time)的监控。它提供了对客户端使用情况与资源利用方面的统计功能。向之前的鉴权API一样,这个也是实验性的功能,可能会根据反馈进行调整、改进。
我们会一如既往的把etcd打造成一个Google风格的底层的基础工具,用户可以开箱即用、信任它并且依赖它提供的服务。开始使用etcd吧,持续为我们提供您的反馈,甚至可以直接贡献代码。