問題現(xiàn)象
X微服務(wù)應(yīng)用無法連接到zookeeper,日志一直報錯奖唯,提示無法連接到zookeeper。
定界定位
1辟灰、先通過CM(Cloudera Manager)監(jiān)控界面,確認(rèn)zookeeper進程正常篡石;
2芥喇、登錄zookeeper集群任一服務(wù)器,查看zookeeper日志凰萨;
日志路徑:/var/log/zookeeper
查看日志發(fā)現(xiàn)日志中继控,有“Too many connections from /10.19.146.121”大量報錯,如下:
3沟蔑、 登錄服務(wù)器湿诊,通過如下命令查看占用zookeeper連接的進程狱杰;
netstat -anlp | grep 2181
4瘦材、找到占用連接最多的進程PID,通過如下命令確認(rèn)是哪個服務(wù)進程仿畸,然后分析其連接zookeeper代碼食棕,找到問題原因朗和。
ps -ef| grep pid
參考知識
Zookeeper配置參數(shù)-maxClientCnxns
這個配置參數(shù)將限制連接到ZooKeeper的客戶端的數(shù)量,限制并發(fā)連接的數(shù)量簿晓,它通過IP來區(qū)分不同的客戶端眶拉。此配置選項可以用來阻止某些類別的Dos***。該參數(shù)默認(rèn)是60憔儿,將它設(shè)置為0將會取消對并發(fā)連接的限制忆植。
ZooKeeper關(guān)于maxClientCnxns參數(shù)的官方解釋:
單個客戶端與單臺服務(wù)器之間的連接數(shù)的限制,是ip級別的谒臼,默認(rèn)是60朝刊,如果設(shè)置為0,那么表明不作任何限制蜈缤。請注意這個限制的使用范圍拾氓,僅僅是單臺客戶端機器與單臺ZK服務(wù)器之間的連接數(shù)限制,不是針對指定客戶端IP底哥,也不是ZK集群的連接數(shù)限制咙鞍,也不是單臺ZK對所有客戶端的連接數(shù)限制。
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.