etcd是一个K/V分布式存储,每个节点都保存完成的一份数据。有点类似redis。但是etcd不是数据库。
1.先说废话。之所以会用etcd,并不是实际项目需要,而是前面自己写的上传的DBCacheServer服务部署集群的解决方案,想了解服务功能。可以阅读前一篇博文,其实我就是想给大家提供一个查询数据库的服务,能够简化我们一些功能。
最开始我打算使用zokkeeper,因为使用广泛,但是利用这一段学习时间,我在网上查阅了相关资料,采用了consul,因为开箱即用,什么都是好的,并且单文件很适合,我又不需要那么复杂,简单试了一把后放弃了。其余不说,反正就是我只需要简单的,不需要去填坑。最后我看了etcd。感觉合适,最后采用了它,简单可用。如果有兴趣的话建议看下《etcd技术内幕》这本书。
2.etcd使用
(1)以我整理的配置模板说明,更加详细的要自己研究,先看图
1.如果是单个节点,屏蔽掉自己的地址注解后的所有项
2.集群部署的2种方式:(1).静态部署,将所有节点都写在initial-cluster项后面,然后启动。必须全部启动集群才启动
(2)etcd方式发现,需要有一个已经部署好的独立集群A,新建集群B以A的一个节点建立一个发现URL:
注册命令:curl -X PUT http://192.168.3.107:2379/v2/keys/discovery/cluster_DBCacheServer/size -d value=3 ,其中3是size的值,就是说明要建立的集群B有3个节点,节点全部启动集群才能给启动。v2/keys/discovery可以看做是一个固定值。其后是一个唯一标识,只要保持唯一即可,官网中的例子是一个16进制字符串。然后将该地址填写到discovery项后。
如果想采用此方式,必须先有A集群,如果你只是为了注册,可以采用静态集群部署一个单集群节点。
(3)DNS发现请自己查阅官网说明
(4)扩展节点,官网文档有说明,执行:etcdctl member add infra3 http://192.168.3.108:2380,然后启动etcd.
3.etcd客户端,官网查看,如果找不到就到处搜索。
一个java客户端支持V3的
<dependency>
<groupId>com.coreos</groupId>
<artifactId>jetcd-core</artifactId>
<version>0.0.2</version>
</dependency>
另外说说几种集群发现
1.比较https://www.cnblogs.com/fei33423/p/7996359.html
我就不详细说了,很多程序员陷入了一个怪圈,一旦出现的几种相同组件,总想比较出谁是最优先的。但是佛说存在即是合理的,我也相信佛说的。但是通过这次我的入坑。我想说当你不怎么了解的时候,可以都去尝试下。由于各自的业务不同,合适的就是最好的。如果说谁包含了谁,那就是谁给你比较全面而已。我开始就是采用的consul。最后抛弃了,主要是它全面但是对我没有用,而且部署看起来不方便,还有一些原因让我放弃而采用了etcd.封装完整就意味灵活低,反正看自己使用。但是etcd实现了基本的分别存储,分布式锁。尤其是watch是相当重要的,很有扩展,而且可以监视,查询子目录。以最基础的东西,自己的发挥空间就大。封装完善的简单使用,功能强大,只能说各有特点。大家自己仔细斟酌吧。euerka已经不开源了,小用户就别用了。如果etcd能够基本满足你,建议使用。