1. 程式人生 > >ZooKeeper 學習之 安裝 部署

ZooKeeper 學習之 安裝 部署

安裝 apach 編寫 端口 erro lang 問題 名稱 cal

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 學習之 安裝 部署