1、Zookpeer功能
统一命名服务
统一配置管理
统一集群管理
服务器的动态上下线
软负载均衡
2、Zookpeer选举
第一次选举
假设有五台服务器
(1)服务器 1 启动,发起一次选举;投自己一票,不够半数,选举无法完成,服务器状态保持为LOOKING
(2)服务器 2 启动,再次发起选举,服务器 1 和 2 分别投自己一票,并交换选票信息;此时服务器 1 发现服务器 2 的 myid 比自己目前投票推举的(服务器1)大,更改选票为推举服务器2,此时服务器1票数0票,服务器2票数2票,没有半数以上,选举无法完成,服务器 1,2 状态保持为LOOKING
(3)服务器 3 启动,发起一次选举,此时服务器 1 和 2 会更改选票为服务器3,此次投票结果,服务器 1 为 0 票,2 为 0 票,3 为 3 票,此时服务器3的票数已经超过半数,服务器 3 当选leader,服务器1,2更改状态为FOLLOWING,服务器 3 更改状态为LEADING
(4)服务器 4 启动,发起一次选举,此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息,交换选票信息结果,服务器 3 为 3 票,服务器 4 为 4 票,此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING
(5)服务器 5 和服务器 4 一样,为FOLLOWING
leader挂掉之后再次选举
在一台机器进入leader流程时,当前集群可能会处于以下两种状态
(1)集群中已经存在一个leader
重新连接leader,直到连上为止
(2)集群中不存在leader
根据EPOCH,ZXID,SID进行选举
EPOCH:任期代号
ZXID:事务ID
SID:服务器ID
EPOCH->ZXID->SID
3、Zookpeer操作
(1)创建永久不带序号节点
create /test "test"
create /test/test1 "test"
(2)获取节点信息
get -s /test
(3)创建永久带序号节点
create -s /test "test"
(4)创建临时节点
create -e /test "test"
(5)创建带序号的临时节点
create -e -s /test "test"
(6)修改某个节点值
set /test "test"
4、Zookpeer监听
4.1 Zookpeer监听原理
(1)创建一个main()线程
(2)在main线程中创建Zookeeper客户端,这时会创建两个线程,一个线程负责网络连接通信(connect),一个负责监听(listener)
(3)通过connect线程将注册的监听事件发送给Zookeeper
(4)在Zookeeper的注册监听列表中奖注册的监听事件添加到列表中
(5)Zookeeper监听到有数据或路径变化,将会将这个消息发送给listener线程
(6)listener线程内部调用process()方法
4.2 Zookpeer监听命令行操作
(1)监听节点值变化
get -w /test
注意:注册一次监听,只能监听一次,想要再次监听,需要再次注册
(2)监听节点数变化
ls -w /test