ZooKeeper限制客户端连接数

问题:

最近发现ZooKeeper服务器上的连接数过多,都是连接zookeeper的。


解决方案:

通过查询分析,发现zookeeper的一个客户端使用有问题,创建的连接过多导致的。

zookeeper有没有相应的功能能做下限制呢?

查看zookeeper的配置参数,可以发现zookeeper的可以通过相应的配置来限制某ip的连接数。


maxClientCnxns

这个配置参数将限制连接到ZooKeeper的客户端的数量,限制并发连接的数量,它通过IP来区分不同的客户端。此配置选项可以用来阻止某些类别的Dos攻击。该参数默认是60,将它设置为0将会取消对并发连接的限制。

例如,将maxClientCnxns的值设置为1,如下所示:

#set maxClientCnxns

maxClientCnxns=1

启动ZooKeeper之后,首先用一个客户端连接到ZooKeeper服务器之上。然后,当第二个客户端尝试对ZooKeeper进行连接,或者某些隐式的对客户端的连接操作,将会触发ZooKeeper的上述配置。系统会提示相关信息,如下图1所示:ZooKeeper客户端连接数过多_ZooKeeper客户端连接数过多


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 of the ZooKeeper ensemble. This is used to prevent certain classes of DoS attacks, including file descriptor exhaustion. The default is 60. Setting this to 0 entirely removes the limit on concurrent connections.