ZooKeeper 學習之 安裝 部署
ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,ZooKeeper是以Fast Paxos算法為基礎,實現同步服務,配置維護和命名服務等分布式應用。
Zookeeper 分布式服務框架是 Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。核心詞就是一個,協調。
下面實踐安裝來學習下,分為獨立部署、集群部署
一、下載安裝
wget -c http://www.eu.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar zxvf zookeeper-3.4.6.tar.gz
可以指定放在哪個目錄,如usr/local
mkdir /usr/local/zookeeper-3.4.6
二、獨立部署配置
1、編輯zookeeper-3.4.6/conf 下的zoo_sample.cfg文件, 這個文件裏面配置了監聽客戶端連接的端口等一些信息,Zookeeper 在啟動時會找zoo.cfg這個文件作為默認配置文件。
在zookeeper-3.4.6/conf目錄下復制一個名稱為zoo.cfg的文件:
cp zoo_sample.cfg zoo.cfg
2、在zookeeper-3.4.6/bin目錄啟動Zookeeper服務:
./zkServer.sh start
三、ZooKeeper集群部署配置
1、ZooKeeper的集群模式下,多個Zookeeper服務器在工作前會選舉出一個Leader,在接下來的工作中這個被選舉出來的Leader死了,而剩下的Zookeeper服務器會知道這個Leader死掉了, 在活著的Zookeeper集群中會繼續選出一個Leader,選舉出Leader的目的是為了可以在分布式的環境中保證數據的一致性。 由於ZooKeeper集群中,會有一個Leader負責管理和協調其他集群服務器,因此服務器的數量通常都是單數,例如3,5,7...等,這樣2n+1的數量的服務器就可以允許最多n臺服務器的失效。
2、編寫配置文件
配置文件需要在每臺服務器中都要編寫,以下是一個配置文件的樣本:
# Filename zoo.cfg
tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=10.10.0.101:2888:3888
server.2=10.10.0.102:2888:3888
server.3=10.10.0.103:2888:3888
參數說明
tickTime:這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳
dataDir:顧名思義就是 Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏
clientPort:這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
initLimit:配置 Zookeeper 接受客戶端(指的是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。集群包含多臺server, 其中一臺為leader, 集群中其余的server為follower,follower和leader之間的最長心跳時間,如該參數設置為5,當已經超過 5 個心跳時間(即 tickTime),總時間長度是 5*2000=10 秒後 Zookeeper 服務器沒有收到客戶端的返回信息,那麽表明這個客戶端連接失敗。
syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 2*2000=4 秒
server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集群中的 Leader 服務器交換信息的端口;D 表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。如果是偽集群的配置方式,由於 B 都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號
3、創建myid文件
除了修改 zoo.cfg 配置文件,集群模式下還要配置一個文件 myid,這個文件在dataDir 目錄下,這個文件裏面就只有一個數據就是A (服務器對應的編號) 的值,Zookeeper 啟動時會讀取這個文件,拿到裏面的數據與 zoo.cfg 裏面的配置信息比較從而判斷到底是那個 server。
4、執行運行腳本
和單機模式下的運行方式基本相同,需要註意的地方就是要分別在不同服務器上執行一次,例如分別在101,102,103上運行:
./zkServer.sh start
這樣才能使得整個集群啟動起來。
四、偽集群方式配置部署
因條件限制,這裏以偽集群方式部署運行
1、確認集群偽服務器的數量
2n+1,和之前的集群部署方式相同,比如我們這裏用3臺
2、編寫配置文件
在/conf文件夾新建三個配置文件,zoo1.cfg,zoo2.cfg以及zoo3.cfg
或 將zookeeper-3.4.6 對應目錄復制三份
如zookeeper-3.4.6-node1
zookeeper-3.4.6-node2
zookeeper-3.4.6-node3
分別配置conf下zoo.cfg文件
zookeeper-3.4.6-node1
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.6-node1
clientPort=2181
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
zookeeper-3.4.6-node2
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.6-node2
clientPort=2182
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
zookeeper-3.4.6-node3
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.6-node3
clientPort=2183
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
由於三個服務都在同一臺電腦上,因此這裏要保證地址的唯一性,因此要特別註意IP地址和端口號不要互相沖突,IP相同,端口一定不能相同,以免影響程序的正確執行。
3.在每個zookeeper-3.4.6-node分別創建myid文件
內容為1,2,3 對應server序號,如:1,2,3
4、
啟動zookeeper 服務
若分別三個目錄,則在各自目錄下執行,./zkServer.sh start
若是在同一個目錄下創建3 個不同配置文件,則用下面方法
./zkServer.sh start zoo1.cfg
./zkServer.sh start zoo2.cfg
./zkServer.sh start zoo3.cfg
5、分別啟動
若配置正常,啟動後結果如下
若沒配置好則會出現這個異常
JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running.
ZooKeeper 學習之 安裝 部署