文章目录
- 一. Zookeeper要点
- 二. 安装Java环境
- 三. ZK单机部署
- 四. ZK单机伪集群
- 五. ZK客户端命令
一. Zookeeper要点
- zookeeper开放源码的
分布式协调服务框架
; - zookeeper功能包括:
配置维护
、域名服务
、分布式锁
、组服务
等; - zookeeper由java开发,需要有
Jdk 1.6
以上的运行环境支持; - zookeeper集群一般需要一、三、五等
奇数台服务器
(2*n+1
台); - zookeeper核心功能有:
文件系统
和通知机制
;
二. 安装Java环境 Zookeeper是用Java开发的,所以需要JDK的支持,这里安装JRE即可,JRE安装参考。
$ java -version
三. ZK单机部署 1. 下载安装ZK , 参考 Zookeeper官网地址
# 下载解压
$ curl -Ohttp://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.6/apache-zookeeper-3.5.6-bin.tar.gz
$ tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz# 安装到目标目录
$ mv apache-zookeeper-3.5.6-bin /usr/local/zookeeper#删除windows的文件
$ rm -f /usr/local/zookeeper/bin/*.cmd
2. 配置环境变量
$ vim /etc/profile
#*********************ZK环境变量******************
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
#*************************************************$ source /etc/profile #刷新配置
3. 修改配置文件
$ cd $ZOOKEEPER_HOME
$ cat ./conf/zoo_sample.cfg|grep -v "#"|grep -v "^$" >./conf/zoo.cfg
# 配置文件示例:conf/zoo.cfg
tickTime=2000#心跳间隔(ms),即2秒
initLimit=10#初始化超过10个心跳则视为失败
syncLimit=5#同步最大心跳间隔(超过5个则断开连接)
dataDir=/tmp/zookeeper
clientPort=2181
5.管理ZK服务
# 启动
$ zkServer.sh start# 查看状态
$ zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone#单机模式$ zkServer.sh restart #重启
$ zkServer.sh sop#停止
四. ZK单机伪集群 1. 创建集群工作目录
$ cd $ZOOKEEPER_HOME
$ mkdir zk2181 zk2182 zk2183
服务标识 | IP地址 | zookeeper | myid |
---|---|---|---|
zookeeper-1 | 127.0.0.1:2181 | server.1 | 1 |
zookeeper-2 | 127.0.0.1:2182 | server.2 | 2 |
zookeeper-3 | 127.0.0.1:2183 | server.3 | 3 |
./zk2181/zoo.cfg
# 服务端口号
clientPort=2181# 客户端每两秒钟发送一次心跳
tickTime=2000#初始化超过10个心跳则视为失败
initLimit=10#同步最大心跳间隔(超过5个则断开连接)
syncLimit=5# 数据目录
dataDir=/usr/local/zookeeper/zk2181# 日志目录
dataLogDir=/usr/local/zookeeper/zk2181# 集群配置
# server.A=B:C:D
# A:其中A是一个数字,表示这个是服务器的编号;
# B:是这个服务器的ip地址;
# C:Leader选举的端口;
# D:Zookeeper服务器之间的通信端口。
server.1=localhost:2101:3101
server.2=localhost:2102:3102
server.3=localhost:2103:3103
- 以
./zk2181/zoo.cfg
为模板,复制./zk2182/zoo.cfg
、./zk2183/zoo.cfg
两个配置文件
$ sed "s/2181/2182/g" ./zk2181/zoo.cfg >./zk2182/zoo.cfg
$ sed "s/2181/2183/g" ./zk2181/zoo.cfg >./zk2183/zoo.cfg
3. 创建服务器编号 与配置文件中
Server.编号
保持一致$ echo "1">./zk2181/myid
$ echo "2">./zk2182/myid
$ echo "3">./zk2183/myid
4. 启动集群
$ zkServer.sh --config $ZOOKEEPER_HOME/zk2181 start
$ zkServer.sh --config $ZOOKEEPER_HOME/zk2182 start
$ zkServer.sh --config $ZOOKEEPER_HOME/zk2183 start
5. 查看集群状态,可以看到
Mode: leader
(主节点),Mode: follower
(从节点)。$ zkServer.sh --config /usr/local/zookeeper/zk2181 status
$ zkServer.sh --config /usr/local/zookeeper/zk2182 status
$ zkServer.sh --config /usr/local/zookeeper/zk2183 status
6. 测试故障转移, 杀掉leader进程,再次查看集群状态
$ ps -ef |grep zookeeper|grep 2182
$ kill -9 3977
...
# 再次查看集群状态,主从关系已转移
五. ZK客户端命令 1. 登录ZK
$ zkCli#登录本地
$ zkCli.sh -server localhost:2182#登录远程
2. 查看API命令,输入
"help"
(不存在的命令),会打印API帮助命令ZooKeeper -server host:port cmd args
addauth scheme auth
close
config [-c] [-w] [-s]
connect host:port
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
delete [-v version] path
deleteall path
delquota [-n|-b] path
get [-s] [-w] path
getAcl [-s] path
history
listquota path
ls [-s] [-w] [-R] path
ls2 path [watch]
printwatches on|off
quit
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;
port3[,...]*]] | [-add serverId=host:port1:port2;
port3[,...]]* [-remove serverId[,...]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
rmr path
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b val path
stat [-w] path
sync path
3. 操作示例
# 创建节点(临时节点/序列节点)
$ create /test "hello world"# 创建顺序节点 自动累加(全局)
$ create-s /test/code# 查看节点
$ get /test# 修改节点
$ set /test "hello zookeeper"# 删除节点
$ delete /test# 查看目录
# ls /test# 目录统计
$ ls -s /test# 递归删除(多级目录)
$ deleteall /test# zk中 watcher是一次性的,触发后立即销毁
# - stat [-w] path 设置watch事件
# - get [-w] path 设置watch事件
# 监控节点(在新建的cli端修改节点信息)
$ stat -w /test watch
$ get -w /test watch
4. 四字命令
- ZooKeeper 支持某些特定的四字命令(The Four Letter Words)与其进行交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。
四字命令 | 功能描述 |
---|---|
conf | 3.3.0版本引入的。打印出服务相关配置的详细信息。 |
cons | 3.3.0版本引入的。列出所有连接到这台服务器的客户端全部连接/会话详细信息。包括"接受/发送"的包数量、会话id、操作延迟、最后的操作执行等等信息。 |
crst | 3.3.0版本引入的。重置所有连接的连接和会话统计信息。 |
dump | 列出那些比较重要的会话和临时节点。这个命令只能在leader节点上有用。 |
envi | 打印出服务环境的详细信息。 |
reqs | 列出未经处理的请求 |
ruok | 测试服务是否处于正确状态。如果确实如此,那么服务返回"imok",否则不做任何相应。 |
stat | 输出关于性能和连接的客户端的列表。 |
srst | 重置服务器的统计。 |
srvr | 3.3.0版本引入的。列出连接服务器的详细信息 |
wchs | 3.3.0版本引入的。列出服务器watch的详细信息。 |
wchc | 3.3.0版本引入的。通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表。 |
wchp | 3.3.0版本引入的。通过路径列出服务器watch的详细信息。它输出一个与session相关的路径。 |
mntr | 3.4.0版本引入的。输出可用于检测集群健康状态的变量列表 |
# 查看状态信息
$ echo stat | nc 127.0.0.1 2181#查看服务器配置
$ echo conf | nc 192.168.0.68 2181
【搭建Zookeeper服务】参考:
https://www.cnblogs.com/raphael5200/p/5285583.html
https://blog.csdn.net/dandandeshangni/article/details/80558383
https://www.kancloud.cn/liupengjie/go/745743 【golang-Zookeeper命令行使用】
推荐阅读
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- docker|Docker
- #|7.分布式事务管理
- python|PyTorch单机多卡分布式训练教程及代码示例
- 分布式 | 动态调整 DBLE 内线程池的数目