Zookeeper-集群部署
1、部署方案
1.1、集群分类
对于Zookeeper的集群来说,有两种情况:生产集群和伪集群。
生产集群: 使用多个独立的主机,每个主机上都部署同样环境的Zookeeper环境,基于内部的Zab协议达到数据的一致性,然后统一对外提供服务。客户端连接任意一节点,效果都一样。伪集群:
对于Zookeeper集群来说,主机节点可以分布在不同的主机上,也可以部署在同一台主机上,只需要各个Zookeeper服务之间使用不同的通信接口即可,因为不是真正意义上的"集群",所以称为"伪集群"。
伪集群本质上还是集群,只不过是部署在了一台主机,其他功能完全一样。
我们接下来的操作就是在一台主机上部署三个Zookeeper服务,形成一个伪集群。
1.2、集群规划
1.2.1、说明
对于伪集群来说,就不能像生产部署方式一致了,因为使用同一个ip,同一个端口会造成冲突,所以我们要对整个单一节点的Zookeeper伪集群进行相应的规划
1.2.2、主机列表
主机节点 主机ip 通信端口 心跳端口 选举端口 服务目录 myid zk1 192.168.10.27 2181 2182 2183 /data/server/zk1/{data,logs} 1 zk2 192.168.10.27 2281 2282 2283 /data/server/zk2/{data,logs} 2 zk3 192.168.10.27 2381 2382 2383 /data/server/zk3/{data,logs} 3
1.3、准备工作
对于Zookeeper集群来说,本质上是部署了一个单独的Zookeeper服务,所以准备环境跟单机部署Zookeeper完全一致。
操作内容参考 快速入门 部分的环境配置
单机版的安装,参考文章:https://www.cnblogs.com/ygbh/p/17442905.html
2、环境部署
2.1、软件安装
我们是三节点的Zookeeper集群,所以我们在安装软件的时候,分别在三个不同的Zookeeper目录中执行软件安装 安装三个节点 cd /data/softs/ tar xf apache-zookeeper-3.7.1-bin.tar.gz cp -r apache-zookeeper-3.7.1-bin /data/server/zk1 cp -r apache-zookeeper-3.7.1-bin /data/server/zk2 cp -r apache-zookeeper-3.7.1-bin /data/server/zk3 mkdir /data/server/zk{1,2,3}/{data,logs} -p 注意: 三个节点执行同样的操作,唯一的区别是数字不一致,分别是1-2-3 具体安装参考文章:https://www.cnblogs.com/ygbh/p/17442905.html 这里因为已经有软件包,直接复制即可 # ls /data/server/zk* /data/server/zk1: LICENSE.txt NOTICE.txt README.md README_packaging.md bin conf data docs lib logs /data/server/zk2: LICENSE.txt NOTICE.txt README.md README_packaging.md bin conf data docs lib logs /data/server/zk3: LICENSE.txt NOTICE.txt README.md README_packaging.md bin conf data docs lib logs
2.2、配置管理
2.2.1、zk1的配置
mv /data/server/zk1/conf/zoo_sample.cfg /data/server/zk1/conf/zoo.cfg # zoo.cfg的配置 # grep -ni '^[a-Z]' /data/server/zk1/conf/zoo.cfg 2:tickTime=2000 5:initLimit=10 8:syncLimit=5 12:dataDir=/data/server/zk1/data 13:dataLogDir=/data/server/zk1/logs 15:clientPort=2181 16:server.1=192.168.10.27:2182:2183 17:server.2=192.168.10.27:2282:2283 18:server.3=192.168.10.27:2382:2383 #属性解析:2*82:心跳包 -- 2*83:选举端口 # 设置myid文件 echo 1 >/data/server/zk1/data/myid
2.2.2、zk2的配置
mv /data/server/zk2/conf/zoo_sample.cfg /data/server/zk2/conf/zoo.cfg # zoo.cfg的配置 # grep -ni '^[a-Z]' /data/server/zk2/conf/zoo.cfg 2:tickTime=2000 5:initLimit=10 8:syncLimit=5 12:dataDir=/data/server/zk2/data 13:dataLogDir=/data/server/zk2/logs 15:clientPort=2281 16:server.1=192.168.10.27:2182:2183 17:server.2=192.168.10.27:2282:2283 18:server.3=192.168.10.27:2382:2383 #属性解析:2*82:心跳包 -- 2*83:选举端口 # 设置myid文件 echo 2 >/data/server/zk2/data/myid
2.2.2、zk3的配置
mv /data/server/zk3/conf/zoo_sample.cfg /data/server/zk3/conf/zoo.cfg # zoo.cfg的配置 # grep -ni '^[a-Z]' /data/server/zk3/conf/zoo.cfg 2:tickTime=2000 5:initLimit=10 8:syncLimit=5 12:dataDir=/data/server/zk3/data 13:dataLogDir=/data/server/zk3/logs 15:clientPort=2381 16:server.1=192.168.10.27:2182:2183 17:server.2=192.168.10.27:2282:2283 18:server.3=192.168.10.27:2382:2383 #属性解析:2*82:心跳包 -- 2*83:选举端口 # 设置myid文件 echo 3 >/data/server/zk3/data/myid
2.3、启动zk1、zk2、zk3服务
# 可以写成脚本,一键启动 /data/server/zk1/bin/zkServer.sh start /data/server/zk2/bin/zkServer.sh start /data/server/zk3/bin/zkServer.sh start
2.4、服务检查
2.4.1、检查端口
# ss -tunlp | grep 2*81 tcp LISTEN 0 50 *:2181 *:* users:(("java",pid=1333,fd=60)) tcp LISTEN 0 50 *:2281 *:* users:(("java",pid=4484,fd=55)) tcp LISTEN 0 50 *:2381 *:* users:(("java",pid=4535,fd=55))
2.4.2、查看集群服务状态
# /data/server/zk1/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /data/server/zk1/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Client SSL: false. Mode: follower
# /data/server/zk2/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /data/server/zk2/bin/../conf/zoo.cfg Client port found: 2281. Client address: localhost. Client SSL: false. Mode: follower
# /data/server/zk3/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /data/server/zk3/bin/../conf/zoo.cfg Client port found: 2381. Client address: localhost. Client SSL: false. Mode: leader
# 查看集群状态,关键就是看Mode:的值,我们可以看到,目前Zookeeper三节点集群中,处于leader的是zk3节点,其他两个节点是follower角色。
2.4.3、同时连接多个server的方法
语法: bin/zkCli -server <zk1_ip>:<zk1_port>,<zk2_ip>:<zk2_port>,<zk3_ip>:<zk3_port> # 注意:同时连接多个server节点的时候,彼此间使用逗号隔开 示例: # 使用任意一个zkCli.sh连接三个Zookeeper节点 # /data/server/zk1/bin/zkCli.sh -server 192.168.10.27:2181,192.168.10.27:2281,192.168.10.27:2381 [zk: 192.168.10.27:2181,192.168.10.27:2281,192.168.10.27:2381(CONNECTING) 0]
2.5、nc专用检测工具使用
2.5.1、简介
因为使用telnet方法来检查集群的节点状态信息比较繁琐,而且经常中断,所以生产中我们一般使用nc软件来检查Zookeeper集群状态
nc全称NetCat,在网络工具中有“瑞士军刀”美誉,支持Windows和Linux。因为它短小精悍(不过25k)、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。
2.5.2、软件包安装
apt-get -y install netcat-traditional
2.5.3、zk允许白名单所有【zk1、zk2、zk3都要配置】
# 方法1 # vi /data/server/zk1/bin/zkServer.sh ... start) ZOOMAIN="-Dzookeeper.4lw.commands.whitelist=* ${ZOOMAIN}" ... # 方法2【推荐】 # 向 zoo.cfg 文件中添加如下配置 4lw.commands.whitelist=*
2.5.4、使用示例
语法: echo "命令" | nc <server_ip> <server_port> # 检查集群状态 echo stat | nc 127.0.0.1 2181 echo stat | nc 127.0.0.1 2281 echo stat | nc 127.0.0.1 2381