您好,登錄后才能下訂單哦!
Zookeeper是一個很好的集群管理工具,被大量用于分布式計算。如Hadoop以及Storm系統中。
Apache ZooKeeper是一個為分布式應用所設計開源協調服務,其設計目是為了減輕分布式應用程序所承擔的協調任務。可以為用戶提供同步、配置管理、分組和命名服務。
在三臺裝有centos6.5(64位)服務器上安裝ZooKeeper,官網建議至少3個節點,本次實驗3臺
(主機數:3(要求3+,且必須是奇數,因為ZooKeeper選舉算法))。
需要提前安裝jdk,選擇版本是jdk-8u111-linux-x64。
下載ZooKeeper,選擇穩定版,即stable
下載地址:http://apache.fayea.com/zookeeper/
解壓
$ tar -zxvf zookeeper-3.4.6.tar.gz //將文件移動到/usr/cloud/$ mv zookeeper-3.4.6 /usr/cloud/zookeeper
配置環境變量
# vim /etc/profile//最后一行追加# set zookeeper environmentexport ZOOKEEPER_HOME=/usr/cloud/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
使環境變量立即生效
$ source /etc/profile
集群部署
在Zookeeper集群環境下只要一半以上的機器正常啟動了,那么Zookeeper服務將是可用的。因此,集群上部署Zookeeper最好使用奇數臺機器,這樣如果有5臺機器,只要3臺正常工作則服務將正常使用。
下面我們將對Zookeeper的配置文件zoo.cfg的參數進行設置:
$ cd /usr/cloud/zookeeper/conf$ cp zoo_sample.cfg zoo.cfg$ vim zoo.cfg
參數可以參考下圖
注意上圖的配置中master,slave1分別為主機名,具體的對應的主機可參見之前的Hadoop的安裝與配置的博文。
在上面的配置文件中server.id=host:port:port中的第一個port是從機器(follower)連接到主機器(leader)的端口號,第二個port是進行leadership選舉的端口號。
接下來在dataDir所指定的目錄下創建一個文件名為myid的文件,文件中的內容只有一行,為本主機對應的id值,也就是上圖中server.id中的id。例如:在服務器1中的myid的內容應該寫入1。
參數說明
①tickTime:心跳時間,毫秒為單位。
②initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這里客戶端不是用戶連接 Zookeeper服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 102000=20 秒。
③syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime時間長度,總時間長度就是 5*2000=10 秒。
④dataDir:存儲內存中數據庫快照的位置。
⑤clientPort:監聽客戶端連接的端口
⑥server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集群中的 Leader 服務器交換信息的端口;D 表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。如果是偽集群的配置方式,由于 B 都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。
dataDir目錄下創建myid文件,將內容設置為上⑥中A值,用來標識不同的服務器。
將安裝文件復制到其它節點
$ scp -r /home/hadoop/zookeeper hadoop@slave1:/home/hadoop/$ scp -r /home/hadoop/zookeeper hadoop@slave1:/home/hadoop/
修改對應機器上的myid
$ echo "1" > /home/hadoop/zookeeper/data/myid $ cat /home/hadoop/zookeeper/data/myid
在ZooKeeper集群的每個結點上,執行啟動ZooKeeper服務的腳本,如下所示:
各節點上啟動 (這里啟動順序為master > slave1 > slave2 )
啟動順序:
Hadoop——>Zookeeper——>HBase
停止順序
HBase——>Zookeeper——>Hadoop
hadoop@master:/home/hadoop/zookeeper/bin/$ zkServer.sh start hadoop@slave1:/home/hadoop/zookeeper/bin/$ zkServer.sh start hadoop@slave2:/home/hadoop/zookeeper/bin/$ zkServer.sh start
其中,QuorumPeerMain是zookeeper進程,啟動正常。
如上依次啟動了所有機器上的Zookeeper之后可以通過ZooKeeper的腳本來查看啟動狀態,包括集群中各個結點的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每個結點上查詢的結果:
通過上面狀態查詢結果可見,slave1是集群的Leader,其余的兩個結點是Follower。
另外,可以通過客戶端腳本,連接到ZooKeeper集群上。對于客戶端來說,ZooKeeper是一個整體(ensemble),連接到ZooKeeper集群實際上感覺在獨享整個集群的服務,所以,你可以在任何一個結點上建立到服務集群的連接。
$ zkServer.sh stop
參考鏈接
http://blog.csdn.net/cruise_h/article/details/19046357
https://yq.aliyun.com/articles/36329
Error contacting service. It is probably not running.
網上看了下'Error contacting service. It is probably not running.'類錯誤不外乎3種答案:
1,配置文件zoo.cfg中的datadir文件夾未創建導致
2,防火墻未關閉,建議永久關閉防火墻-->chkconfig iptables of
3,修改sh腳本里的一個nc的參數來解決,可在自己的版本中并沒有找到nc的調用。-->nc屬于老版本,新版本沒有了nc
但是,我的都不是上述問題,我的問題是myid文件配置錯誤。
myid的文件,文件中的內容只有一行,為本主機對應的id值,也就是上圖中server.id中的id
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。