一、環境描述
我的生產環境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...