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

 

posted @ 2023-05-31 11:39  小粉优化大师  阅读(116)  评论(0编辑  收藏  举报