1. 程式人生 > >Zookeeper偽叢集的搭建

Zookeeper偽叢集的搭建

Zookeeper偽叢集的搭建

1.選擇自己需要的版本號進行下載

wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

注意:Zookeeper是需要依賴jdk的,所以你的主機要安裝上jdk

2.解壓

[[email protected] tools]# tar -zxvf zookeeper-3.4.9.tar.gz

3. 分別建立三個data(d_1,d_2,d_3)目錄和logs(log_1,log_2,log_3)目錄用來分別存放三個Zookeeper
的資料和日誌資訊

4.進入zk中的conf目錄下 分別 複製配置檔案zoo_sample.cfg 為zoo1.cfg,zoo2.cfg,zoo3.cfg來作為三個Zookeeper的的配置檔案

[[email protected] conf]# cp zoo_sample.cfg zoo1.cfg
[[email protected] conf]# cp zoo_sample.cfg zoo2.cfg
[[email protected] conf]# cp zoo_sample.cfg zoo3.cfg

5. 分別對zoo1.cfg、2、3檔案進行編輯

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/tools/zookeeper-3.4.9/data/d_1
dataLogDir=/home/tools/zookeeper-3.4.9/logs/log_1
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=127.0.0.1:2187:2887 
server.2=127.0.0.1:2188:2888
server.3=127.0.0.1:2189:2889

如圖:zoo1.cfg

Zoo2.cfg

Zoo3.cfg

這幾個引數主要是注意一下:

  • dataDir zk 的放置一下資料的目錄如版本號,id 等等,所以每一個節點都區分一下如,/home/tools/zookeeper-3.4.9/data/d_1
  • clientPort 接受客戶端請求的埠,每個節點都需要不一樣。如:2181
  • server.X 這個數字就是對應 data/myid中的數字。你在3個server的myid檔案中分別寫入了1,2,3,那麼每個server中的zoo.cfg都配server.1,server.2,server.3就OK了。因為在同一臺機器上,後面連著的2個埠3個server都不要一樣,否則埠衝突,其中第一個埠用來叢集成員的資訊交換,第二個埠是在leader掛掉時專門用來進行選舉leader所用。

6.分別在/home/tools/zookeeper-3.4.9/data/d_1,2,3目錄下建立myid檔案Myid檔案的內容分別對應配置檔案中server.1 和server.2 server.3 中的數字1,2,3

echo '1' myid (要進去/home/tools/zookeeper-3.4.9/data/d_1這個目錄下)
echo '2' myid
echo '3' myid

7.進入bin目錄下輸入命令 分別進行啟動

[[email protected] bin]# ./zkServer.sh start  ../conf/zoo1.cfg 
[[email protected] bin]# ./zkServer.sh start  ../conf/zoo2.cfg 
[[email protected] bin]# ./zkServer.sh start  ../conf/zoo3.cfg

8.檢視Zookeeper的狀態

[[email protected] bin]# ./zkServer.sh status  ../conf/zoo3.cfg 
[[email protected] bin]# ./zkServer.sh status  ../conf/zoo2.cfg 
[[email protected] bin]# ./zkServer.sh status  ../conf/zoo1.cfg

或者使用jps檢視是否啟動了三個。

到此Zookeeper的偽叢集搭建就完畢了。

Zoo.cfg 引數                                      

角色:

  • Leader:Leader 作為整個 ZooKeeper 叢集的主節點,負責響應所有對 ZooKeeper 狀態變更的請求。它會將每個狀態更新請求進行排序和編號,以便保證整個叢集內部訊息處理的 FIFO,寫操作都走 leader
  • Follower  :Follower 的邏輯就比較簡單了。除了響應本伺服器上的讀請求外,follower 還要處理leader 的提議,並在 leader 提交該提議時在本地也進行提交。 另外需要注意的是,leader 和 follower 構成 ZooKeeper 叢集的法定人數,也就是說,只有他們才參與新 leader的選舉、響應 leader 的提議。
  • Observer  :如果 ZooKeeper 叢集的讀取負載很高,或者客戶端多到跨機房,可以設定一些 observer伺服器,以提高讀取的吞吐量。Observer 和 Follower 比較相似,只有一些小區別:首先observer 不屬於法定人數,即不參加選舉也不響應提議;其次是 observer 不需要將事務持久化到磁碟,一旦 observer 被重啟,需要從 leader 重新同步整個名字空間。

Zookeeper  特性:

  • Zookeeper 是一個由多個 server 組成的叢集
  • 一個 leader,多個 follower
  • 每個 server 儲存一份資料副本
  • 全域性資料一致
  • 分散式讀 follower,寫由 leader 實施
  • 更新請求轉發,由 leader 實施
  • 更新請求順序進行,來自同一個 client 的更新請求按其傳送順序依次執行
  • 資料更新原子性,一次資料更新要麼成功,要麼失敗
  • 全域性唯一資料檢視,client 無論連線到哪個 server,資料檢視都是一致的實時性,在一定事件範圍內,client 能讀到最新資料