单机部署zookeeper集群

一、集群部署

1、环境

系统 CentOS 7.6
jdk jdk1.8.0_162
zookeeper zookeeper-3.6.2

2、zookeeper集群规划

zookeeper节点 客户端连接端口 交换信息端口 选举通信端口
2181 2181 2661 3661
2182 2182 2662 3662
2183 2183 2663 3663

3、环境准备

  1. 创建目录
powershell 复制代码
cd /data/test
mkdir -p 2181/zkdata
mkdir -p 2181/zklogs
mkdir -p 2182/zkdata
mkdir -p 2182/zklogs
mkdir -p 2183/zkdata
mkdir -p 2183/zklogs
  1. 解压安装包
powershell 复制代码
tar -zxvf zookeeper-3.6.2.tar.gz -C 2181/
tar -zxvf zookeeper-3.6.2.tar.gz -C 2182/
tar -zxvf zookeeper-3.6.2.tar.gz -C 2183/
  1. 修改配置文件
    vi 2181/zookeeper-3.6.2/conf/zoo.cfg
powershell 复制代码
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/test/2181/zkdata
dataLogDir=/data/test/2181/zklogs
clientPort=2181
maxClientCnxns=300
server.1=192.168.192.128:2661:3661
server.2=192.168.192.128:2662:3662
server.3=192.168.192.128:2663:3663

其他两节点注意修改 dataDir、dataLogDir、clientPort 为对应的值

  1. 配置服务器编号
powershell 复制代码
echo 1 > 2181/zkdata/myid
echo 2 > 2182/zkdata/myid
echo 3 > 2183/zkdata/myid

4、操作 zookeeper

① 启动各个节点

powershell 复制代码
./2181/zookeeper-3.6.2/bin/zkServer.sh --config /data/test/2181/zookeeper-3.6.2/conf start
./2182/zookeeper-3.6.2/bin/zkServer.sh --config /data/test/2182/zookeeper-3.6.2/conf start
./2183/zookeeper-3.6.2/bin/zkServer.sh --config /data/test/2183/zookeeper-3.6.2/conf start

或

./2181/zookeeper-3.6.2/bin/zkServer.sh start
./2182/zookeeper-3.6.2/bin/zkServer.sh start
./2183/zookeeper-3.6.2/bin/zkServer.sh start

②查看进程是否启动

powershell 复制代码
jps

③查看状态

powershell 复制代码
./2181/zookeeper-3.6.2/bin/zkServer.sh --config /data/test/2181/zookeeper-3.6.2/conf status
./2182/zookeeper-3.6.2/bin/zkServer.sh --config /data/test/2182/zookeeper-3.6.2/conf status
./2183/zookeeper-3.6.2/bin/zkServer.sh --config /data/test/2183/zookeeper-3.6.2/conf status

④连接 zookeeper

powershell 复制代码
./2183/zookeeper-3.6.2/bin/zkCli.sh -server 192.168.192.128:2181

⑤退出客户端

powershell 复制代码
[zk: 192.168.192.128:2181(CONNECTED) 0] quit

⑥停止 zookeeper

powershell 复制代码
./2181/zookeeper-3.6.2/bin/zkServer.sh --config /data/test/2181/zookeeper-3.6.2/conf stop
./2182/zookeeper-3.6.2/bin/zkServer.sh --config /data/test/2182/zookeeper-3.6.2/conf stop
./2183/zookeeper-3.6.2/bin/zkServer.sh --config /data/test/2183/zookeeper-3.6.2/conf stop

二、常用命令

三、知识

1、配置文件详解

配置项 默认值 配置描述
tickTime 2000 通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
initLimit 10 Leader 和 Follower 初始连接时能容忍的最多心跳数(tickTime的数量)
syncLimit 5 Leader 和 Follower 之间通信时间如果超过 syncLimit * tickTime ,Leader 认为 Follwer 死掉,从服务器列表中删除 Follwer
dataDir /tmp/zookeeper 保存 zookeeper 中的数据
dataLogDir 默认指定在dataDir目录下 zookeeper事务日志的存储路径
clientPort 2181 客户端连接端口,zookeeper 会监听这个端口,接受客户端的访问请求
server.A=B:C:D server.序号=IP:内部同步端口:选举端口
powershell 复制代码
server.A=B:C:D
A:是一个数字,表示这个是第几号服务器;集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。
B:是这个服务器的地址。
C:是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口。
D:是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

2、选举机制

假设ZooKeeper由5台服务器组成

powershell 复制代码
SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。

ZXID:事务ID。ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端"更新请求"的处理逻辑有关。

Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加
  1. 首次启动
powershell 复制代码
①服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为 LOOKING

②服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持 LOOKING

③服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为 FOLLOWING,服务器3更改状态为 LEADING

④服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING

⑤服务器5启动,同4一样更改状态为FOLLOWING
  1. 非首次启动

①当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举

• 服务器初始化启动。

• 服务器运行期间无法和Leader保持连接。

②当一台机器进入Leader选举流程时,当前集群也可能会处于以下两种状态:

• 集群中存在Leader。

对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。

• 集群中不存在Leader。

ZooKeeper由5台服务器 SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。某一时刻3和5服务器出现故障,因此开始进行Leader选举。

SID EPOCH ZXID SID
SID1 1 8 1
SID2 1 8 2
SID4 1 7 4

选举Leader规则:
①EPOCH大的直接胜出
②EPOCH相同,事务id大的胜出
③事务id相同,服务器id大的胜出

相关推荐
寒士obj3 天前
分布式组件【ZooKeeper】
微服务·zookeeper
笨蛋少年派3 天前
zookeeper简介
分布式·zookeeper·云原生
007php0076 天前
百度面试题解析:Zookeeper、ArrayList、生产者消费者模型及多线程(二)
java·分布式·zookeeper·云原生·职场和发展·eureka·java-zookeeper
坐吃山猪7 天前
zk02-知识演进
运维·zookeeper·debian
yumgpkpm8 天前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
小醉你真好8 天前
16、Docker Compose 安装Kafka(含Zookeeper)
docker·zookeeper·kafka
yumgpkpm9 天前
CMP (类ClouderaCDP7.3(404次编译) )华为鲲鹏Aarch64(ARM)信创环境多个mysql数据库汇聚的操作指南
大数据·hive·hadoop·zookeeper·big data·cloudera
yumgpkpm12 天前
大数据综合管理平台(CMP)(类Cloudera CDP7.3)有哪些核心功能?
hive·hadoop·elasticsearch·zookeeper·big data
回家路上绕了弯15 天前
深入 Zookeeper 数据模型:树形 ZNode 结构的设计与实践
后端·zookeeper
90919322115 天前
SQL关键词标签在数据分析中的应用与实践
zookeeper