天天看点

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

目录

    • 一. 环境准备
      • 1. 配置JDK
      • 2. 配置Zookeeper
    • 二. Zookeeper 集群搭建
      • 1. 创建myid文件
      • 2. 配置集群节点信息
      • 3. 启动Zookeeper
      • 4. 查看各节点状态
    • 三. 验证集群是否正常运行
      • 模拟场景1: 下线一个从节点, 主节点和另一个从节点正常存活
      • 模拟场景2: 下线主节点,其他从节点正常存活
      • 模拟场景3: 下线两个节点
    • 四. 总结

在实际的生产环境中,集群是部署在不同机器上的, 本着简单明了的原则, 本次介绍的集群是搭建在同一台虚拟机器上,建立三个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配置成功

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

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后面的值就是对应myid文件中的值,

2881为组成zookeeper服务器之间的通信端

3881为用来选举leader的端口

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

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
           
《Zookeeper》第一篇 集群环境搭建

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
           
《Zookeeper》第一篇 集群环境搭建

从上述三个节点的状态看, 节点2成为了主节点, 节点1和节点3成为了从节点

至此, 简易的Zookeeper集群搭建完成

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

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

ps -ef | grep .cfg
           
《Zookeeper》第一篇 集群环境搭建

以下每个场景都是模拟一主二从, 现在node-1和node-3是从节点,node-2是主节点

下线节点使用下面命令,直接杀死进程

kill -9 进程号 
           

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

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

此时再来查看进程运行情况

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

可以看到从节点node-1已经成功下线

再看下集群情况

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

此时,node-1节点已经下线,不影响集群的正常运行且其他节点的身份也没变化, node-2依旧是主节点,node-3还是从节点

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

前提要先把上一场景的node-1重新启起来.node-1会以从节点的身份重新加入到集群中

将主节点node-2下线, 从节点node-1和主节点node-3正常存活

此时再来查看进程运行情况

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

可以看到主节点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
           
《Zookeeper》第一篇 集群环境搭建

此时,node-2下线后, node-1依旧是从节点, node-3由从节点变成主节点了

这是因为集群必须要有一个主节点, 当主节点下线之后,会在其他从节点当中重新选举出一个主节点来保证集群的正常运行

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

前提要先把上一场景的node-2重新启起来,node-2会以从节点的身份重新加入到集群中

将节点node-1和node-3下线, 节点node-2正常存活

kill -9 9299
kill -9 9632
           

此时再来查看进程运行情况

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

此时就一个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
           
《Zookeeper》第一篇 集群环境搭建

可以看出集群已经停止运行,因为只有一个节点存活, 小于集群的最小存活节点数的规则

最小存活节点数 = (节点总数)/2 + 1

由此计算规则可知, 要想集群正常运行,必须要有两个节点存活才行

验证下: 之前是节点node-2存活, 重新启动节点node-1

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

重新启动节点node-1,发现集群又恢复正常了,原本节点node-2是从节点, 此时有两个节点,满足集群的最小节点数, 集群正常运行,并重新选举出一个主节点

注意: 如果之前下线的2个节点都是从节点, 主节点存活, 那么此时就不会重新选举

四. 总结

  • 集群必须要有一个主节点
  • 集群中,如果主节点下线, 会在剩下的从节点中重新选举一个主节点
  • 集群中,如果现有存活的节点数小于集群最小存活节点数时, 集群停止工作, 变成单机 ; 当有节点重新启用时, 满足集群最小存活节点数条件, 集群恢复正常

继续阅读