ZooKeeper

环境部署

官方文档

https://zookeeper.apache.org/doc/r3.4.14/index.html

下载地址

https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/

安装目录

/opt/bigdata/zookeeper

部署规划

node0单节点;

node1 node2 node3 配置为zookeeper集群。

StandaloneMode

单节点模式

https://zookeeper.apache.org/doc/r3.4.14/zookeeperStarted.html#sc_InstallingSingleMode

下载

使用xftp上传安装包或者通过wget等工具在线下载。

1
2
3
[zhangsan@node0 ~]$ cd /opt/bigdata/zookeeper/
# 此处使用wget在线下载
[zhangsan@node0 zookeeper]$ wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

解压

1
2
3
4
5
6
7
8
9
10
11
12
[zhangsan@node0 bigdata]$ cd zookeeper/
[zhangsan@node0 zookeeper]$ ll
total 36796
-rw-rw-r--. 1 zhangsan zhangsan 37676320 Mar 1 22:09 zookeeper-3.4.14.tar.gz
[zhangsan@node0 zookeeper]$ tar -zxf zookeeper-3.4.14.tar.gz

# 创建软连接(可选)
# 目的是,如果我在目录/opt/bigdata/zookeeper/下安装多个版本的zookeeper,我的环境变量文件无需修改,只需要修改default软连接的指向,让其指向我想使用的版本。
[zhangsan@node0 zookeeper]$ ln -s zookeeper-3.4.14 default
[zhangsan@node0 zookeeper]$ ll
total 36800
lrwxrwxrwx. 1 zhangsan zhangsan 16 Mar 1 22:17 default -> zookeeper-3.4.14

配置

zoo.cfg
1
2
3
4
5
6
7
8
# 在 ZOOKEEPER_HOME 目录下创建个data文件夹
[zhangsan@node0 default]$ mkdir data

[zhangsan@node0 zookeeper]$ cd zookeeper-3.4.13/conf/
[zhangsan@node0 conf]$ cp zoo_sample.cfg zoo.cfg
[zhangsan@node0 conf]$ vim zoo.cfg
# 修改配置项
dataDir=/opt/bigdata/zookeeper/default/data
环境变量

配置环境变量文件~/.bashrc

1
2
export ZOOKEEPER_HOME=/opt/bigdata/zookeeper/default/
export PATH=$ZOOKEEPER_HOME/bin:$PATH

记得source一下,让环境变量生效。

1
[zhangsan@node0 ~]$ source .bashrc 

启动

1
2
3
4
5
6
7
8
9
[zhangsan@node0 ~]$ zkServer.sh start
[zhangsan@node0 ~]$ jps
4064 Jps
4027 QuorumPeerMain

[zhangsan@node0 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: standalone

停止

1
[zhangsan@node0 ~]$ zkServer.sh stop

基础操作

  • 连接
1
2
3
[zhangsan@node0 zookeeper-3.4.13]$ clear
[zhangsan@node0 zookeeper-3.4.13]$ bin/zkCli.sh -server 127.0.0.1:2181
Welcome to ZooKeeper!
  • 创建

  • 是否存在

  • 删除

  • 获取

  • 设置

  • 退出

副本模式

副本模式

https://zookeeper.apache.org/doc/r3.4.14/zookeeperStarted.html#sc_RunningReplicatedZooKeeper

服务器node1 服务器node2 服务器node3
Zookeeper Zookeeper Zookeeper Zookeeper

配置

在第一个节点上配置ZooKeeper配置文件zoo.cfg和环境变量文件~/.bash_profile

zoo.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[zhangsan@node1 conf]$ cat zoo.cfg 
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

dataDir=/opt/bigdata/zookeeper/default/data

# 对客户端提供服务端口
clientPort=2181

# server.x=nodename:节点通信端口:选举端口
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

使用scp命令分发配置文件到其他节点。

在每个节点的/opt/bigdata/zookeeper/default/data的目录下创建一个myid文件,内容为server.x中的x

环境变量

环境变量文件~/.bash_profile与单节点配置相同。配置完成后,将环境变量文件~/.bashrc,分发到其他节点。分发完成后,记得source一下,让其生效。

集群启动

启动方式同单节点,需要在每个节点启动zkServer.sh start。查看启动状态:

node1
1
2
3
4
[zhangsan@node1 conf]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/bigdata/zookeeper/default/bin/../conf/zoo.cfg
Mode: follower
node2
1
2
3
4
[zhangsan@node2 default]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/bigdata/zookeeper/default/bin/../conf/zoo.cfg
Mode: leader
node3
1
2
3
4
[zhangsan@node3 default]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/bigdata/zookeeper/default/bin/../conf/zoo.cfg
Mode: follower

可以看到node2被选举为leader

ZK集群启动停止脚本

/home/zhangsan/bin/zk.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash

case $1 in
"start"){
for i in node1 node2 node3
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "zkServer.sh start"
done
};;
"stop"){
for i in node1 node2 node3
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "zkServer.sh stop"
done
};;
"status"){
for i in node1 node2 node3
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "zkServer.sh status"
done
};;
esac

记得为脚本增加可执行权限。

zkfc

Zookeeper Failover Controller,简称zkfc,是故障切换

假如 一个HBase集群中,一个·Active状态的HMaster,两个backup状态的HMaster,如果,活跃状态的Master挂了(也就是zookeeper上的/hbase/master这个临时节点没了),两个Backup状态的Master会收到通知,他们俩竞选老大。

啥是竞选?

就是谁成功在zookeeper上创建/hbase/master这个节点,谁就是老大;

image-20220612212948219

ZK通知

在客户端1设置watch,监控 /test 节点变化

1
2
[zk: localhost:2181(CONNECTED) 14] get -w /test
data2

在客户端2为 /test设置一个新的值

1
[zk: localhost:2181(CONNECTED) 2] set /test data3

你切换到客户端1,可以看到客户端1收到了节点数据改变的通知:

1
2
3
4
[zk: localhost:2181(CONNECTED) 15]
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/test

再次为 /test设置值,客户端1不会收到通知。

zookeeper详解

https://blog.csdn.net/weixin_38612401/article/details/125216821

ZooKeeper个数

10台服务器: 3台

20台服务器: 5台

100台服务器:11台