同道們,很久不見,上一章中,我主要講了Zookeeper的一些基礎的知識點。數據模型 + 原語集 + Watches機制。本章內容主要講的是集羣搭建相關的知識。html
本篇的內容主要包含如下幾點:shell
Zookeeper 有兩種運行模式,單點模式和集羣模式。apache
集羣模式(replicated mode)- 英文原文這種模式叫作「複製模式」;這個模式下,Zookeeper運行於一個集羣上,適合生產環境。服務器
同一個集羣下的server節點被稱爲quorum,翻譯過來就是「一個正式會議的法定人數」,若是你看完下一章介紹的ZAB協議的兩種模式以後,應該會以爲這個比喻實際上很形象。ide
NOTE: 在集羣模式下,最少須要三個server節點。而且官方推薦你使用奇數數量的server節點來組成集羣。至於爲何,和Zookeeper的讀寫策略和一致性協議有關,在後面的章節會介紹。
使用過zookeeper的同窗們應該知道,啓一個zookeeper server 很是簡單,若是是單點模式,只須要如下步驟:測試
tar -zxvf zookeeper-***.tar.gz
進入到源碼目錄下的conf目錄,根據zoo_sample.cfg
,建立一個配置文件zoo.cfg
,啓動時默認就是按照zoo.cfg
這個配置文件的信息來啓動ui
# Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔, # 也就是每一個 tickTime 時間就會發送一個心跳。 tickTime=2000 # Zookeeper 保存數據的目錄 dataDir=/data/zk/data # Zookeeper 保存日誌文件的目錄 dataLogDir=/data/zk/log # 客戶端鏈接Zookeeper 服務器的端口 # Zookeeper 會監聽這個端口,接受客戶端的訪問請求 clientPort=2181
進入到源碼目錄下的bin目錄,執行zkServer.sh
腳本文件便可this
# 啓動 zkServer.sh start # 關閉 zkServer.sh stop
查看當前zookeeper 狀態spa
[root@localhost bin]# sh zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg Mode: standalone
Mode:standalone
能夠看到如今的節點啓動類型。翻譯
集羣模式的搭建和單點模式的差異不大,若是按照官方的最低要求,就是三臺服務器,在這三臺服務器上面分別執行一下上述單點模式的步驟,同一集羣下的每臺服務器的配置文件相似。
下面的描述會提到follower
、leader
節點,這個屬於集羣中的節點類型,具體定義後面章節會詳述。
除了上述步驟中,還須要作一下步驟
tickTime=2000 dataDir=/data/zk/data dataLogDir=/data/zk/log clientPort=2181 # 集羣相關配置 # 容許 follower 鏈接並同步到 leader 的初始化鏈接時間 # 好比這裏就是容許 5個 tick 的時間 initLimit=5 # leader 與 follower 之間發送消息,請求和應答時間長度。 # 若是 follower 在設置的時間內不能與leader 進行通訊,那麼此 follower 將被丟棄。 # 好比這裏就是容許 2個 tick 的時間 syncLimit=2 # 集羣信息 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
server.id=host:port1:port2
標識了不一樣Zookeeper服務器的信息,其中 id
是一個數字,表示這個是服務器的編號;host
是這個服務器的 ip 地址;至於port1
和port2
參照官網的描述較爲準確,網上有些文章都把端口的含義給弄混了。
Finally, note the two port numbers after each server name: " 2888" and "3888". Peers use the former port to connect to other peers. Such a connection is necessary so that peers can communicate, for example, to agree upon the order of updates. More specifically, a ZooKeeper server uses this port to connect followers to the leader. When a new leader arises, a follower opens a TCP connection to the leader using this port. Because the default leader election also uses TCP, we currently require another port for leader election. This is the second port in the server entry.最後,讓咱們來看看在server 名字後面的兩個端口號:"2888"和"3888",Zookeeper 節點使用前面那個端口(
port1
)來與其餘節點創建鏈接。這個鏈接是必須創建的,由於不一樣節點之間須要通訊。打比方說,follower
節點須要「同意」leader
節點的更新命令。更確切一點說,這個節點是用於follower
節點和leader
節點之間的通訊。當一個leader
節點出現了,follower
節點會在port1
上與leader
節點創建一個TCP
鏈接。由於默認的leader
選舉也是用TCP
,咱們如今就須要另外一個端口來用於leader
選舉,這就是port2
的做用。
簡單來講,port1
通訊端口,port2
選舉端口。
dataDir
目錄下須要建立一個名爲myid
的文件,這個文件中僅含有一行的內容,指定的是自身的 id 值,就是server.id=host:port1:port2
中的id
值。這個 id
值必須是集羣中惟一的。zoo.cfg
和myid
文件修改建立以後,在三個節點上分別執行命令zkServer.sh start
,啓動zookeeper server。在三個節點上分別執行zkServer.sh status
查看當前節點的狀態。
能夠看到,目前節點2是leader
節點,節點1和節點3是follower
節點。
更詳細的集羣搭建能夠參考這篇: ZooKeeper安裝配置也能夠參考官網相關文章:ZooKeeper Getting Started Guide
本章介紹了Zookeeper的兩種運行模式,和兩種模式的搭建。
下一章中,咱們會介紹Zookeeper原理篇的進階部分,有關於Zookeeper集羣的讀寫機制、ZAB協議的知識解析等比較深刻的知識點。