-
Notifications
You must be signed in to change notification settings - Fork 14
ZooKeeper base
下面的例子演示了如何使用基本的配置安装 Zookeeper,安装目录为 /usr/local/zookeeper, 数据目录为 /var/lib/zookeeper.
# tar -zxvf zookeeper-3.4.6.tar.gz
# mv zookeeper-3.4.6 /usr/local/zookeeper
# mkdir -p /var/lib/zookeeper
# cat > /usr/local/zookeeper/conf/zoo.cfg << EOF
> tickTime=2000
> dataDir=/var/lib/zookeeper
> clientPort=2181
> EOF
# export JAVA_HOME=/usr/java/jdkl.8.0_51
# /usr/local/zookeeper/bin/zkServer.sh start
#
现在可以连到 Zookeeper 端口上,通过发送四字命令 srvr 来验证 Zookeeper 是否安装正确.
# telnet localhost 2181
srvr
Zookeeper 集群被称为群组。Zookeeper 使用的是一致性协议,所以建议每个群组里应该包含奇数个节点(比如 3 个、5 个等),因为只有当群组里的大多数节点(也就是越定人数)处于可用状态,Zookeeper 才能处理外部的请求。也就是说,如果你有一个包含3个节点的群组,那么它允许一个节点失效。如果群组包含5个节点,那么它允许2个节点失效。
群组需要有一些公共配置,上面列出了所有服务器的清单,并且每个服务器还要在数据目录中创建一个 myid
文件,用 于指明自己的 ID。如果群组里服务器的机器名是 zoo1.example.com、zoo2.example.com、zoo3.example.com ,那么配置文件可能是这样的:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=20
syncLimit=5
server.l=zoo1.example.com:2888:3888
server.2=zoo2.example.com:2888:3888
server.3=zoo3.example.com:2888:3888
在这个配置中,initLimit 表示用于在从节点与主节点之间建立初始化连接的时间上限,syncLimit 表示允许从节点与主节点处于不同步状态的时间上限。这两个值都是 tickTime 的倍数,所以 initLimit 是 20*2000ms,也就是40s。配置里还列出了群组中所有服务器的地址。服务器地址遵循 server.X=hostname:peePort:leaderPort
格式,各个参数说明如下:
- X - 服务器的 ID,它必须是一个整数,不过不一定要从 0 开始,也不要求是连续的
- hostname - 服务器的机器名或IP地址
- peePort - 用于节点间通信的 TCP 端口
- leaderPort - 用于首领选举的 TCP 端口
客户端只需要通过 clientPort 就能连接到群组,而群组节点间的通信则需要同时用到这 3 个端口(clientPort、peePort、leaderPort)
除了公共的配置文件外,每个服务器都必须在 dataDir 目录中创建一个叫作 myid 的文件,文件里要包含服务器 ID,这个 ID 要与配置文件里配置的 ID 保持一致。完成这些步骤后,就可以启动服务器,让它们彼此间进行通信了。
Notes:
- 群组节点个数的选择 -- 假设有一个包含 5 个节点的群组,如果要对群组做包括更换节点在内的配置更改,需要依次重启每一个节点。如果你的群组无战容忍多个节点失效,那么在进行群组维护时就会存在风险。不过,也不建议一个群组包含超过 7 个节点,因为Zookeeper 使用了一致性协议,节点过多会降低整个群组的性能。
连接 Zookeeper 服务器
cd /usr/local/zookeeper/bin/
sh zkCli.sh -server ip:port
创建
create [-s] [-e] path data acl
-s 顺序节点
-e 临时节点
不添加 -s 或者 -e 表示创建持久节点
acl 权限控制
示例:
create /zk-book 123
读取
# 列出指点节点下的所有子节点
ls path [watch]
# 获取指点节点的数据内容和属性信息
get path [watch]
更新
set path data [version]
删除
delete path [version]
-
Awesome huzhi
-
Python
-
Linux
-
MySQL
-
Component
-
分布式
-
PHP
-
go
-
Android 逆向
-
机器学习
-
计算机基础
-
JavaScript
-
Internet Awesome
-
Other
-
Book