问题现象
X微服务应用无法连接到zookeeper,日志一直报错,提示无法连接到zookeeper。
定界定位
1、先通过CM(Cloudera Manager)监控界面,确认zookeeper进程正常;
2、登录zookeeper集群任一服务器,查看zookeeper日志;
日志路径:/var/log/zookeeper
查看日志发现日志中,有“Too many connections from /10.19.146.121”大量报错,如下:
3、 登录服务器,通过如下命令查看占用zookeeper连接的进程;
netstat -anlp | grep 2181
4、找到占用连接最多的进程PID,通过如下命令确认是哪个服务进程,然后分析其连接zookeeper代码,找到问题原因。
ps -ef| grep pid
参考知识
Zookeeper配置参数-maxClientCnxns
这个配置参数将限制连接到ZooKeeper的客户端的数量,限制并发连接的数量,它通过IP来区分不同的客户端。此配置选项可以用来阻止某些类别的Dos***。该参数默认是60,将它设置为0将会取消对并发连接的限制。
ZooKeeper关于maxClientCnxns参数的官方解释:
单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制。
maxClientCnxns
Limits the number of concurrent connections (at the socket level)that a single client, identified by IP address, may make to a single member ofthe ZooKeeper ensemble. This is used to prevent certain classes of DoS attacks,including file descriptor exhaustion. The default is 60. Setting this to 0entirely removes the limit on concurrent connections.