zookeeper單機-集群安裝詳解

本篇講述zookeeper單機及集群部署相种,筆者覺得還是比較詳細(xì)掖疮,希望能幫助到急需補充該方面知識的朋友,如發(fā)現(xiàn)有問題請及時指出

導(dǎo)讀

ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù)考润,是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件读处。它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件伏尼,提供的功能包括:配置維護片拍、域名服務(wù)、分布式同步、組服務(wù)等吱韭。
ZooKeeper的基本運轉(zhuǎn)流程:
1愈捅、選舉Leader拯刁。
2谍咆、同步數(shù)據(jù)。
3包个、選舉Leader過程中算法有很多刷允,但要達(dá)到的選舉標(biāo)準(zhǔn)是一致的。
4、Leader要具有最高的執(zhí)行ID树灶,類似root權(quán)限纤怒。
5、集群中大多數(shù)的機器得到響應(yīng)并follow選出的Leader天通。
目前阿里開源的dubbo分布式服務(wù)框架推薦的注冊中心泊窘。
其更詳細(xì)原理可以參考:http://cailin.iteye.com/blog/2014486/

安裝

接下來我們進入zookeeper的安裝環(huán)節(jié),zookeeper的安裝總的來說比較簡單土砂,這里我準(zhǔn)備了3臺linux虛擬機州既,模擬集群環(huán)境谜洽,有條件的同學(xué)可以自己裝3臺(最少)萝映,其實集群和單機的區(qū)別不是太大,但是集群時節(jié)點數(shù)量一定是奇數(shù)(2n+1如3,5,7)阐虚,可參考選舉機制(FastLeaderElection算法)序臂。

工具: CentOS.7,zookeeper-3.4.6实束,Xshell5

注:zookeeper本身由java編寫奥秆,運行在java環(huán)境,故同學(xué)們必須先裝好java環(huán)境咸灿,才可以繼續(xù)zookeeper的安裝构订,這里我對java環(huán)境不做講解

虛擬機

單機模式

服務(wù)器CentOS7_64_1的ip:192.168.2.101

安裝包下載

首先使用grid用戶登錄CentOS7_64_1,將zookeeper-3.4.6的安裝包下載傳至/home/grid目錄下
http下載路徑: http://apache.fayea.com/zookeeper/
linux命令下載:$ wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz


解壓安裝包

輸入tar -zxvf zookeeper-3.4.6.tar.gz將其解壓避矢,如下:


解壓縮包

創(chuàng)建data和logs目錄

解壓后進入zookeeper-3.4.6目錄悼瘾,創(chuàng)建data目錄和logs目錄,zookeeper默認(rèn)是不帶這兩個目錄的审胸,需要用戶自行創(chuàng)建并指定亥宿。

[grid@h1 zookeeper-3.4.6]$ mkdir data
[grid@h1 zookeeper-3.4.6]$ mkdir logs

創(chuàng)建myid文件

在/home/grid/zookeeper-3.4.6/data下創(chuàng)建myid文件
編輯myid文件,并在對應(yīng)的IP的機器上輸入對應(yīng)的編號砂沛。如在第一臺zookeeper上烫扼,我們給該myid文件內(nèi)容指定就是1。如果只在單點上進行安裝配置碍庵,那么只有一個server映企,后面講集群的時候會有多臺服務(wù)器時就會有2,3,4,5...等等。

[grid@h1 data]$ vi myid
1

復(fù)制修改配置文件

接著進入zookeeper-3.4.6/conf目錄下静浴,將zoo_sample.cfg文件復(fù)制一份取名zoo.cfg

[grid@h1 conf]\$ cp zoo_sample.cfg zoo.cfg

注:之所以取名zoo.cfg是因為這是啟動時默認(rèn)約定讀取的

參數(shù)設(shè)置

server.1=h1:2888:3888的解釋如下:
1是指一個數(shù)字堰氓,與前面創(chuàng)建的myid對應(yīng)即可,標(biāo)志這是第幾臺機器马绝,h1是我配置的映射名豆赏,大家可以直接將h1改為自己的ip,如

server.1=192.168.2.101:2888:3888;

Hosts映射配置:vi /etc/hosts掷邦,輸入自己的ip對應(yīng)寫個名字即可白胀,與windows類似,此配置步驟可以忽略抚岗,直接在zookeeper下的zoo.cfg文件寫ip地址即可

hosts映射

2888 表示的是這個服務(wù)器與集群中的 Leader 服務(wù)器交換信息的端或杠,2888端口簡單來說就是zookeeper服務(wù)之間的通信端口;
3888端口是zookeeper與其他應(yīng)用程序通信的端口


其他cfg參數(shù)說明

  1. tickTime
    tickTime這個時間是作為Zookeeper服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時間間隔,也就是每個tickTime時間就會發(fā)送一個心跳宣蔚。

  2. initLimit=10
    initLimit這個配置項是用來配置Zookeeper接受客戶端(這里所說的客戶端不是用戶連接Zookeeper服務(wù)器的客戶端,而是Zookeeper服務(wù)器集群中連接到Leader的Follower 服務(wù)器)初始化連接時最長能忍受多少個心跳時間間隔數(shù)向抢。當(dāng)已經(jīng)超過10個心跳的時間(也就是tickTime)長度后Zookeeper 服務(wù)器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗∨呶總的時間長度就是10*2000=20 秒挟鸠。

  3. syncLimit=5
    syncLimit這個配置項標(biāo)識Leader與Follower之間發(fā)送消息,請求和應(yīng)答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。

  4. dataDir
    dataDir顧名思義就是Zookeeper保存數(shù)據(jù)的目錄,默認(rèn)情況下Zookeeper將寫數(shù)據(jù)的日志文件也保存在這個目錄里亩冬。

  5. clientPort=2181
    clientPort這個端口就是客戶端(應(yīng)用程序)連接Zookeeper服務(wù)器的端口,Zookeeper會監(jiān)聽這個端口接受客戶端的訪問請求


增加環(huán)境變量

修改該用戶下的.bash_profile文件艘希,此文件默認(rèn)為隱藏的

[grid@h1 data]$ vi /home/grid/.bash_profile 

增加內(nèi)容如下:

export ZOOKEEPER_HOME=/home/grid/zookeeper-3.4.6
export PATH=$ZOOKEEPER_HOME/bin:$PATH

使配置文件生效:

[grid@h1 data]$ source /home/grid/.bash_profile

防火墻配置

在防火墻中打開要用到的端口,一般默認(rèn)是開放了22端口硅急,所以我們才能使用遠(yuǎn)程工具使用22進行連接覆享,現(xiàn)在我們?nèi)ヅ渲?181 2888 3888端口,切換到root用戶執(zhí)行如下命令

chkconfig iptables on 設(shè)置開機啟動
service iptables start 啟動防火墻

我這里設(shè)置時就報錯了营袜,報錯咱就得解決

防火墻設(shè)置開機啟動

解決方案:執(zhí)行下面命令下載安裝插件

[root@h1 ~]# yum install iptables-services
安裝iptables插件

安裝完成后再次執(zhí)行chkconfig iptables on撒顿,service iptables start命令

繼續(xù)執(zhí)行防火墻開啟

接下來繼續(xù)開放防火墻端口

[root@h1 ~]# vi /etc/sysconfig/iptables

復(fù)制22端口那一行3次,然后將端口修改為需要開放的3個荚板,如下:

防火墻端口配置

重啟防火墻

[root@h1 ~]# service iptables restart

開啟zookeeper服務(wù)

啟動并測試zookeeper(使用grid用戶啟動凤壁,不要使用root賬戶),在zookeeper目錄的bin下面執(zhí)行

[grid@h1 bin]$ ./zkServer.sh start

執(zhí)行jps查看狀態(tài)啸驯,其中QuorumPeerMain是zookeeper進程客扎,啟動正常

jps查看

查看zookeeper服務(wù)輸出信息,其日志信息文件在

/home/grid/zookeeper-3.4.6/bin/zookeeper.out下
[grid@h1 bin]$ tail -222f zookeeper.out查看日志命令

設(shè)置服務(wù)為開機啟動

配置zookeeper為grid用戶開機啟動罚斗,不然在生產(chǎn)環(huán)境會很麻煩

設(shè)置開機啟動

編輯/etc/rc.local文件徙鱼,加入:

vi /etc/rc.local
su - grid -c '/home/grid/zookeeper-3.4.6/bin/zkServer.sh start'

注:su – grid是指切換到grid用戶,-c是指調(diào)用后面命令

好了针姿,單機版就講到這里袱吆,下面我們講解集群的配置


<br />

集群模式

服務(wù)器CentOS7_64_1的ip:192.168.2.101
服務(wù)器CentOS7_64_2的ip:192.168.2.102
服務(wù)器CentOS7_64_3的ip:192.168.2.103

首先我們將另外兩臺也按照如上方式進行配置,首先保證每臺機器自己啟動zookeeper成功,配置好后我們現(xiàn)在是擁有3臺單機的zookeeper距淫,那么下面我們進行集群的配置


hosts配置

首先修改3臺虛擬機的hosts映射配置:vi /etc/hosts绞绒,3臺機器分別加上自己ip和hosts別名的映射(修改后自動生效),如下:

hosts1
hosts2
hosts3

修改防火墻端口

接下來配置3臺服務(wù)器的端口榕暇,防火墻那一塊改為下面對應(yīng)的端口

機器1—端口:2181,2881,3881

iptables1

機器2—端口:2182,2882,3882

iptables2

機器3—端口:2183,2883,3883

iptables3

zookeeper配置

注意3臺機器**端口號**參數(shù)

vi /conf/zoo.cfg
zookeeper.cfg1
zookeeper.cfg2

zookeeper.cfg3

另修改data文件夾下的myid文件的值蓬衡,分別對應(yīng)的值為1,2,3


啟動zookeeper

我啟動了第一臺服務(wù)出了如下異常喻杈,于是我想應(yīng)該是防火墻的哪個配置未生效
異常信息:

Cannot open channel to 2 at election address h2/192.168.2.102:3882
java.net.NoRouteToHostException: 沒有到主機的路由
沒有到主機的路由

應(yīng)該是防火墻配置改了未生效,于是重新啟動了3臺機器防火墻

service iptables restart

下面是我重新啟動后拋出的異常
異常信息:

Cannot open channel to 1 at election address h1/192.168.2.101:3881
java.net.ConnectException: 拒絕連接
拒絕連接

解決異常

一開始認(rèn)為是等待其他機器開啟狰晚,但啟動其他兩臺后一直出現(xiàn)該問題筒饰,所以花了半個小時查原因,后來檢查沒發(fā)現(xiàn)配置問題壁晒,但3臺機器的hosts文件中有如下內(nèi)容瓷们,決定嘗試注釋后重啟,正常啟動

hostsException
127.0.0.1   localhost h1 localhost4 localhost4.localdomain4
::1         localhost h1 localhost6 localhost6.localdomain6

再次重啟成功

下圖這里開始啟動出錯的原因是集群環(huán)境正等待著另外幾臺機器秒咐,否則一臺也沒辦法進行選舉等操作谬晕,第二臺機器起來后就恢復(fù)正常了。

success

查看狀態(tài)

接下來我們運行status命令分別查看各自的狀態(tài)
啟動的第一臺機器:3號機-領(lǐng)導(dǎo)者

3leader

啟動的第二臺機器:2號機-跟隨者

2follower

啟動第三臺機器:1號機-跟隨者

3follower

一旦leader停止服務(wù)携取,剩下的follower會選舉出leader攒钳,大家可以嘗試下看看狀態(tài)變化


那么zookeeper的集群暫時就講到這里,這都是筆者參考了網(wǎng)絡(luò)上的資料自行操作后寫出來分享給大家的歹茶,如有問題希望大家提出夕玩,共同學(xué)習(xí)共同進步

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惊豺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禽作,老刑警劉巖尸昧,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旷偿,居然都是意外死亡烹俗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門萍程,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幢妄,“玉大人,你說我怎么就攤上這事茫负〗对В” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵忍法,是天一觀的道長潮尝。 經(jīng)常有香客問我,道長饿序,這世上最難降的妖魔是什么勉失? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮原探,結(jié)果婚禮上乱凿,老公的妹妹穿的比我還像新娘顽素。我一直安慰自己,他們只是感情好徒蟆,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布戈抄。 她就那樣靜靜地躺著,像睡著了一般后专。 火紅的嫁衣襯著肌膚如雪划鸽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天戚哎,我揣著相機與錄音裸诽,去河邊找鬼。 笑死型凳,一個胖子當(dāng)著我的面吹牛丈冬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甘畅,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼埂蕊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疏唾?” 一聲冷哼從身側(cè)響起蓄氧,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎槐脏,沒想到半個月后喉童,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡顿天,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年堂氯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牌废。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咽白,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸟缕,到底是詐尸還是另有隱情晶框,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布叁扫,位于F島的核電站三妈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏莫绣。R本人自食惡果不足惜畴蒲,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望对室。 院中可真熱鬧模燥,春花似錦咖祭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辽旋,卻和暖如春浩嫌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背补胚。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工码耐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溶其。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓骚腥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓶逃。 傳聞我的和親對象是個殘疾皇子束铭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容