zookeeper安装与使用

概述

zookeeper致力于开发和维护开源服务器,以实现高度可靠的分布式协调。

ZooKeeper是一个集中式服务,用于维护配置信息、命名、提供分布式同步、提供组服务。所有这些类型的服务都以某种形式由分布式应用程序使用。每次实施它们时,都需要进行大量工作来修复不可避免的错误和竞争条件。由于实现此类服务很困难,应用程序最初通常会忽略它们,这使得它们在发生变化时变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会导致部署应用程序时的管理复杂性。

单机安装

下载:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1-bin.tar.gz

这里使用的3.9.1版本。

1
2
3
4
5
6
7
8
tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz

## 创建数据目录
mkdir /var/lib/zookeeper

cd /usr/local/apache-zookeeper-3.9.1-bin/conf
## 根据例子配置文件创建配置文件
cp zoo_sample.cfg zoo.cfg
1
2
3
4
5
vim zoo.cfg

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
  • tickTime:ZooKeeper 使用的基本时间单位(以毫秒为单位)。它用于进行心跳,最小会话超时将是tickTime 的两倍。
  • dataDir:存储内存数据库快照的位置,除非另有指定,否则存储数据库更新的事务日志。
  • clientPort: 监听客户端连接的端口
1
2
3
4
## 启动
bin/zkServer.sh start
## 停止
bin/zkServer.sh stop
1
2
3
4
## 连接验证
bin/zkCli.sh -server 127.0.0.1:2181
## 进入后获取帮助
help
1
2
3
4
5
6
7
8
9
ls /
# 创建一个新的 znode 并将字符串“my_data”与该节点相关联。
create /zk_test my_data
ls /
get /zk_test
# 修改zk_test 关联的内容
set /zk_test junk
# 删除zk_test 节点
delete /zk_test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ls -s /

[zk_test, zookeeper]
cZxid = 0x0
ctime = Wed Dec 31 19:00:00 EST 1969
mZxid = 0x0
mtime = Wed Dec 31 19:00:00 EST 1969
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
1
2
3
4
5
6
7
8
9
10
11
cZxid = #创建节点时zk内部自己分配的id
Ctime = #创建节点的时间
mZxid = #修改的id
mtime = 修改的时间
pZxid = 子节点最后一次被修改的id
cVersion = 0 #拥有的子节点被改的话,该值随着改变
dataVersion = 0 #数据版本
aclVersion = 0 # 访问控制权限的版本
ephemeralOwner = 0X0 #临时节点还是持久节点 临时节点值不为0(值为当前会话id),持久节点值永远为0
dataLength = 3 #数据长度
numChildren = 0 #子节点个数
1
2
3
4
5
6
7
8
create [-s] [-e] path data acl
zk的节点分为两种:临时节点(随着zk session消亡而自动删除)、持久节点(一直存在)

-s: 顺序节点

-e: 临时节点

acl:访问权限控制

集群安装

准备三台机器:192.168.158.139、192.168.158.140、192.168.158.141

1
2
3
4
# 创建ID文件
vim /var/lib/zookeeper/myid
# 不同机器不同ID
1
1
2
3
4
5
6
7
8
9
10
vim zoo.cfg

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=10
syncLimit=5
server.1=192.168.158.139:2888:3888
server.2=192.168.158.140:2888:3888
server.3=192.168.158.141:2888:3888

initLimit : ZooKeeper 用于限制仲裁中的 ZooKeeper 服务器必须连接到领导者的时间长度的超时值。值 * tickTime

syncLimit:同步超时程序。值 * tickTime

server.A=B:C:D。

参数 描述
A 一个数字,表示第几号服务器。集群模式下配置的数据目录下/myid文件里面的数据就是A的值
B 服务器的IP地址/或域名(可以本地配置文件配置)
C 与集群中Leader服务器交换信息的端口
D 选举时专用端口,万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口

打开相应的端口。

1
2
# 启动3台服务器
./zkServer.sh start
1
2
# 查看集群状态
./zkServer.sh status

注意

必须是奇数台,因为必须满足n/2+1=m,m必须大于部署zk机器数的一半(n/2)可用才认为集群可用,而且奇数台更节省资源。

2/2+1=2 一台不能坏
3/2+1=2 可以坏掉一台

4/2+1=3 只能坏一台
5/2+1=3 可以坏2台


zookeeper安装与使用
http://hanqichuan.com/2023/12/22/zookeeper/zookeeper安装与使用/
作者
韩启川
发布于
2023年12月22日
许可协议