Zookeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务式环境中协调和管理服务是一个复杂的过程。Zookeeper通过简单的架构和API解决了这个问题。Zookeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
在分布式系统中,需要有zookeeper作为分布式协调组件,协调分布式系统中的状态。
zk在实现分布式锁上,可以做到强一致性(顺序一致性)。
下载地址:https://zookeeper.apache.org/releases.html
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
# zookeeper时间配置的基本单位
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
# zookeeper数据存储目录及日志保存(如果没有知名dataLogDir, 则日志也保存在这个文件中)
dataDir=/usr/local/zookeeper/zkdata
#dataLogDir=/usr/local/zookeeper/zkdata
# 对客户端提供的端口号
clientPort=2181
# 单位客户端与zookeeper最大并发连接数(处理更多客户端)
maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
# 自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除
autopurge.purgeInterval=1
conf
中zoo_sample.cfg
为 zoo.cfg
cp zoo_sample.cfg zoo.cfg
cd /usr/local/zookeeper/apache-zookeeper-3.7.1-bin
bin/zkServer.sh start conf/zoo.cfg
bin/zkServer.sh status
bin/zkServer.sh stop conf/zoo.cfg
Cli连接本地服务器
bin/zkCli.sh
Cli连接指定服务器
bin/zkCli.sh -server 192.168.56.21:2181
zk中数据是保存在节点上的,节点就是znode,多个znode支架构成一棵树的目录结构。
创建节点
create /test1
create /test1/sub1
ls /
ls /test1
创建节点test2
,并放入数据abc
create /test2 abc
获取数据
get /test2
data:保存数据
acl:权限(定义什么用户能操作此节点,并且进行怎样的操作)
stat:描述当前znode的元数据
child:当前节点的子节点
create /test5
create -s /test5
create -e /test5
临时节点维持心跳:
zk的数据是运行在内存中,zk提供了2中持久化机制:
zk通过两种的时间间隔内做一次内存数据的快照,把该时刻的内存数据保存在快照文件中。
1、创建持久节点
create /test5
2、创建持久序号
节点(并发很严重时)
create -s /test5
3、创建临时节点
create -e /test5
4、创建临时序号节点
create -e -s /test6
5、Container节点(3.5.3版本新增)
# 创建容器节点
create -c /mycontainer
# 创建子节点
create /mycontainer/sub1
create /mycontainer/sub2
# 删除子节点
delete /mycontainer/sub1
delete /mycontainer/sub2
6、TTL节点
zookeeper.extendTypesEnabled=true
get -s /test2
delete /test1
deleteall /test1
按照数据版本号删除(乐观锁删除)
delete -v 版本 /节点
delete -v 1 /test2
addauth digest charles:123456
create /test-node abc auth:charles:123456:cdwra
其他会话读取,权限不足提醒
官网:https://curator.apache.org/
Curator是Netflix公司开源的一套zookeeper客户端框架,Curator是对Zookeeper支持最好的客户端框架。Curator封装了大部分Zookeeper的功能,比如Leader选举、分布式锁等,减少了技术人员在使用Zookeeper时的底层细节开发的工作。
引入依赖
https://www.bilibili.com/video/BV1Ph411n7Ep?p=14
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
org.apache.curator</groupId>
curator-framework</artifactId>
5.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
org.apache.curator</groupId>
curator-recipes</artifactId>
5.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
org.apache.zookeeper</groupId>
zookeeper</artifactId>
3.7.1</version>
</dependency>
1、在/usr/local/zookeeper
中创建zk1~zk4,然后 新建 myid
文件
echo 1 > ./zk1/myid
echo 2 > ./zk2/myid
echo 3 > ./zk3/myid
echo 4 > ./zk4/myid
2、编写zoo.cfg文件
伪分布式(4个)
# The number of milliseconds of each tick(zookeeper时间配置的基本单位)
tickTime=2000
# The number of ticks that the initial
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
# 修改为对应的zk1、zk2、zk3、zk4
dataDir=/usr/local/zookeeper/zkdata/zk1
# 对客户端提供的端口号
clientPort=2181
# 2001为集群通信端口,3001为集群选举端口,observer表示不参数集群选举
server.1=192.168.56.20:2001:3001
server.2=192.168.56.20:2002:3002
server.3=192.168.56.20:2003:2003
# server.4=192.168.56.23=2004:2004:observer
3、启动3台Zookeeper
./bin/zkServer.sh start ./conf/zoo1.cfg
./bin/zkServer.sh start ./conf/zoo2.cfg
./bin/zkServer.sh start ./conf/zoo3.cfg
1、创建数据存放目录
mkdir -p /usr/local/zookeeper/zkdata
2、修改 zoo.cfg
cp zoo_sample.cfg zoo.cfg
# The number of milliseconds of each tick
tickTime=10000
# The number of ticks that the initial
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
# zookeeper数据存储目录及日志保存(如果没有知名dataLogDir, 则日志也保存在这个文件中)
dataDir=/usr/local/zookeeper/zkdata
#dataLogDir=/usr/local/zookeeper/zkdata
# 客户端默认端口 2181
clientPort=2181
# 单位客户端与zookeeper最大并发连接数(处理更多客户端)
maxClientCnxns=60
# 自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除
autopurge.purgeInterval=1
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
server.1=192.168.56.20:2888:3888
server.2=192.168.56.21:2888:3888
server.3=192.168.56.22:2888:3888
# server.4=192.168.56.23=:2888:3888:observer
3、将zookeeper目录发送到其他节点
scp -r /usr/local/zookeeper/ 192.168.56.21:/usr/local
scp -r /usr/local/zookeeper/ 192.168.56.22:/usr/local
4、分别修改三台机器 myid
echo 1 > /usr/local/zookeeper/zkdata/myid
echo 2 > /usr/local/zookeeper/zkdata/myid
echo 3 > /usr/local/zookeeper/zkdata/myid
5、编写操作 zookeeper 集群的脚本
cd /usr/local/zookeeper/bin
vim zk.sh
# 添加如下内容
#!/bin/bash
case $1 in
"start"){
for i in master slave1 slave2
do
echo ---------- $i zookeeper 启动 ----------
ssh $i "/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/zkServer.sh start"
done
}
;;
"stop"){
for i in master slave1 slave2
do
echo ---------- $i zookeeper 停止 ----------
ssh $i "/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/zkServer.sh stop"
done
}
;;
"status"){
for i in master slave1 slave2
do
echo ---------- $i zookeeper 状态 ----------
ssh $i "/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/zkServer.sh status"
done
}
;;
esac
# 保存退出后,修改zk.sh脚本执行权限
chmod +x ./zk.sh
脚本说明:
# 启动集群命令
./zk.sh start
# 停止集群命令
./zk.sh stop
# 查看集群状态命令
./zk.sh status
6、启动集群
/usr/local/zookeeper/bin/zk.sh start
或
cd /usr/local/zookeeper/apache-zookeeper-3.7.1-bin
./bin/zkServer.sh start ./conf/zoo.cfg
工具连接
bin/zkCli.sh
参考地址:
https://www.bilibili.com/video/BV1Ph411n7Ep
https://blog.csdn.net/u011109589/article/details/124907414