ZooKeeper故障節點替換過程詳解

2021-10-25 18:39:50 字數 4319 閱讀 1946

一、環境描述

我的生產環境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

ha.zookeeper.quorum

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

$ 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

yarn.resourcemanager.zk-address

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

for multiple zk services, separate them with comma

$ 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

hbase.zookeeper.quorum

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

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

七、重啟相關服務

部署zookeeper節點比較簡單,當初部署集群的時候怎麼部署的,現在就重新部署乙個節點就可以,注意修改zoo.cfg配置檔案。其它依賴於zookeeper集群的相關服務比如hadoop、hbase、hive、flume等都需要修改配置檔案,小技巧,記住修改的是***-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狀態,不同環境埠可能不一樣

八、遇到問題

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

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

小結

目前zookeeper不支援動態新增節點,新增節點需要重啟所有zookeeper

zookeeper 新增、刪除主要修改zoo.cfg檔案,zoo.cfg檔案需要備份儲存好

namenode 的主備高可用依賴zookeeper,所以需要修改hdfs-site.xml

resouremanager的主備高可用依賴zookeeper,需要修改yarn-site.xml

hbase的主備高可用依賴zookeeper,需要修改hbase-site.xml

如果有hive、flume也需要修改相關的配置

因為生產環境剛上線,所以直接重啟了集群服務,如果實時性要求比較高,沒有維護視窗,可以單獨重啟相關服務,盡可能減少影響。

ZooKeeper 節點型別

zookeeper 節點是有生命週期的,這取決於節點的型別。在 zookeeper 中,節點型別可以分為持久節點 persistent 臨時節點 ephemeral 以及時序節點 sequential 具體在節點建立過程中,一般是組合使用,可以生成以下 4 種節點型別。持久節點 persistent...

ZooKeeper 節點型別

zookeeper 節點是有生命週期的,這取決於節點的型別。在 zookeeper 中,節點型別可以分為持久節點 persistent 臨時節點 ephemeral 以及時序節點 sequential 具體在節點建立過程中,一般是組合使用,可以生成以下 4 種節點型別。持久節點 persistent...

ZooKeeper 節點型別

zookeeper 節點是有生命週期的,這取決於節點的型別。在 zookeeper 中,節點型別可以分為持久節點 persistent 臨時節點 ephemeral 以及時序節點 sequential 具體在節點建立過程中,一般是組合使用,可以生成以下 4 種節點型別。1 持久節點 persiste...