这两天抽了点时间研究了下现在比较火辣的etcd,网上很多的文章都是写etcd和docker的结合使用。  不说docker,咱们单独就etcd这个高可用键值来聊聊吧。 


etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader。


Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了etcd。


在分布式系统中,如何管理节点间的状态一直是一个难题,etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态。etcd目前的版本是0.4.5,虽然未发布1.0版本(今年会发布),但其已经使用在多个生产系统中,可见其火热程度。etcd的特性如下:

简单: curl可访问的用户的API(HTTP+JSON)
安全: 可选的SSL客户端证书认证
快速: 单实例每秒 1000 次写操作
可靠: 使用Raft保证一致性


目前有很多支持etcd的库和工具,比如命令行客户端工具etcdctl、Go客户端go-etcd、Java客户端jetcd。


那么zookeeper和etcd的区别有什么方面 ? 


在原生接口和提供服务方式方面,etcd更适合作为集群配置服务器,用来存储集群中的大量数据。方便的REST接口也可以让集群中的任意一个节点在使用Key/Value服务时获取方便。ZooKeeper则更加的适合于提供分布式协调服务,他在实现分布式锁模型方面较etcd要简单的多。所以在实际使用中应该根据自身使用情况来选择相应的服务。

我这里照着官网的例子揍一遍, 怎么用都感觉在用zookeeper的kazoo似的。 


既然我们说etcd 和 ZooKeeper很像,那也是完全可以做成全局网络锁的。

这里再把etcd的python api再来详细的描述下

创建etcd的连接对象 client = etcd.Client(host=’127.0.0.1′, port=4001)  啥端口,啥主机,你自己搞定。 

需要注意的时,allow_redirect=True  这个参数是当断链的时候,etcd会再次复用connect创建可用的连接

下面的东西和zookeeper很像了,但是那种目录结构体。


对于数据的修改也可以用 update

用read()方法 从etcd获取节点数据

过两天再写一篇,关于etcd 和 docker组合在一起的应用方案



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

关于数据写入的etcd http api文档解释[python]

上手在github提交了python gevent etcd的非阻塞模块。 正好这两天寂寞的很,打算再重写下etcd 输入更改数据这块的逻辑。 搜相关文档的时候,发现...

阅读全文

用gevent开发非阻塞的etcd python客户端模块

起因,我这边有个服务端,是专门控制服务发现和注册功能,任务的调度都是用gevent来实现,如果直接在gevent里使用python-etcd,会发生阻塞的,gevent对于那...

阅读全文

开源项目之python使用etcd构造分布式互斥锁

    前几天跟朋友聊了下分布式互斥锁的事,我以前用过redis和zookeeper做分布式的互斥锁,但那哥们的场景下已经用了etcd,不再想引入其他的服务...

阅读全文

1则回应给“python使用etcd来实现配置共享及集群服务发现 【上】”

  1. 密集说道:

    对我有用

发表评论