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