搭建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 -O  http://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

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

你可能感兴趣的:(分布式)