手把手演示Zookeeper的集群搭建过程

一个重要的机制----选举机制

原则:集群中半数以上机器存活,集群可用。所以 Zookeeper 适合安装奇数台服务器。
Zookeeper 虽然在配置文件中并没有指定 Master 和 Slave 。但是 Zookeeper工作时,是有一个节点为 Leader ,其他则为 Follower,Leader 是通过内部的选举机制临时产生的。
以一个简单的例子来说明整个选举的过程。
假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,存放数据量都是一样的。假设这些服务器按照顺序启动,来看看会发生什么,如图
在这里插入图片描述
(1)服务器1启动,此时只有它一台服务器启动了,它发出去的报文没有任何响应,所以它的选举状态一直是LOOKING状态。
(2)服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,默认投给id较大的,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1、2还是继续保持LOOKING状态。
(3)服务器3启动,根据前面的理论分析,服务器3成为服务器1、2、3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的Leader。
(4)服务器4启动,根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了。
(5)服务器5启动,同4一样当小弟。

具体搭建过程

机器编号IP地址端口
zk1xxx2181
zk-2xxx2182
zk-3xxx2183

1、在 /usr/local/zk-cluster 目录下先复制一个 Zookeeper ,并重命名为 zk-1,在 zk-1 下新建 log 和 data 目录
2、在data 目录创建 myid 文件,写一个标识(1,2,3)
3、修改 zoo.cfg
4、复制两个 zk-1,并改名为 zk-2、zk-3
5、修改 zk-2 和 zk-3 中的 myid 文件和 zoo.cfg 文件
6、分别启动三个 Zookeeper
7、连接三个cli
注意:
在高版本中 log 目录可以不建立,默认会在 data 目录中记录日志

# 复制并重命名
cp -r /usr/local/zookeeper /usr/local/zk-cluster/zk-1
# 进入
cd zk-1
# 创建log和data目录
mkdir log
mkdir data
# 创建myid文件
touch /usr/local/zk-cluster/zk-1/data/myid
# 写一个数字1进去
vim /usr/local/zk-cluster/zk-1/data/myid
# 修改 zoo.cfg
vim /usr/local/zk-cluster/zk-1/conf/zoo.cfg

zk-1的zoo.cfg内容如下:

# 通信心跳数,取默认值
tickTime=2000

# LF初始通信时限
initLimit=10

# LF同步通信时限
syncLimit=5

# 指定data和log的保存目录
dataDir=/usr/local/zk-cluster/zk-1/data
dataLogDir=/usr/local/zk-cluster/zk-1/log

# 端口
clientPort=2181

# 集群配置
# 1,2,3 来自于data目录中的myid文件,该文件保存了当前集群的标识
# 2888,2889,2890为内部通信的端口,可以相同,只要不占用系统资源
# 3888,3889,3890为内部选举端口,可以相同,只要不占用系统资源
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
# 复制两个 zk-1,并改名为 zk-2、zk-3
cp -r zk-1 /usr/local/zk-cluster/zk-2
cp -r zk-1 /usr/local/zk-cluster/zk-3
# 修改 zk-2 和 zk-3 中的 myid 文件和 zoo.cfg 文件 
# 把zk-2中的myid文件改为2,把zk-3中的myid文件改为3
vim ./zk-2/data/myid
vim ./zk-3/data/myid
# 修改zoo.cfg 文件
vim ./zk-2/conf/zoo.cfg
vim ./zk-3/conf/zoo.cfg

zk-2的zoo.cfg
在这里插入图片描述
zk-3的zoo.cfg
在这里插入图片描述
注意:按顺序启动,2为 leader

# 分别启动三个 Zookeeper
./zk-1/bin/zkServer.sh start
./zk-2/bin/zkServer.sh start
./zk-3/bin/zkServer.sh start
# 连接三个cli
cd /usr/local/zk-cluster/zk-1/bin/
./zkCli.sh -server 127.0.0.1:2181

cd /usr/local/zk-cluster/zk-2/bin/
./zkCli.sh -server 127.0.0.1:2182

cd /usr/local/zk-cluster/zk-3/bin/
./zkCli.sh -server 127.0.0.1:2183
三台Zookeeper都可以读写操作。

关于不同加载顺序选举 leader 的问题

原则:谁的 myid 大,票就投给谁,直到选举成功(票数超过 Zookeeper 半数就选举成功),选举成功之后,将不再进行选举,只有投出 Leader 这个集群才能跑起来。

1、按照顺序 1 2 3启动
2 是Leader

2、倒序 3 2 1 启动
3 是Leader

3、启动顺序为:2 3 1
3是 Leader

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值