(二)zookeeper集群搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qinshi965273101/article/details/82937890

集群模式和单机模式的主要区别在于配置文件 conf/zoo.cfg。

准备阶段:三台linux服务器,zookeeper压缩包。

1、搭建zookeeper集群

  • 分别在三台机器上安装号zookeeper,并更改配置文件conf/zoo.cfg的dataDir属性
  • 在每个机器的配置文件zoo.cfg末尾添加信息,如果是云服务器,ip应填内网ip
#server是关键字,后面的数字是选举id,在zookeeper集群选举中会用到。选举id是自定义的,但不能重复
#2888是原子广播端口,自定义端口号
#3888是选举端口,自定义端口号
server.1=192.168.11.10:2888:3888
server.2=192.168.11.10:2888:3888
server.3=192.168.11.10:2888:3888
  • 找到配置文件中dataDir对应的目录,在该目录下创建文件myid,并以选举id作为文件内容。因为选举的时候会去该目录下的myid文件里找选举id
  • 关闭各自机器的防火墙:service iptables stop
  • 启动各自的服务,并查看各自zookeeper服务的状态

  • 启动日志:若启动失败,则在启动目录里会生成一个zookeeper.out日志文件,注意自己在哪个目录启动的zookeeper

2、选举机制

选举分两个阶段:

  • 数据恢复阶段,每台zookeeper启动时,都会从dataDir目录找到最大的事务id(Zxid)
  • 选举阶段,每台zk服务都会推荐自己当leader,并提交自己的选举协议,然后进行pk。

协议内容如下:

协议内容 内容注释
拥有的最大事务id 事务id越大代表数据越新
自己的选举id  
逻辑时钟值 保证zookeeper在同一轮选举中
当前状态 Looking(选举中),Follower,Leader,Observer(观察者)

pk原则:

1 先比较最大事务id,最大者当leader
2 若事务id一样,则比较选举id,最大者当leader
3

过半性:只有支持者过半才能当leader

所以一般搭建zk集群都是奇数台服务器,这样能更好的满足过半性

3、举例说明选举机制原理

如图,有A,B,C三台zookeeper服务组成的集群,以及各自的选举id,最大事务id,启动服务的顺序

过程详解:

  • 启动A,由于没有竞争对手,则A处于Looing(选举中)状态
  • 启动B,此时A和B开始pk
  • A和B的Zxid相等,B的myid更大,所以B胜利,那么A肯定就是Follwer
  • 由于整个集群只有三个zookeeper服务会参与选举,只要有两个支持者,则leader就会被选举出来。此时A和B都支持B当leader,所以已经满足了过半性。
  • 启动C,由于Leader已经选举出来,所以C为Follower

此时若把B停掉,那么A和C又会按照规则重新pk,结果显而易见,C为Leader,A为Follower。

此时若再A和C中停掉任意一台,集群就会挂掉。因为只有一台zookeeper服务,无法满足过半性

猜你喜欢

转载自blog.csdn.net/qinshi965273101/article/details/82937890