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
10.10.10.37:50070
八、遇到問題
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也需要修改相關的配置
- 因為生產環境剛上線,所以直接重啟了叢集服務,如果實時性要求比較高,沒有維護視窗,可以單獨重啟相關服務,儘可能減少影響。
文章來自微信公眾號:DBAplus社群