zk客户端会产生两种类型的watcher
- new Zookeeper()构造zk客户端对象时注册的watcher:不是一次性的,只当连接状态变化时被触发
- zkclient.exists(),监控锁节点方法注册的watcher:一次性,当监控节点增(create)、删(delete)、改(set)时被触发
3类线程
- 主线程:在启动所有服务后开始循环等待
- HealthMonitor线程:定期检查NN服务状态和健康状况
- zk客户端线程:监控zookeeper上结点的状态,发生变化时,回调ZKFailoverController的回调函数,通知ZKFailoverController,做出相应的变化
3个proxy
-
ZKFC对本节点NN健康检查
超时时间:“ha.health-monitor.rpc-timeout.ms” 默认45s
最大重试次数:“ipc.client.connect.max.retries”,在代码中被set为1,即失败后会重连一次
重连间隔:“ipc.client.connect.retry.interval” 默认1s,在我们集群中设置为10s。
和NN RPC通信地址:根据"dfs.namenode.lifeline.rpc-address.nsId.nnId"。如果没有指定该配置项,则和2、3的地址相同。
-
ZKFC对另一个节点的NN fence
超时时间:“ha.failover-controller.graceful-fence.rpc-timeout.ms” 默认5s
最大重试次数:“ipc.client.connect.max.retries” 在代码中被set为1,即失败后会重连一次
重连间隔:“ipc.client.connect.retry.interval” 默认1s,在我们集群中设置为10s。
和NN RPC通信地址:先根据"dfs.namenode.servicerpc-address.nsId.nnId",没有再根据"dfs.namenode.rpc-address.nsId.nnId",若这些配置项中没有指定端口,则默认端口为8020。在我们的配置中已指定端口为9000。
-
ZKFC对本节点的NN转换状态(becomeActive/Standby)
超时时间:“ha.failover-controller.new-active.rpc-timeout.ms” 默认60s
最大重试次数:“ipc.client.connect.max.retries” 在代码中被set为1,即失败后会重连一次
重连间隔:“ipc.client.connect.retry.interval” 默认1s,在我们集群中设置为10s。
和NN RPC通信地址:先根据"dfs.namenode.servicerpc-address.nsId.nnId",没有再根据"dfs.namenode.rpc-address.nsId.nnId",若这些配置项中没有指定端口,则默认端口为8020。在我们的配置中已指定端口为9000。