《Zookeeper》第一篇 集群环境搭建


在实际的生产环境中,集群是部署在不同机器上的, 本着简单明了的原则, 本次介绍的集群是搭建在同一台虚拟机器上,建立三个Zookeeper的节点,用端口号进行区分,搭建一个 伪集群
在这里插入图片描述

一. 环境准备

1. 配置JDK

Zookeeper的运行需要JDK为基础,所以需要先在虚拟机上配置好JDK
JDK1.8 工具包
提取码: qwer

  • 先将JDK工具包上传到虚拟机上(一般上传到目录/usr/local目录下)
  • 解压工具包
tar -zxvf jdk-8u341-linux-x64.tar.gz
  • 配置JDK环境变量
vim /etc/profile

先按 i键 进入编辑模式, 在末尾添加下面两句, 再按 Esc键 退出编辑模式,最后按 Shift + Q键 , 进入 Ex模式 , 输入 wq! 保存退出

export JAVA_HOME=/usr/local/jdk1.8.0_341/
export PATH=$PATH:$JAVA_HOME/bin
  • 重新刷新下配置,否则可能不生效
source /etc/profile
  • 最后验证下JDK是否配置成功
java -version

出现下面情况,说明JDK配置成功
在这里插入图片描述

2. 配置Zookeeper

Zookeeper 工具包
提取码: qwer

  • 将Zookeeper工具包上传到虚拟机上(一般上传到目录/usr/local目录下),并解压
tar -zxvf zookeeper-3.5.8.tar.gz 
  • 为了后续配置文件好配,这里我单独创建一个zookeeper目录
mkdir /usr/local/zookeeper
  • 将解压后的apache-zookeeper-3.5.8-bin目录中的内容复制至zookeeper目录
cp -r apache-zookeeper-3.5.8-bin/.  /usr/local/zookeeper
  • 新建data目录,并在此目录下新建三个子目录
mkdir /usr/local/zookeeper/data
mkdir /usr/local/zookeeper/data/node-1
mkdir /usr/local/zookeeper/data/node-2
mkdir /usr/local/zookeeper/data/node-3
  • 为了不破坏zookeeper原始的配置文件,搭错了还能重来, 将zoo_sample.cfg配置文件复制三份
cp  /usr/local/zookeeper/conf/zoo_sample.cfg  /usr/local/zookeeper/conf/zoo-1.cfg
cp  /usr/local/zookeeper/conf/zoo_sample.cfg  /usr/local/zookeeper/conf/zoo-2.cfg
cp  /usr/local/zookeeper/conf/zoo_sample.cfg  /usr/local/zookeeper/conf/zoo-3.cfg
  • 修改三份zoo.cfg中的clientPort和dataDir配置信息
vim /usr/local/zookeeper/conf/zoo-1.cfg
## node-1节点 - zoo-1.cfg
clientPort=2181  ## 默认就是2181,不用改
dataDir=/usr/local/zookeeper/data/node-1

vim /usr/local/zookeeper/conf/zoo-2.cfg
## node-2节点 - zoo-2.cfg
clientPort=2182  
dataDir=/usr/local/zookeeper/data/node-2

vim /usr/local/zookeeper/conf/zoo-3.cfg
## node-3节点 - zoo-3.cfg
clientPort=2183  
dataDir=/usr/local/zookeeper/data/node-3

至此,搭建集群的前期准备工作就算完成了,接下来就是集群搭建了

二. Zookeeper 集群搭建

1. 创建myid文件

在每个节点中的data目录下, 创建下myid文件,并且写入标识值
myid的值是zoo.cfg文件里定义的server.A项A的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个server,只是一个标识作用。

echo 1 >/usr/local/zookeeper/data/node-1/myid
echo 2 >/usr/local/zookeeper/data/node-2/myid
echo 3 >/usr/local/zookeeper/data/node-3/myid

2. 配置集群节点信息

在每个节点的zoo.cfg文件中都配置集群节点信息

server.1=10.15.122.88:2881:3881
server.2=10.15.122.88:2882:3882
server.3=10.15.122.88:2883:3883

server.A=B:C:D

  • A 是一个数字,表示这个是第几号服务器; 集群模式下配置一个文件 myid,这个文件在 dataDir
    目录下,这个文件里面有一个数据 就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据
    与 zoo.cfg 里面的配置信息比较从而判断到底是哪个server
  • B 是这个服务器的地址
  • C 是这个服务器Follower与集群中的Leader服务器交换信息的端口
  • D 是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而
    这个端口就是用来执行选举时服务器相互通信的端口

3. 启动Zookeeper

启动三个zoo.cfg配置文件,代表三个zookeeper节点

sh ./bin/zkServer.sh start ./conf/zoo-1.cfg
sh ./bin/zkServer.sh start ./conf/zoo-2.cfg
sh ./bin/zkServer.sh start ./conf/zoo-3.cfg

在这里插入图片描述

4. 查看各节点状态

sh ./bin/zkServer.sh status ./conf/zoo-1.cfg
sh ./bin/zkServer.sh status ./conf/zoo-2.cfg
sh ./bin/zkServer.sh status ./conf/zoo-3.cfg

在这里插入图片描述

从上述三个节点的状态看, 节点2成为了主节点, 节点1和节点3成为了从节点
至此, 简易的Zookeeper集群搭建完成

三. 验证集群是否正常运行

查看三个节点运行的进程号

ps -ef | grep .cfg

在这里插入图片描述
以下每个场景都是模拟一主二从, 现在node-1和node-3是从节点,node-2是主节点
下线节点使用下面命令,直接杀死进程

kill -9 进程号 

模拟场景1: 下线一个从节点, 主节点和另一个从节点正常存活

将从节点node1下线, 从节点node3和主节点node2存活

kill -9 9184

此时再来查看进程运行情况
在这里插入图片描述
可以看到从节点node-1已经成功下线
再看下集群情况
在这里插入图片描述
此时,node-1节点已经下线,不影响集群的正常运行且其他节点的身份也没变化, node-2依旧是主节点,node-3还是从节点

模拟场景2: 下线主节点,其他从节点正常存活

前提要先把上一场景的node-1重新启起来.node-1会以从节点的身份重新加入到集群中
将主节点node-2下线, 从节点node-1和主节点node-3正常存活

kill -9 9235

此时再来查看进程运行情况
在这里插入图片描述
可以看到主节点node-2已经成功下线
再看下集群情况

sh ./bin/zkServer.sh status ./conf/zoo-1.cfg
sh ./bin/zkServer.sh status ./conf/zoo-2.cfg
sh ./bin/zkServer.sh status ./conf/zoo-3.cfg

在这里插入图片描述
此时,node-2下线后, node-1依旧是从节点, node-3由从节点变成主节点了
这是因为集群必须要有一个主节点, 当主节点下线之后,会在其他从节点当中重新选举出一个主节点来保证集群的正常运行

模拟场景3: 下线两个节点

前提要先把上一场景的node-2重新启起来,node-2会以从节点的身份重新加入到集群中
将节点node-1和node-3下线, 节点node-2正常存活

kill -9 9299
kill -9 9632

此时再来查看进程运行情况
在这里插入图片描述
此时就一个node-3节点进程在运行
再看下集群情况

sh ./bin/zkServer.sh status ./conf/zoo-1.cfg
sh ./bin/zkServer.sh status ./conf/zoo-2.cfg
sh ./bin/zkServer.sh status ./conf/zoo-3.cfg

在这里插入图片描述
可以看出集群已经停止运行,因为只有一个节点存活, 小于集群的最小存活节点数的规则
最小存活节点数 = (节点总数)/2 + 1
由此计算规则可知, 要想集群正常运行,必须要有两个节点存活才行
验证下: 之前是节点node-2存活, 重新启动节点node-1
在这里插入图片描述
重新启动节点node-1,发现集群又恢复正常了,原本节点node-2是从节点, 此时有两个节点,满足集群的最小节点数, 集群正常运行,并重新选举出一个主节点
注意: 如果之前下线的2个节点都是从节点, 主节点存活, 那么此时就不会重新选举

四. 总结

  • 集群必须要有一个主节点
  • 集群中,如果主节点下线, 会在剩下的从节点中重新选举一个主节点
  • 集群中,如果现有存活的节点数小于集群最小存活节点数时, 集群停止工作, 变成单机 ; 当有节点重新启用时, 满足集群最小存活节点数条件, 集群恢复正常
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖界的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值