特点
一个领导者(Leader)多个跟随者(Follower)组成的集群
集群只要有半数以上节点存活,就能正常提供服务
一般安装奇数台服务器
全局数据一致,Leader负责写入,Follower同步数据
实时性,在一定时间范围内,Client能读到最新数据
选举机制
第一次启动
1、每台服务器启动时都将选票投给自己
2、启动两台以上服务器时,myid大的获得所有选票
3、获得半数选票的当选Leader,其他的为Follower
4、后续启动的服务器自动变成Follower
未选出Leader时,服务器状态都为LOOKING
非第一次启动
按照Epoch、ZXID、SID顺序大的当选
CRUD
新增
节点类型
持久不带序号(Persistent)
create /path data
持久带序号(Persistent_Sequential)
create -s /path data
短暂不带序号(Ephemeral)
create -e /path data
短暂带序号(Ephemeral_Sequential)
create -es /path data
删除
delete [-v dataVersion] path
dataVersion与当前版本号不一致时,拒绝删除
修改
set [-v dataVersion] /path data
查看
get [-s] path<br>
-s 查看详情信息
数据写入
连接Leader
Leader收到请求后,先写入自己库中,再分发给Follower
Leader收到ack后,包括自己超过半数后,返回ack给客户端
连接Follower
Follower会将请求转发给Leader
Leader按照直连Leader处理
Leader将ack发送给Follower,尤其给客户端
实际应用
服务器动态上下线
服务器在ZK/servers下创建 临时带序号 的节点
客户端监听/servers下节点的变化
分布式锁
依然是创建 临时带序号 的节点
因为序号是升序的,所以每个节点监听上一个序号的变化
待上一个节点断开连接释放锁,下一个节点即可获得锁