zookeeper和etcd的安装和使用
zookeeper的核心是采用树形存储目录,存储key-value数据。其采用分布式集群,存储少量的数据,保证数据的高一致性,分区容错性(CP), 而舍弃了高可用(A),因为在某些情况下是不可用的,比如选举的时候,是不可用的,需要重试。
其安装比较简单,java代码,无其他依赖, 可复制其配置文件zoo-sample.cfg为zoo.cfg, 修改dataDir 值,默认值为dataDir = /temp/zookeeper,这个会在电脑重启后丢失,故要修改。运行如下命令即可启停。
./zkServer.sh start
./zkServer.sh stop
zookeeper可以运行在standalone和culster模式,单机比较简单, 可用于学习其基本命令的使用。最基本的命令ls,就像linux下面的ls命令,可列出子节点,可用参考官方文档,多多尝试。
在分布式环境中,要注意配置其他节点的位置,比如
server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口
server.1=bigdata-pro01.kfk.com:2888:3888
server.2=bigdata-pro02.kfk.com:2888:3888
server.3=bigdata-pro03.kfk.com:2888:3888
节点服务编号需要在dataDir新建文件myid,然后可以写入1,2,或者3,这样server就可以相互通信了。
Zookeeper不仅可以保持分布式事物中,数据一致性,还提供监听机制Watcher,数据发生变更了会通知订阅者,以便订阅者做出响应。然后就是编写Zookeeper的应用,这需要有一个好用的客户端组件,幸好有netflix开源了一套curator组件,
详细参考博文:https://www.cnblogs.com/java-zhao/p/7350945.html。
操作Zookeeper的节点较为简单,主要还是看一下,是怎么监听节点的。curator监听节点的机制是用本地缓存,Zookeeper中的数据比较。其源码在包中:
org.apache.curator.framework.recipes.cache。 可以看到,里面有三个node,就是代表三种监听方式:本节点(NodeCache), 直接子节点(PathChildrenCache), 完全子节点(TreeCache)。
参考博文:
Zookeeper和Etcd的从功能上说是差不多的,只是其环境不一样。
使用dubbo,要使用zookeeper,在为了解到这个中间件时,我什么也不知道,好在安装很容易,于是安装上,通过命令行体验了一把。最开始的感觉就是建立一个类似于树的存储结构,然后存取数据,当然我们更多的是使用这个集群,这其中有复杂的通信机制,比如各个节点的同步,心跳的概率等,更详细的我也会看这篇博文:https://crossoverjie.top/2018/08/27/distributed/distributed-discovery-zk/,简单易懂。
在将zookeeper discovery集成到springboot中的coding过程中,我没做什么事情就编译报错,我自己自定义集成zookeeper客户端就可以正常运行,后来网上查了很长时间,才知道是版本兼容问题:https://www.jianshu.com/p/384442962e86。看看人家的排错技能,能够定位到错误的代码块,然后分析逻辑,这应该是程序员的基本技能。
etcd的在linux中安装很简单,可以没有配置文件,那么其数据存在哪里呢?经过查阅资料和测试,执行etcd命令启动服务,不会去默认读取conf文件,而是会在启动路径下创建default.etcd文件,这在不同目录启动,就有不同的目录,不好。一般会把这种这种配置文件放置在etc的同名目录下面,但是想要生效,要在etcd启动命令后面添加参数,这样在每次启动时都得输入复杂参数,其配置文件是json格式的。
然后就是使用systemctl命令,还可以设置开机自启动。
systemctl start etcd
// failed to start etcd.service,unit no foud
// 很好的说明了systemctl支持的前提条件
需要配置etcd.service文件,可以参考相关博客
然后是etcd报错,fail at step CHDIR..., 这是没有创建工作目录的原因。应为etcd如果配置了data-dir,就不会自己创建工作目录,会去读取。
参考博文:etcd的配置文件