多臺虛擬機搭建zookeeper集群

zookeeper集群搭建

kafka是把狀態保存在zookeeper中的,首先要搭建zookeeper集群。盡管kafka本身自帶了zookeeper,但最好不要使用自帶的zookeeper。參考這兩個教程: 教程一(三臺虛擬機),教程二(兩臺虛擬機)

1.軟件環境

我用了三臺虛擬機作為服務器,虛擬機裝的是CentOS7 64位:

  • 192.168.172.10
  • 192.168.172.11
  • 192.168.172.12
  1. Linux服務器。使用數量為一臺,三臺,五臺,(2*n+1)。zookeeper集群的工作是超過半數才能對外提供服務,三臺中超過兩臺超過半數,允許一臺掛掉。最好不要使用偶數臺。

    例如:如果有4臺,那么掛掉一臺還剩下三臺,如果再掛掉一臺就不能行了,因為是要超過半數。

  2. Java jdk1.8. 因為zookeeper是用Java寫的,所以他需要Java環境,CentOS 7默認安裝了jdk,所以此處不在安裝。

  3. zookeeper3.4.11版。

2.配置與安裝zookeeper。

下面的操作是三臺虛擬機都要做的,并且除了特別指出的,其他部分三臺虛擬機所做的配置操作是完全相同的

2.1安裝Java

CentOS7自帶jdk,此處無需安裝。

2.2下載zookeeper

首先要注意的是在生產環境中目錄結構要定義好,防止在項目過多的時候找不到所需的項目。 我把目錄統一放在/opt下面,該目錄一般存放主機額外安裝的軟件。

// 首先創建zookeeper項目目錄
mkdir zookeeper // 項目目錄
cd zookeeper // 進入項目目錄
mkdir zkdata // 存放快照日志
mkdir zkdatalog // 存放事物日志

從官網下載最新的穩定版zookeeper后,通過xshell的文件傳輸工具傳送到虛擬機中。我就放在了/opt/zookeeper項目文件下。

cd /opt/zookeeper // 進入下載目錄
tar -zxvf zookeeper-3.4.11.tar.gz // 解壓文件

2.3 修改配置文件

進入到解壓好的zookeeper的conf目錄中,查看:

//進入conf目錄
cd /opt/zookeeper/zookeeper-3.4.11/conf
//查看
-rw-rw-r--. 1 1000 1000 535 Feb 20 2014 configuration.xsl
-rw-rw-r--. 1 1000 1000 2161 Feb 20 2014 log4j.properties
-rw-rw-r--. 1 1000 1000 922 Feb 20 2014 zoo_sample.cfg

zoo_sample.cfg這個文件是官方給我們的zookeeper的樣板文件。我們需要復制一份名為zoo.cfg的文件,zoo.cfg是zookeeper官方指定的文件命名規則。我們以在第一臺虛擬機上的操作為例(上面的操作都是在第一臺虛擬機上,你需要在每臺虛擬機上都執行上述以及本次操作):

// 復制zoo.cfg文件
cp zoo_sample.cfg zoo.cfg
// 打開zoo.cfg文件,然后按后面的配置信息進行配置
vim zoo.zfg

在zoo.cfg配置文件需要填入的信息。

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/zkdata
dataLogDir=/opt/zookeeper/zkdatalog
clientPort=12181
// 此處的IP就是你所操作的三臺虛擬機的IP地址,每臺虛擬機的zoo.cfg中都需要填入這三個地址。第一個端口是master和slave之間的通信端口,默認是2888,第二個端口是leader選舉的端口,集群剛啟動的時候選舉或者leader掛掉之后進行新的選舉的端口默認是3888
server.1=192.168.172.10:12888:13888
server.2=192.168.172.11:12888:13888
server.3=192.168.172.12:12888:13888
// server.1 這個1是服務器的標識也可以是其他的數字, 表示這個是第幾號服務器,用來標識服務器,這個標識要寫到快照目錄下面myid文件里

創建myid文件。以現在所在的第一臺虛擬機192.168.172.10為例,對應server.1,通過上邊的配置信息可以查到。創建myid文件的目的是為了讓zookeeper知道自己在哪臺服務器上,例如現在所在的虛擬機是192.168.172.10,它對應的id是1,那么就在myid文件中寫入1.

echo "1" > /opt/zookeeper/zkdata/myid

另外兩臺虛擬機上也需要創建myid文件并寫入相應的id,id根據zoo.cfg文件中的IP地址查詢。

echo "2" > /opt/zookeeper/zkdata/myid
echo "3" > /opt/zookeeper/zkdata/myid

2.4 啟動zookeeper

進入到zookeeper的bin目錄下

cd /opt/zookeeper/zookeeper-3.4.11/bin/
// 啟動服務 (注意!三臺虛擬機都要進行該操作)
./zkServer.sh start
// 檢查服務器狀態
./zkServer.sh status
// 顯示如下
JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower #他是主節點leader還是從節點follower

3.重要配置說明(待補充)

  1. myid文件和server.myid 在快照目錄下存放的標識本臺服務器的文件,他是整個zk集群用來發現彼此的一個重要標識。
  2. zoo.cfg配置文件。zoo.cfg文件是zookeeper配置文件,在conf目錄里。

// tickTime:
這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
// initLimit:
這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗??偟臅r間長度就是 52000=10 秒
// syncLimit:
這個配置項標識 Leader 與Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是5
2000=10秒
// dataDir:
快照日志的存儲路徑
// dataLogDir:
事物日志的存儲路徑,如果不配置這個那么事物日志會默認存儲到dataDir制定的目錄,這樣會嚴重影響zk的性能,當zk吞吐量較大的時候,產生的事物日志、快照日志太多
// clientPort:
這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。修改他的端口改大點

4.遇到的錯誤

在搭建完成后,三個虛擬機都出現了錯誤。有兩個問題。

4.1 節點無法運行

在用./zkServer.sh start命令運行zookeeper后,zookeeper節點顯示正常啟動,但是用zkServer.sh status命令查看zookeeper節點的狀態時,發現并沒有正常運行,出現:

Error contacting service. It is probably not running.

我試著重新./zkServer.sh start,卻無法啟動,顯示:

already running as process 11854

對于這個問題,網上有很多答案,試了一遍:

  1. zoo.cfg配置文件中指定目錄卻沒有創建! 創建相應目錄即可。
    //我的目錄配置沒有問題
  2. zoo.cfg中dataDir指定路徑為Myid文件的路徑。Myid內容與:server.?=192.168.172.10:12888:13888 中所設置是否一致?
    //我的設置是一致的!
  3. 使用service iptables stop 關閉防火墻.
    //這個確實沒關,但用的命令不是service iptables stop,而是:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動

關閉后確實起作用了,但是第二天重新啟動時,剛開始運行還沒問題,到中午吃完飯回來就又出現了,所以應該不是防火墻的問題:

Error contacting service. It is probably not running.

  1. 打開zkServer.sh 找到

status)
STAT=echo stat | nc localhost $(grep clientPort "$ZOOCFG" | sed -e 's/.*=//') 2> /dev/null| grep Mode

nclocalhost之間加上 -q 1(是數字1而不是字母l).如果已存在則去掉。
// 但是我的zkServer.sh中沒有這一行。

  1. 12181端口被占用
    使用netstat -anp | grep 12181查看,確實發現有程序占用這個端口,但是kill掉以后還是不能啟動zookeeper。

于是我不再管虛擬機1,又依次開啟虛擬機2 和虛擬機3,其中虛擬機2和虛擬機1一樣,都是:

Error contacting service. It is probably not running.

但是神奇的事情發生了,我開啟虛擬機3的時候,是成功的,值得注意的是這里顯示的zookeeper狀態時leader:

[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: leader

也就是說虛擬機3所在的zookeeper節點是leader,然后再開啟虛擬機2和虛擬機1,就沒問題了。但是不知道為什么虛擬機3默認為leader,可能我之前在哪里配置過我不記得了(可能性不大),也可能跟zookeeper選舉leader的機制有關系,這個需要深入了解。

成功運行后,三臺虛擬機,一臺是leader,另外兩臺是follower。

4.2 每個節點都是standalone的

這個問題是由于zoo.cfg文件中的server寫錯了,寫成了servers。所以server寫錯可能導致zookeeper運行在單機模式下。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容