配置zookeeper集群,一開始配置了兩台機器server.1和server.2。
配置參數,在zoo.cfg中指定了整個zookeeper集群的server編號、地址和端口:
server.1=10.10.16.151:2888:3888
server.2=10.10.16.234:2888:3888
然后為這兩個個節點創建對應的編號文件,在/tmp/zookeeper/data/myid
文件中。如下:
在server.1=10.10.16.151機器上執行:
echo 1 > /tmp/zookeeper/data/myid
在server.1=10.10.16.234機器上執行:
echo 2 > /tmp/zookeeper/data/myid
啟動server.1測試dubbo服務,使用zkServer.sh start啟動了server.1,然后使用zkServer.sh status查看工作狀態,顯示
Error contacting service. It is probably not running.
通過zkCli.sh -server 10.10.16.151:2181
查看服務詳細,發現服務提示了下面的錯誤信息。
啟動時提示:
2017-09-15 14:57:27,139 [myid:] - INFO [main-SendThread(10.10.16.151:2181):ClientCnxn$SendThread@1035] - Opening socket connection to server 10.10.16.151/10.10.16.151:2181. Will not attempt to authenticate using SASL (java.lang.SecurityException: Ϟ·¨¶¨λµȂ¼Ƥ׃)
2017-09-15 14:57:27,140 [myid:] - INFO [main-SendThread(10.10.16.151:2181):ClientCnxn$SendThread@877] - Socket connection established to 10.10.16.151/10.10.16.151:2181, initiating session
2017-09-15 14:57:27,143 [myid:] - INFO [main-SendThread(10.10.16.151:2181):ClientCnxn$SendThread@1161] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
后來才搞明白,由於我在zoo.cfg中配置了2台機器,但是只啟動了1台,zookeeper就會認為服務處於不可用狀態。
通過zookeeper的選舉算法得知,當整個集群超過半數機器宕機,zookeeper會認為集群處於不可用狀態。所以啟動2台服務正常。
然后我又增加了1台server.3=10.10.16.241:2888:3888機器節點,在3台都啟動的情況下,關掉其中1台,服務正常,關掉2台,服務不可用。
所以,zookeeper集群只啟動一台無法連接,如果啟動機器數為半數及以上就可以連接了。