为什么zookeeper的节点配置的个数必须是奇数个?

一、准备工作

       centos6.5服务器一台(如果需要搭建集群环境,至少需要三台)

       zookeeper-3.4.6.tar.gz安装包一个

      https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/(zookeeper下载网址)

       安装zookeeper之前需要先安装jdk,否则无法正常使用。


二、搭建zookeeper的单机环境

       1).解压zookeeper的tar包到指定目录下

           tar   -zxvf      zookeeper-3.4.6.tar.gz    -C     /usr/local

       2).对解压后的目录进行重命名

           mv zookeeper-3.4.6    zookeeper3.4

        

        

       3).对zoo_sample.cfg文件重命名为zoo.cfg文件

         #进入zookeeper的解压目录conf目录中

          cd  /usr/local/zookeeper3.4/conf 

          #对zoo_sample.cfg文件进行重命名,zookeeper启动会加载zoo.cfg文件

          mv    zoo_sample.cfg    zoo.cfg

        

       4).修改zoo.cfg文件中的内容

        #修改数据存放目录  dataDir=/usr/local/zookeeper3.4/data

        


       5).进入zookeeper的bin目录,启动zookeeper

         #进入zookeeper的bin目录

           cd  /usr/local/zookeeper3.4/bin

         #启动zookeeper服务

           ./zkServer.sh  start

         #查看zookeeper的启动状态

          ./zkServer.sh   status

         


启动成功后,我们对zoo.cfg文件中的几个参数做一个简单的了解:

Zookeeper 客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。

tickTime=2000

集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)

initLimit=10

集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。

syncLimit=5

Zookeeper保存数据的目录

dataDir=/usr/local/zookeeper3.4/data

客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

clientPort=2181


三、搭建zookeeper的集群环境

zookeeper集群要求,服务器个数为奇数。

现在启动三台服务器,版本都是centos6.5  

  • 安装jdk
  • 按照单机版的方式 安装zookeeper
  • 关闭三台机器的防火墙  


三台服务器的ip地址分别为192.168.95.129/192.168.95.130/192.168.95.131


1).修改zoo.cfg文件(三台服务器都要修改)

server.1=192.168.95.129:2888:3888

server.2=192.168.95.130:2888:3888

server.3=192.168.95.131:2888:3888


2).在zookeeper的data目录下,创建myid文件

注意:我们刚才修改zoo.cfg文件增加的配置信息格式为 server.?=ip:port:port

         其中?号为一个数字,此时myid文件中的内容就是?号这个数字。

        例如在192.168.95.129这台服务器中myid文件的内容就是数字1

                  192.168.95.130这台服务器中myid文件的内容就是数字2

                  192.168.95.131这台服务器中myid文件的内容就是数字3

     #进入data目录下

       cd  /usr/local/zookeeper3.4/data

      #创建myid文件,并且编辑文件中的内容

        vi myid

         

     注意:三台服务器都要修改,修改之后就可以重新zookeeper了

3).启动三台服务器的zookeeper服务





启动之后查看zookeeper服务的状态

Mode:leader代表主节点

Mode:follower代表从节点



为什么zookeeper的节点配置的个数必须是奇数个?

       zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的
      如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1没有过半,所以2个zookeeper的死亡容忍度为0。 如果有3个zookeeper,一个死了,还剩下2个正常的,过半了,所以3个zookeeper的容忍度为1

      容忍度就是允许挂掉几台zk,还能保证集群对外正常工作。

通过下边这个图,可以发现一个情况。

(N-1)/2 的结果取整就是zk允许出现故障机器的最大数。那么N如果是zk的节点数,最好为奇数











猜你喜欢

转载自blog.csdn.net/a905793674/article/details/79986553