zookeeper 性能問題分析
1、服務啟動時,zookeeper 信息
Initiating client connection, connectString=zk-svc:2181 sessionTimeout=60000 watcher=org.apache.curator.ConnectionState@508f2f3b
這里的sessionTimeout 是客戶端連接zookeeper 服務端的時候,客戶端設置 timeout 為 60000
默認是30000
2 建立連接后的協商超時時間 negotiated timeout = 40000
2019-07-26 10:13:58,976 INFO (ClientCnxn.java:1299)- Session establishment complete on server zk-2.zk-svc.incloud.svc.cluster.local/10.233.88.154:2181, sessionid = 0x36c1354aabf0345, negotiated timeout = 40000
這個數出處是 /opt/zookeeper/conf/zoo.cfg 中的 maxSessionTimeout = 40000
zookeeper 默認 ticketTime 是3000,如果沒有設置session最大最小時間的話,默認 session最大超時時間為 tickTime 的20倍
icm的zookeeper 容器中設置了心跳時間和session的最大最小值
則 negotiated timeout = 40000
3 zookeeper 日志中大量的ruok
2019-07-25 09:29:11,837 [myid:1] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@883] - Processing ruok command from /127.0.0.1:40006
2019-07-25 09:29:11,837 [myid:1] - INFO [Thread-70950:NIOServerCnxn@1044] - Closed socket connection for client
ruok 這個命令是 測試服務是否處於正確狀態。如果確實如此,那么服務返回 imok ,否則不做任何響應。
斷開連接是因為沒有客戶端連接這個端口,檢測不到sessonId,就會關閉
*正常的客戶端連接服務端的時候,會自動注冊sessionId
4、驗證 server端強制關閉,再次啟動的情況
client情況如下,自動重連
服務端情況
服務端中的 sessionId 保持不變