官术网_书友最值得收藏!

6.2 ZooKeeper安裝配置

本節講解ZooKeeper三種模式的安裝,分別為單機模式、偽分布模式和集群模式。

6.2.1 單機模式

單機模式是指只部署一個ZooKeeper進程,客戶端直接與該ZooKeeper進程進行通信。在單機模式下配置和安裝ZooKeeper相對來說比較簡單且易于理解。在開發測試環境下,如果沒有較多的物理資源,可以使用單機模式。但是在生產環境下不可用單機模式,因為無論是系統可靠性還是讀寫性能,單機模式都不能滿足生產的需求。

1. 下載ZooKeeper

從Apache官網下載一個ZooKeeper的穩定版本,下載網址為:

https://zookeeper.apache.org/releases.html

本書使用的是zookeeper-3.4.10版本。

2. 安裝ZooKeeper

ZooKeeper需要有Java環境才能運行,并且是Java 6以上版本,Java環境的安裝此處不再贅述。

將下載的ZooKeeper安裝文件zookeeper-3.4.10.tar.gz上傳到操作系統的目錄/opt/softwares/中,并進入該目錄,將其解壓到目錄/opt/modules/,解壓命令如下:

為了以后的操作方便,可以對ZooKeeper的環境變量進行配置,在/etc/profile文件中加入以下內容:

加入后執行source /etc/profile命令對環境變量文件進行刷新操作,使修改生效。

安裝ZooKeeper服務還需要創建一個配置文件,在ZooKeeper安裝目錄下的conf文件夾中創建zoo.cfg文件,并向文件中添加以下內容:

上述配置屬性解析如下:

  •  tickTime:基本事件單元,用來指示一個心跳的時長。以毫秒為單位,默認是2000。
  •  dataDir:ZooKeeper數據文件的存儲位置。
  •  clientPort:ZooKeeper供客戶端連接的端口,默認是2181。

配置好后,執行以下命令,啟動ZooKeeper服務:

啟動后如果要檢查ZooKeeper服務是否已經啟動,可以通過執行以下命令查看是否有 2181端口號在監聽服務:

ZooKeeper服務啟動后就可以啟動客戶端進行連接了,命令如下:

6.2.2 偽分布模式

所謂偽分布模式,就是在單臺計算機上運行多個ZooKeeper實例,并組成一個集群。本節以啟動三個ZooKeeper進程為例進行講解。

1. 安裝ZooKeeper

將ZooKeeper安裝文件解壓到相應目錄下,并配置環境變量,步驟參考單機模式。

2. 建立配置文件

在安裝目錄的conf文件夾下分別新建三個配置文件zoo1.cfg、zoo2.cfg、zoo3.cfg。

zoo1.cfg內容如下:

zoo2.cfg內容如下:

zoo3.cfg內容如下:

上述配置屬性解析可參考本章6.2.3節。

3. 建立數據和日志目錄

在ZooKeeper安裝目錄下分別建立1.data、2.data、3.data數據目錄,分別建立1.logs、2.logs、3.logs日志目錄,并分別在每個數據目錄下新建myid文件,對1.data目錄下的myid文件寫入數字1,對2.data目錄下的myid文件寫入數字2,對3.data目錄下的myid文件寫入數字3。

4. 啟動服務并查看狀態

分別執行以下命令啟動ZooKeeper服務:

分別執行以下命令查看服務狀態:

6.2.3 集群模式

由于在ZooKeeper集群中,會有一個Leader服務器負責管理和協調其他集群服務器,因此服務器的數量通常都是單數,例如3,5,7等,這樣數量為2n+1的服務器就可以允許最多n臺服務器的失效。

本例仍然使用三個節點(centos01、centos02、centos03)搭建部署ZooKeeper集群,搭建步驟如下。

1. 上傳ZooKeeper安裝文件

在centos01節點中,上傳ZooKeeper安裝文件zookeeper-3.4.10.tar.gz到目錄/opt/softwares/中,并進入該目錄,將其解壓到目錄/opt/modules/,解壓命令如下:

2. 編寫配置文件

(1)在ZooKeeper安裝目錄下新建文件夾dataDir,用于存放ZooKeeper相關數據。

(2)在ZooKeeper安裝目錄下的conf文件夾中新建配置文件zoo.cfg,加入以下內容:

上述配置屬性解析如下。

  •  initLimit:集群中的Follower服務器初始化連接Leader服務器時能等待的最大心跳數(連接超時時長)。默認為10,即如果經過10個心跳之后Follower服務器仍然沒有收到Leader服務器的返回信息,則連接失敗。本例中該參數值為5,參數tickTime為2000(毫秒),則連接超時時長為5×2000=10秒(即tickTime×initLimit=10秒)。
  •  syncLimit:集群中的Follower服務器與Leader服務器之間發送消息以及請求/應答時所能等待的最多心跳數。本例中,最多心跳時長為2×2000=4秒。
  •  server.id=host:port1:port2:標識不同的ZooKeeper服務器。ZooKeeper可以從“server.id=host:port1:port2”中讀取相關信息。其中,id值必須在整個集群中是唯一的,且大小在1到255之間;host是服務器的名稱或IP地址;第一個端口(port1)是Leader端口,即該服務器作為Leader時供Follower連接的端口;第二個端口(port2)是選舉端口,即選舉Leader服務器時供其他Follower連接的端口。
  •  dataDir:ZooKeeper存儲數據的目錄。
  •  clientPort:客戶端連接ZooKeeper服務器的端口。ZooKeeper會監聽這個端口,接收客戶端的請求。

(3)在配置文件zoo.cfg中的參數dataDir指定的目錄下(此處為ZooKeeper安裝目錄下的dataDir文件夾)新建一個名為myid的文件,這個文件僅包含一行內容,即當前服務器的id值,與參數server.id中的id值相同。本例中,當前服務器(centos01)的id值為1,則應該在myid文件中寫入數字1。ZooKeeper啟動時會讀取該文件,將其中的數據與zoo.cfg里寫入的配置信息進行對比,從而獲取當前服務器的身份信息。

3. 復制ZooKeeper安裝信息到其他節點

centos01節點安裝完成后,需要復制整個ZooKeeper安裝目錄到centos02和centos03節點,命令如下:

4. 修改其他節點配置

復制完成后,需要將centos02和centos03節點中的myid文件的值修改為對應的數字,即作出以下操作:

修改centos02節點中的opt/modules/zookeeper-3.4.10/dataDir/myid文件中的值為2。

修改centos03節點中的opt/modules/zookeeper-3.4.10/dataDir/myid文件中的值為3。

5. 啟動ZooKeeper

分別進入每個節點的ZooKeeper安裝目錄,執行以下命令啟動各個節點的ZooKeeper:

啟動時輸出以下信息代表啟動成功:

注意

ZooKeeper集群的啟動與Hadoop不同,其需要在每臺裝有ZooKeeper的服務器上都執行一次啟動命令,這樣才能使得整個集群啟動起來。

6. 查看啟動狀態

分別在各個節點上執行以下命令,查看ZooKeeper服務的狀態:

在centos01節點上查看服務狀態,輸出了以下信息:

在centos02服務器上查看服務狀態,輸出了以下信息:

在centos03服務器上查看服務狀態,輸出了以下信息:

由此可見,本例中centos03服務器上的ZooKeeper服務為Leader,其余兩個ZooKeeper服務為Follower。

如果在查看啟動狀態時輸出以下信息,說明ZooKeeper集群啟動不成功,出現錯誤。

此時需要修改ZooKeeper安裝目錄下的bin/zkEvn.sh文件中的以下內容:

將上述內容中的CONSOLE修改為ROLLINGFILE,使其將錯誤信息輸出到日志文件,修改后的內容如下:

修改完成后重新啟動ZooKeeper集群,查看在ZooKeeper安裝目錄下生成的日志文件zookeeper.log,發現出現以下錯誤:

產生上述錯誤的原因是,系統沒有關閉防火墻,導致ZooKeeper集群間連接不成功。因此需要關閉系統防火墻(為了防止出錯,在最初的集群環境配置的時候可以直接將防火墻關閉),CentOS 7關閉防火墻的命令如下:

關閉各節點的防火墻后,重新啟動ZooKeeper,再一次查看啟動狀態,發現一切正常了。

7. 測試客戶端連接

在centos01節點上(其他節點也可以),進入ZooKeeper安裝目錄,執行以下命令,連接ZooKeeper服務器,連接成功后可以輸入ZooKeeper的Shell命令進行操作與測試。

主站蜘蛛池模板: 克拉玛依市| 台南县| 诏安县| 祁阳县| 山西省| 阿坝| 密山市| 灵山县| 高台县| 乐清市| 菏泽市| 班玛县| 梨树县| 淳化县| 巴彦淖尔市| 乐安县| 原阳县| 三台县| 淮滨县| 梧州市| 内江市| 清远市| 四川省| 黔西县| 石棉县| 英吉沙县| 阿勒泰市| 水城县| 田东县| 连江县| 原阳县| 平顶山市| 兴业县| 万山特区| 庆城县| 靖西县| 肇东市| 基隆市| 浮梁县| 武乡县| 邵阳市|