經過前一篇文章《zookeeper偽集群一》的閱讀,相信大家對zookeeper集群已經有一定的瞭解了,接下來我們再談談zookeeper真集群。其實真集群和偽集群還是有很多相似的部分的,我將模擬3台集群服務並且對其中一臺集群服務的配置進行講解,接下來兩台操作基本一模一樣。 鋪墊: 1、 本人創建3 ...
經過前一篇文章《zookeeper偽集群一》的閱讀,相信大家對zookeeper集群已經有一定的瞭解了,接下來我們再談談zookeeper真集群。其實真集群和偽集群還是有很多相似的部分的,我將模擬3台集群服務並且對其中一臺集群服務的配置進行講解,接下來兩台操作基本一模一樣。
鋪墊:
1、 本人創建3台虛擬機,Linux版本為CentOS7,工具為vmware12
2、外部鏈接虛擬機的工具為小xmanager5,這個工具只是方便一些,你也可以不用
3、需要提前在虛擬機上裝好jdk1.7及以上版本,我使用的是1.8版本的,如果不會裝jdk,可以參照我的另一篇文章《Linux下的jdk安裝》
4、本人將3台虛擬機創建好,獲取到的外網地址分別為192.168.0.124,192.168.0.129,192.168.0.127,我分別取別名為CentOS1,CentOS3,CentOS4
5、接下來的說明中,如果有關聯關係的地方,我會加粗並且用相同顏色進行標註
搭建:
1、修改zookeeper下的zoo.cfg文件,具體內容如下:
tickTime=2000
syncLimit=10
initLimit=5
dataDir=/home/d5000/zk/data
clientPort=3001
dataLogDir=/home/d5000/zk/log
server.1 = 192.168.0.124:2887:3887
server.2 = 192.168.0.129:2887:3887
server.3 = 192.168.0.127:2887:3887
因為是集群,所以3台機器的埠號可以完全一致,可以共用一個zoo.cfg文件
2、在3台虛擬機上分別創建/home/d5000/zk目錄,並且在zk下創建data目錄,用於存放dataDir配置的映射文件;接下來將zookeeper也傳到zk目錄下,這一點與偽集群一致
3、在CentOS1機器的/home/d5000/zk/data下創建myid文件,內容是1;
在CentOS3機器的/home/d5000/zk/data下創建myid文件,內容是2;
在CentOS4機器的/home/d5000/zk/data下創建myid文件,內容是3;
4、分別給3台機器zookeeper許可權,否則如何啟動呢?可以先給zookeeper一個啟動許可權,進入/home/d5000/zk/zookeeper/bin,執行chmod 777 zkServer.sh
至此,集群創建完畢,真叫那個簡單呀,開開心心的進行測試,分別進行啟動, ./ zkServer.sh start ,第一臺報錯,第二台報錯,第三台還是報錯,而且錯誤信息一致,都是zookeeper no route to host,上網一查發現,有2個可能導致這個問題的出現,一個是防火牆,另一個是hostname。
排查問題:
1、分別查看3台機器防火牆是否關閉:firewall-cmd --state,發現防火牆確實沒有關閉,果斷執行關閉systemctl stop firewalld.service
2、修改CentOS1機器,執行hostname server.1 命令
修改CentOS3機器,執行hostname server.2 命令
修改CentOS4機器,執行hostname server.3 命令
3、重啟虛擬機,init 6 接下來重啟服務
4,結果還是報一樣的錯誤 zookeeper no route to host,瞬間懵逼
-----------------------------------------------------------------------以下都是心碎,省略一萬字-------------------------------------------------------------------------
經過多方努力,最終在掌握一定的虛擬機知識後才發現,systemctl stop firewalld.service關閉的防火牆是暫時的,只要服務一重啟防火牆立馬又生效,還有那個hostname也一樣:
最終修改
1、徹底禁用防火牆:systemctl disable firewalld.service
2、修改CentOS1機器/etc/hostname文件,內容為server.1
修改CentOS3機器/etc/hostname文件,內容為server.2
修改CentOS4機器/etc/hostname文件,內容為server.3(永久修改)
3、啟動第一臺、第二台發現還是有錯誤信息,但是現在的錯誤信息意見轉變為connect refuesd(拒絕鏈接),繼續啟動第三台伺服器,發現沒有報錯信息,而且測試後發現集群服務正常,第一 台報錯是因為第二第三台伺服器沒有啟動導致,第二台報錯是因為第三台集群服務沒啟動導致。這些錯誤完全不妨礙集群
下麵提供一下最簡單的測試,在192.168.0.124執行 telent 192.168.0.127 3001 telent 192.168.0.129 3001 如果都能鏈接成功,說明各自的服務已經能夠正常運行,並且可以進行通信,接下來可以通過代碼進行更加完善的測試。
效果如圖:
完畢