1. 程式人生 > >ZooKeeper故障節點替換過程詳解

ZooKeeper故障節點替換過程詳解

作者介紹

康壯,大連樓蘭科技股份資料庫運維組負責人,主要負責集團內部MySQL、MongoDB、Redis資料庫運維管理工作。曾在第三方資料庫運維公司任職技術部經理,負責政府行業的Oracle資料庫運維工作,具有Oracle OCP、OCM、MySQL OCP等相關認證、對資料庫架構設計、故障處理、優化有深入的理解。

一、環境描述

我的生產環境ZooKeeper 版本3.4.6,5個節點組成的ZooKeeper叢集。ZooKeeper叢集為一套8個節點的Hadoop叢集和HBase 叢集提供高可用保障。

二、問題描述

因為某些特殊原因,需要替換掉myid為5(IP:10.10.10.30)的ZooKeeper節點,故障節點IP:10.10.10.30替換為10.10.10.37。10.10.10.37節點是現有環境的namenode節點,Hadoop使用者、相關目錄,授權、hosts檔案已經滿足ZooKeeper的部署要求。

三、ZooKeeper相關知識點

在ZooKeeper的設計中,叢集中的任何一個節點的zoo.cfg檔案內容是一樣的,因此最好使用SVN把這個檔案管理起來,保證每個機器都能使用一份相同的配置。

在配置檔案中(zoo.cfg),可以按照這樣的格式,每行寫一個機器配置:server.id=host:port:port. 關於這個id,我們稱之為Server ID,標識host機器在叢集中的機器序號,在每個ZK機器上,我們需要在資料目錄(資料目錄就是dataDir引數指定的那個目錄)下建立一個myid檔案,myid中就是這個Server ID數字。

ZooKeeper有這樣一個特性:叢集中只要有過半的機器是正常工作的,那麼整個叢集對外就是可用的。ZooKeeper 節點數一般為奇數個,比如我的環境部署了5個節點的ZooKeeper服務,如果有兩個節點的ZooKeeper異常是不會影響ZooKeeper叢集對外提供服務的。

四、部署新節點ZooKeeper

1、配置引數如下(zoo.cfg)

$ grep -v “^#” zoo.cfg |grep -v “^$”

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/ZooKeeper

clientPort=2181

server.1=10.10.10.33:2888:3888

server.2=10.10.10.34:2888:3888

server.3=10.10.10.35:2888:3888

server.4=10.10.10.36:2888:3888

server.5=10.10.10.37:2888:3888

2、關閉10.10.10.37主機

3、備份原有zoo.cfg檔案,cp zoo.cfg zoo.cfg0420

4、本案例在現有10.10.10.37節點部署myid為5的ZooKeeper服務,從其它可用節點scp 軟體包到10.10.10.37節點,修改配置檔案主機IP,使用新主機的IP替換掉原有主機的IP

5、使用新的zoo.cfg檔案,替換掉其他4個節點的zoo.cfg檔案,使用scp遠端傳輸直接覆蓋

6、10.10.10.37節點建立myid 命令:echo “5” > /data/ZooKeeper/myid

五、修改Hadoop配置檔案,然後替換所有Hadoop節點配置檔案

1、修改hdfs-site.xml

$ grep -A 2 “ha.ZooKeeper.quorum” hdfs-site.xml

<name>ha.ZooKeeper.quorum</name>             <value>host-10-10-10-49:2181,host-10-10-10-50:2181,host-10-10-10-36:2181,host-10-10-10-38:2181,host-10-10-10-30:2181</value>

</property>

$ vi hdfs-site.xml把host-10-10-10-30 替換為host-10-10-10-37

2、修改yarn-site.xml

$ grep -A 2 “yarn.resourcemanager.zk-address” yarn-site.xml

<name>yarn.resourcemanager.zk-address</name>            <value>host-10-10-10-49:2181,host-10-10-10-50:2181,host-10-10-10-36:2181,host-10-10-10-38:2181,host-10-10-10-30:2181</value>

<description>For multiple zk services, separate them with comma</description>

$ vi yarn-site.xml把host-10-10-10-30 替換為host-10-10-10-37

六、修改HBase配置檔案(HBase-site.xml),然後替換所有HBase節點配置

$ grep -A 2 “HBase.ZooKeeper.quorum” HBase-site.xml

<name>HBase.ZooKeeper.quorum</name>             <value>host-10-10-10-49,host-10-10-10-50,host-10-10-10-36,host-10-10-10-38,host-10-10-10-30</value>

</property>

$ vi HBase-site.xml  把host-10-10-10-30 替換為host-10-10-10-37

七、重啟相關服務

部署ZooKeeper節點比較簡單,當初部署叢集的時候怎麼部署的,現在就重新部署一個節點就可以,注意修改zoo.cfg配置檔案。其它依賴於ZooKeeper叢集的相關服務比如Hadoop、HBase、Hive、flume等都需要修改配置檔案,小技巧,記住修改的是xxx-site.xml檔案關鍵字是site.xml檔案。

接下來需要重啟服務,啟動順序為ZooKeeper—>Hadoop—>HBase,關閉順序為HBase—>Hadoop—>ZooKeepe。

具體命令如下:

1、重啟zookeepe命令:./zkServer.sh restart

2、關閉HBase叢集命令:./stop-HBase.sh

3、關閉Hadoop叢集命令:

./stop-yarn.sh && ./stop-dfs.sh

./yarn-daemon.sh stop resourcemanager

4、啟動Hadoop叢集命令:

./start-yarn.sh && ./start-dfs.sh

./yarn-daemon.sh start resourcemanager

5、啟動HBase叢集命令:./start-HBase.sh

6、通過命令驗證配置是否同步

驗證配置

可以看到所有相關係統的配置都已經同步到了新增的ZooKeeper-server中。

7、使用網頁方式驗證Hadoop叢集和HBase狀態,不同環境埠可能不一樣

10.10.10.37:8088

Hadoop

10.10.10.37:50070

埠

八、遇到問題

1、直接啟動新節點ZooKeeper報錯資訊

ZooKeeper

在部署好的ZooKeeper伺服器直接啟動會報上面的錯誤,更換了IP的主機無法直接加入ZooKeeper叢集,需要先重啟原有4臺ZooKeeper叢集才可以。

小結

  1. 目前ZooKeeper不支援動態新增節點,新增節點需要重啟所有ZooKeeper
  2. ZooKeeper 新增、刪除主要修改zoo.cfg檔案,zoo.cfg檔案需要備份儲存好
  3. Namenode 的主備高可用依賴ZooKeeper,所以需要修改hdfs-site.xml
  4. Resouremanager的主備高可用依賴ZooKeeper,需要修改yarn-site.xml
  5. HBase的主備高可用依賴ZooKeeper,需要修改HBase-site.xml
  6. 如果有Hive、Flume也需要修改相關的配置
  7. 因為生產環境剛上線,所以直接重啟了叢集服務,如果實時性要求比較高,沒有維護視窗,可以單獨重啟相關服務,儘可能減少影響。

文章來自微信公眾號:DBAplus社群