Zookeeper學習系列【二】Zookeeper 集羣章節之集羣搭建

前言

同道們,很久不見,上一章中,我主要講了Zookeeper的一些基礎的知識點。數據模型 + 原語集 + Watches機制。本章內容主要講的是集羣搭建相關的知識。html

本篇的內容主要包含如下幾點:shell

  • Zookeeper 運行模式
  • Zookeeper 搭建

1、Zookeeper 運行模式

Zookeeper 有兩種運行模式,單點模式集羣模式apache

  • 單點模式(standalone mode)- Zookeeper 只運行在單個服務器上,經常使用於開發測試階段,這種模式比較簡單,可是不能保證Zookeeper服務的<font color= 'red'>高可用性</font>和<font color= 'red'>恢復性</font>。
  • 集羣模式(replicated mode)- 英文原文這種模式叫作「複製模式」;這個模式下,Zookeeper運行於一個集羣上,適合生產環境。服務器

    同一個集羣下的server節點被稱爲quorum,翻譯過來就是「一個正式會議的法定人數」,若是你看完下一章介紹的ZAB協議的兩種模式以後,應該會以爲這個比喻實際上很形象。ide

    NOTE: 在集羣模式下,最少須要三個server節點。而且官方推薦你使用奇數數量的server節點來組成集羣。至於爲何,和Zookeeper的讀寫策略和一致性協議有關,在後面的章節會介紹。

2、Zookeeper 搭建

單點模式

使用過zookeeper的同窗們應該知道,啓一個zookeeper server 很是簡單,若是是單點模式,只須要如下步驟:測試

  1. 去官網下載對應源碼壓縮包,而後上傳到服務器
  2. 解壓,tar -zxvf zookeeper-***.tar.gz
  3. 進入到源碼目錄下的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
  4. 進入到源碼目錄下的bin目錄,執行zkServer.sh腳本文件便可this

    # 啓動
    zkServer.sh start
    # 關閉
    zkServer.sh stop
  5. 查看當前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能夠看到如今的節點啓動類型。翻譯

集羣搭建

集羣模式的搭建和單點模式的差異不大,若是按照官方的最低要求,就是三臺服務器,在這三臺服務器上面分別執行一下上述單點模式的步驟,同一集羣下的每臺服務器的配置文件相似。

下面的描述會提到 followerleader節點,這個屬於集羣中的節點類型,具體定義後面章節會詳述。

除了上述步驟中,還須要作一下步驟

  1. 每臺機器上 conf/zoo.cfg 配置文件的參數設置,須要添加集羣的信息,參考以下
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 地址;至於port1port2參照官網的描述較爲準確,網上有些文章都把端口的含義給弄混了。

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選舉端口。

  1. 在每一個Zookeeper服務器對應的dataDir目錄下須要建立一個名爲myid的文件,這個文件中僅含有一行的內容,指定的是自身的 id 值,就是server.id=host:port1:port2中的id值。這個 id 值必須是集羣中惟一的
  2. 在確認每臺服務器上的zoo.cfgmyid文件修改建立以後,在三個節點上分別執行命令zkServer.sh start,啓動zookeeper server。
  3. 在三個節點上分別執行zkServer.sh status 查看當前節點的狀態。

    • 節點1

    • 節點2

    • 節點3

能夠看到,目前節點2是leader節點,節點1和節點3是follower節點。

更詳細的集羣搭建能夠參考這篇: ZooKeeper安裝配置

也能夠參考官網相關文章:ZooKeeper Getting Started Guide

總結

本章介紹了Zookeeper的兩種運行模式,和兩種模式的搭建。

下一章中,咱們會介紹Zookeeper原理篇的進階部分,有關於Zookeeper集羣的讀寫機制、ZAB協議的知識解析等比較深刻的知識點。

相關文章
相關標籤/搜索