一. Zookeeper要点
- zookeeper开放源码的
分布式协调服务框架
; - zookeeper功能包括:
配置维护
、域名服务
、分布式锁
、组服务
等; - zookeeper由java开发,需要有
Jdk 1.6
以上的运行环境支持; - zookeeper集群一般需要一、三、五等
奇数台服务器
(2*n+1
台); - zookeeper核心功能有:
文件系统
和通知机制
;
二. 安装Java环境
Zookeeper是用Java开发的,所以需要JDK的支持,这里安装JRE即可,JRE安装参考。
$ java -version
三. ZK单机部署
3.1 下载安装ZK
参考 Zookeeper官网地址
# 下载解压
$ wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz --no-check-certificate
$ tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
$ mv apache-zookeeper-3.7.0-bin /usr/local/zookeeper
#删除讨厌的windows的执行文件
$ rm -f /usr/local/zookeeper/bin/*.cmd
3.2 配置环境变量
$ vim /etc/profile
#*********************ZK环境变量******************
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
#*************************************************
$ source /etc/profile #刷新配置
3.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
admin.serverPort=8180 #默认是8080
3.4 启动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单机伪集群
4.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 |
4.2 创建配置文件
./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
4.3 创建服务器编号
# 与配置文件中「Server.编号」保持一致
$ echo "1">./zk2181/myid
$ echo "2">./zk2182/myid
$ echo "3">./zk2183/myid
4.4 启动集群
$ zkServer.sh --config $ZOOKEEPER_HOME/zk2181 start
$ zkServer.sh --config $ZOOKEEPER_HOME/zk2182 start
$ zkServer.sh --config $ZOOKEEPER_HOME/zk2183 start
4.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
4.6 测试故障转移
杀掉leader进程,再次查看集群状态
$ ps -ef |grep zookeeper|grep 2182
$ kill -9 3977
...
# 再次查看集群状态,主从关系已转移
五. ZK客户端命令
5.1 登录ZK
$ zkCli #登录本地
$ zkCli.sh -server localhost:2182 #登录远程
5.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
5.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
5.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
5.6 查看AdminServer
http://x.x.x.x:8180/commands
参考链接
https://www.kancloud.cn/liupengjie/go/745743 【golang-Zookeeper命令行使用】