点击关注公众号,k8s优秀车间主任及时送达
一、Zookeeper 介绍
ZooKeeper 是⼀种分布式协调服务,⽤于管理⼤型主机。在分布式环境中协调和管理服务是 ⼀个复杂的过程。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发⼈员专注于核⼼应⽤程序逻辑,⽽不必担⼼应⽤程序的分布式特性。
二、数据结构
ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据,每个 ZNode 都可以通过其路径唯一标识。
三、应用场景
一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
四、Zookeeper Linux 服务器端聚群搭建
我这边就用一台服务器作为模拟环境。
第一步:拷贝拷贝三份配置文件,分别为zoo1.cfg、zoo2.cfg、zoo3.cfg。
zoo1.cfg 配置文件如下:
zoo2.cfg 配置文件如下:
zoo3.cfg 配置文件如下:
zookeeper 的三个端口作用
- 1、2181 、2182、2183: 对 client 端提供服务
- 2、2001、2002、2003: 集群内机器通信使用
- 3、3001、3002、3003 选举 leader 使用
第二步、添加4个节点myid,并且设值
/usr/local/zookeeper/zkdata/zk1# echo 1 > myid /usr/local/zookeeper/zkdata/zk2# echo 2 > myid /usr/local/zookeeper/zkdata/zk3# echo 3 > myid /usr/local/zookeeper/zkdata/zk4# echo 4 > myid
第三步、启动服务
第四步、查看状态
zoo1信息
zoo2信息
zoo3信息
最后显示集群搭建成功!Mode:leader 代表主节点,follower 代表从节点,一主二从。
五、Zookeeper 集群选举过程
zookeeper 的 leader 选举存在两个阶段,一个是服务器启动时 leader 选举,另一个是运行过程中 leader 服务器宕机。在分析选举原理前,先介绍几个重要的参数。
- 服务器 ID(myid):编号越大在选举算法中权重越大
- 事务 ID(zxid):值越大说明数据越新,权重越大
- 逻辑时钟(epoch-logicalclock):同一轮投票过程中的逻辑时钟值是相同的,每投完一次值会增加
选举状态
- LOOKING: 竞选状态
- FOLLOWING: 随从状态,同步 leader 状态,参与投票
- OBSERVING: 观察状态,同步 leader 状态,不参与投票
- LEADING: 领导者状态
集群上线时的Leader选举过程
以上述案例为讲解:
1、服务器1启动,此时服务器1为looking状态,服务器1会生成一张选票投自己。这时服务器1票数只有一票,票数没能够过半。选举无法正常进行,服务器1还得处于looking。
2、服务器2启动,再次发起一次选举,服务器1和2分别会投自己一票和相互交换选票,此时选票已经过半。服务器2因此当选为leader。
3、服务器3启动,发现集群已经选举出了leader,于是自己就作为小弟follower。
**注:崩溃恢复时的Leader选举。Leader建⽴完后,Leader周期性地不断向Follower发送⼼跳(ping命令,没有内容的 socket)。当Leader崩溃后,Follower发现socket通道已关闭,于是Follower开始进⼊到 Looking状态,重新回到上⼀节中的Leader选举过程,此时集群不能对外提供服务。**
注重点 :选举机制
选举机制 半数机制,超过半数的投票通过,即通过。
(1)第一次启动选举规则:投票过半数时,服务器 id 大的胜出
(2)第二次启动选举规则:
①EPOCH 大的直接胜出
②EPOCH 相同,事务 id 大的胜出
③事务 id 相同,服务器 id 大的胜出