Zookeeper入门
Zookeeper特点
- 一个领导者,多个跟随者组成的集群。
- 集群只要有半数以上节点存活Zookeeper集群就可以正常运行,Zookeeper适合奇数台服务器。
- 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接那个Server,数据都是一致的。
- 更新请求顺序执行,来自同一个Client的更新请求暗器发送顺序依次执行
- 数据更新原子性,一次跟新要么成功,要么失败。
- 实时性,在一定时间范围内,Client能读到最新数据。
集群
集群安装
-
将 zoo_sample.cfg 文件复制并重命名为 zoo.cfg 文件
-
创建zkData文件夹,将配置文件中的dataDir修改为zkData
-
在zkData中添加myid文件,文件中写入id
-
在zoo.cfg中添加
server.A = B:C:D
A为myid中的id
B为IP地址
C为交换信息的端口
D为选举端口
选举
第一次选举
当集群没有leader时,服务器启动会投自己一票,状态为looking,当有新的服务器时,服务器会进行比较myid,将票投给myid大的服务器,当某台服务器的选票大于节点半数时,改服务器选举为leader,其他的服务器状态改为follower,当再有新的服务器启动时,不会改变选票和状态。
非第一次选举
依次比较epoch,zxid,serverid
元素相同时,比较下一个元素
客服端命令行
节点信息
znode状态信息
每个znode数据节点中除了可以存储业务数据外,其本身还存储了数据节点相关的一些状态信息。共包含以下几种状态信息。
znode状态信息 | 解释 |
---|---|
cZxid | create ZXID,即该数据节点被创建时的事务id |
ctime | create time,即该节点的创建时间 |
mZxid | modified ZXID,即该节点最终一次更新时的事务id |
mtime | modified time,即该节点最后一次的更新时间 |
pZxid | 该节点的子节点列表最后一次修改时的事务id,只有子节点列表变更才会更新pZxid,子节点内容变更不会更新 |
cversion | 子节点版本号,当前节点的子节点每次变化时值增加1 |
dataVersion | 数据节点内容版本号,节点创建时为0,每更新一次节点内容(不管内容有无变化)该版本号的值增加1 |
aclVersion | 节点的ACL版本号,表示该节点ACL信息变更次数 |
ephemeralOwner | 创建该临时节点的会话的sessionId;如果当前节点为持久节点,则ephemeralOwner=0 |
dataLength | 数据节点内容长度 |
numChildren | 当前节点的子节点个数 |
https://www.jianshu.com/p/cbe5f0dd6cca