zk集群
组成
Leader
领导者
事务请求唯一的调度者和处理者,保证进去事务的顺序性
Follower
跟随者
处理非事务请求,如果接收到事务请求,则转发给Leader,有选举权
Observer
观察者,不参与提交和选举,可处理非事务请求,可转发事务请求
搭建步骤
-
修改 zoo.cfg文件末尾添加
server.1=ip:port1:port2
其中port1端口是Follower和leader交换信息的端口
port2是重新选举的通讯端口 -
创建myid文件配置服务器编号
-
启动对应的zk进程
选举原理
选举场景
- 集群启动选举
- 运行过程中leader挂机
选举策略
myid大的权重越大
事物id越大权重越大
逻辑时钟epoch(谁先发消息谁的epoch更大)
选举过程
- 每个服务都发起投票(myid、zxid),投自身
- 接受来自其他机器的投票
接收到投票后开始计算投票
a. 优先比较epoch,谁先选谁
b. zxid越大
c. myid越大 - 统计票数超过半数则成为新的leader
- 新leader服务的状态变更
follower变为FOLLOWING
leader变为LEADING
新加入的机器自动变更为FOLLOWING
集群数据同步-ZAB
消息广播
主节点把数据发给从节点
从节点给出正确反馈
主节点发出commit命令
崩溃恢复
主节点失去了半数从节点
主节点发送消息到从节点后立即崩溃
重新选举出新的主节点 zxid最大的为新的主节点
新的主节点将事务日志中尚未提交的消息进行处理