CentOS6.5搭建ZooKeeper集羣與單機

服務器需要的系統環境

1.本文內容是在Linux(CentOS6.5)下搭建zookeeper集羣,若想了解在windows下如何搭建zookeeper集羣,可以移步到我的另一片文章zookeeper+kafka集羣

2.ZooKeeper使用java語言編寫,因此它的運行環境需要java環境的支持,本文中每個centos都安裝了JDK1.8.

ZooKeeper下載

zookeeper的官方下載地址是:http://www.apache.org/dyn/closer.cgi/zookeeper/

本文在CentOS6.5下使用的zookeeper是3.4.8版本,我上傳到了csdn上,歡迎下載zookeeper-3.4.8.tar.gz.

集羣與單機

ZooKeeper有兩種運行模式,一種是集羣模式,另外一種是單機模式.

1.集羣模式

我這邊使用虛擬機配合克隆功能,準備了三臺可以相互聯網的centos6.5的linux服務器.分別是:

ip1:192.168.199.100

ip2:192.168.199.101

ip3:192.168.199.102

這三臺服務器上都是安裝好了jdk1.8的環境,接下來是在這三臺服務器上分別安裝ZooKeeper服務器,這裏就只演示在ip1中的安裝操作,在ip2和ip3的機子上安裝操作同理.

在/usr/local下新建zookeeper目錄,並且將zookeeper.3.4.8.tar.gz在此解壓,並且修改zoo.cfg文件:

[#root] cd /usr/local

[#root] mkdir zookeeper

[#root] cd /root

[#root] cp zookeeper3.4.5.tar.gz /usr/local/zookeeper

[#root] cd /usr/local/zookeeper

[#root] tar xzvf zookeeper3.4.5.tar.gz

[#root] rm zookeeper3.4.5.tar.gz

[#root] cd zookeeper3.4.5

[#root] cd conf

[#root] mv zoo_sample.cfg zoo.cfg



對於zoo.cfg文件配置,這裏只做一個簡單即可,默認的zoo.cfg文件內容如下:


/var 包含系統一般運行時要改變的數據。通常這些數據所在的目錄的大小是要經常變化或擴充的。

/var/lib : 存放系統正常運行時要改變的文件。 

對zoo.cfg文件做如下修改:


在集羣模式下,集羣中每臺機器都需要感知到整個集羣是由哪幾臺機器組成的,在配置文件中,可以按照以下格式進行配置,每一行代表一個機器配置:

server.id=host:port:port

id被稱爲ServerID,用來標識該機器在集羣走過的機器序號,在每臺ZooKeeper機器上,需要再dataDir參數指定的那個目錄下創建一個myid文件,該文件只有一行內容,對應於每臺機器的ServerID.例如,server.1的myid文件內容就是"1".

接下來,在dataDir指定的路徑下新建myid文件,並且填入server對應的id:

[#root] touch myid

[#root]  vi myid

因爲server.1對應的是192.168.199.100這臺機子,所以在100這臺機子的myid文件填入1即可

按照相同步驟,爲101和102配置上zoo.cfg和myid文件.


啓動集羣,

依次進入每一個zookeeper機器的bin目錄下執行:(如果你配置好了環境變量,那麼可以直接使用zkServer.sh命令,不然的話需要在當前目錄下才能執行)

./zkServer.sh start

執行結果如下:


驗證服務器,啓動完成之後,可以使用telnet命令來測試:

安裝好zookeeper集羣之後想進入連接測試,telnet localhost 2181發現竟然提示沒有telnet這個命令,於是需要自己進行安裝。
一、查看本機是否安裝telnet
#rpm -qa | grep telnet
如果什麼都不顯示。說明你沒有安裝telnet
二、開始安裝
yum install xinetd
yum install telnet
yum install telnet-server
三、裝好telnet服務之後,默認是不開啓服務的,下面我們需要修改文件來開啓服務。
vim /etc/xinetd.d/telnet 修改 disable = yes 爲 disable = no
四、需要激活xinetd服務
# service xinetd restart 或者 #/etc/rc.d/init.d/xinetd restart
我在使用中第一次有提示錯誤,第二次運行就沒事了。


發現This ZooKeeper instance is not currently serving requests Connetction closed by foregin host錯誤,報這個異常的原因就是集羣沒有選出來leader,當集羣裏的結點只剩下一臺,或者不足半數時,就會出現這個錯誤提示。 

可是爲什麼沒有選出來leader呢,目測應該是端口沒有開放,查了一下最終是因爲網絡不通,那就防火牆開放端口2181,2888以及3888三個端口.

vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport  2181 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT
保存後重啓linux的防火牆服務,命令如下:
/etc/init.d/iptables restart
或者service iptables restart


先停止zooKeeper服務器先:


然後再重啓啓動,這裏指出一個有可能會發現錯誤的地方,就是啓動的時候會包Permssion denied錯誤


這種錯誤是因爲權限不夠才發生的錯誤,如果執行此操作的用戶應該具有啓動的權限,那麼使用chomd爲其添加寫權限即可,我這裏直接換成root用戶進行操作;

su root

才執行啓動的命令: ./zkServer..sh start


注意查看到Mode屬性指示的是follower,(集羣模式除此之外也有可能是leader,standalone)


2.單機

在上面的集羣模式下,已經完成了一個ZooKeeper集羣的搭建.

其實,單機模式只是一個特殊的集羣模式而已--只有一臺機器的集羣. 將ip2和ip3這兩臺zookeeper機器移除之後,只剩下ip1一臺zookeeper組成的集羣,這就叫做單機模式

單機模式啓動之後,其Mode屬性的值就是standalone.


3.僞集羣模式

如果手上有且只有一臺比較好的機器,那麼這個時候.如果作爲單機模式來進行部署,資源明顯有點浪費,那麼這時候就可以使用僞集羣.

僞集羣,就是集羣所有的機器都是在一臺機器上,但是還是以集羣的特性來對外提供服務,比如zoo.cfg文件可做如下設置:

server1.=192.168.199.100:2888:3888

server.2=192.168.199.100:2889:3889

server.3=192.168.199.100:2890:3890

分別對應每一個zookeeper程序(一臺機器上裝了三臺zookeeper)

這種模式下集羣搭建可以參考我的另一文章zookeeper+kafka集羣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章