搭建Zookeeper服务


文章目录

  • 一. 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
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

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命令行使用】

    推荐阅读