ZK 使用记录

1. 连接 ZK server

① 可以通过官方提供的 zkInspector 来连接。
② 可以通过官网下载的 zookeeper-xx.tar.gz 包中的 zkCli.cmd 来连接 (对界面没有要求的话,这种方式还是不错的)

zkCli.cmd -timeout 5000 -r -server xxip:2181

不加参数,默认连接的是 localhost:2181

 windows 下脚本连接: zkClient.cmd

set /p addr=输入zk连接串...
G:\zookeeper-3.4.13\bin\zkCli.cmd -timeout 50000 -r -server %addr%

 

2. 查看 zk Server 的状态信息(Master or Slave)

sh zkServer.sh status

 

3. 查看有 zk 服务器上有多少连接

netstat -ano|grep 2181
// 查看当前 server 有多少客户端连接
netstat -na | grep 2181 | wc -l

查看 zk 服务器上某个 ip 当前有多少个连接:

netstat -ano|grep 2181|grep 10.2x.xx.xx

windows 本机查看连接 zk 的情况:

netstat -ano|findstr 2181

 

4. 创建临时顺序结点命令

查看所有命令:help

# 在 /tmp 节点下创建一个以 0 开头的临时顺序结点:/tmp/0000000000
>create -s -e /tmp/0

https://www.cnblogs.com/sherrykid/p/5813148.html

 

5. 使用 zk 做选举

两种选举方案对比:
采用临时节点:
/selection/leader
优点:逻辑简单,谁能创建 /selection/leader 节点,谁就是 leader
缺点:1. 当 /leader 节点被删除后,有可能通知消息丢失
如果是 leader 没有收到消息,其他节点有收到,则集群中会产生两个 leader
2. 当非 leader 节点与 zk 的连接断开后,集群中的其他节点是无感知的

采用临时顺序节点:
/selection/0000000001
优点:1. 集群中的每个实例都会拿到一个选举号,不管哪个实例连接断开,其他节点都可感知
2. 如果 leader 的选举节点被删除后的消息丢失,我们可以使用定时检测选举节点是否在存在的方式(比如:1 min 检测一下 /selection/000000000x)是否存在,如果不存在,说明有消息丢失,则重新进行选举,从而及时修正集群中的 Leader 状态

 有待阅读 Curator 框架里面本身实现选举 API,看有什么值得借鉴的地方

 

6. 查看远程 zk 服务器的配置信息ZK 的四字命令

linux:

# nc 向端口发送数据
echo conf | nc 10.2x.3x.xx 2181

windows 或者 linux:

telnet 10.2x.3x.xx 2181
> conf

 

7. maxClientCnxns
控制单个 ip 与 zk 服务器连接的数量。该参数默认是60,即一台机器与一台 zk 服务器最多建立 60 个连接。
这个配置参数将限制连接到ZooKeeper的客户端的数量,限制并发连接的数量,它通过IP来区分不同的客户端。此配置选项可以用来阻止某些类别的Dos攻击。该参数默认是60,将它设置为0将会取消对并发连接的限制。

 

8. 日志自动清理:

#ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能。
autopurge.purgeInterval=1
#这个参数指定了需要保留的文件数目。默认是保留3个
autopurge.snapRetainCount=30

 

9. 连接不稳定,频繁超时,发现了如下日志:
2020-11-30 14:37:36,780 [myid:1] - WARN  [SyncThread:1:FileTxnLog@338] - fsync-ing the write ahead log in SyncThread:1 took 1462ms which will adversely effect operation latency. See the ZooKeeper troubleshooting guide
同时还伴随着:CancelledKeyException  

zk 负荷大时,日志同步时间过长,server 端长时间未响应,导致客户端 session 超时

为避免此问题官方建议:dataLogDir存放目录应该与dataDir分开,可单独采用一套存储设备来存放ZK日志。(好像并没用)

https://www.jianshu.com/p/73eec030db86
https://blog.csdn.net/xjping0794/article/details/77784171

 

https://blog.csdn.net/luckykapok918/article/details/71633818
zookeeper原生API注册Watcher需要反复注册,即Watcher触发之后就需要重新进行注册。另外,客户端断开之后重新连接到服务器也是需要一段时间。这就导致了zookeeper客户端不能够接收全部的 zookeeper 事件。zookeeper保证的是数据的最终一致性。因此,对于此问题需要特别注意,不要对zookeeper事件进行强依赖

posted on 2020-04-27 17:08  快鸟  阅读(1031)  评论(0编辑  收藏  举报