說明
由于 hdfs 的 namenode 如果沒有 active 的後,會導緻 hdfs 整個叢集不可用,是以遷移 namenode 還需要小心。
通過 hdfs ha 模式遷移 hdfs namenode,保證 hdfs 的高可用,本文以較常用的 hbase 作為上遊來舉例。
由于 zk 中存了 namenode 的 host name 與 ip,是以hostname不能變,隻能改變ip。
為保證 hbase 不受影響,也借助了 hbase 的 ha 模式。
環境資訊
- 老 namenode:nno1、nno2
- 新 namenode:nnn1、nnn2
- datanode:dn1、dn2、dn3
- hbase master:hm1、hm2
- hbase regionserver:hr1、hr2、hr3
- hdfs-site.xml:nn1->hdfsNameNode1:9000;nn2->hdfsNameNode2:9000
- hosts:
nno1 hdfsNameNode1
nno2 hdfsNameNode2
遷移順序
- nno1->nnn1
- nno2->nnn2
準備
-
確定 hdfs ha 模式是沒問題的,nno1 與 nno2 的 active 狀态可以正确切換(關閉 standy namenode 服務,另一台能正确變為active)
提醒,如果 ha 模式切換失敗,可能原因:
- 確定 ssh 的登入是完成成功的,如果有授權失敗的日志,要關注。再就是配置好ssh免密後,需要登入一次,不然第一次要輸入 “yes”,hdfs 切換并不會自動輸入。
- 日志提示如下,該問題為機器上沒有安裝 fuser,所有 namenode 節點執行
即可yum -y install psmisc
WARN org.apache.hadoop.ha.SshFenceByTcpPort: PATH=$PATH:/sbin:/usr/sbin fuser -v -k -ntcp 9000 via ssh: bash: fuser: command not found
WARN org.apache.hadoop.ha.NodeFencer: Fencing method org.apache.hadoop.ha.SshFenceByTcpPort(null) was unsuccessful.
- 確定 hbase master 的 ha 模式是沒問題的(即關閉一台master,另一台back master可以立刻切換到master)
遷移過程
-
停止 nno1 namenode 服務與 zkfc 服務, 此時 nno2 為active,叢集正常
nno1機器執行:
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop zkfc
- 修改 hdfs 與 hbase 所有機器的 hosts hdfsNameNode1 指向到 nnn1
- 将 nnn1、nnn2 設定到所有 hdfs 的機器免密,包括 nno2;将 nno2 設定到 nnn1 免密
- 将 hadoop 的檔案 scp 到 nnn1,nnn1 上
- 配置 nnn1 的 hadoop 環境變量
- 将該機器設定為 namenode standby 執行
,提示都輸入 “yes”,變為新的standbyhdfs namenode -bootstrapStandby
- 啟動 namenode
hadoop-daemon.sh start namenode
- 啟動 zkfc
hadoop-daemon.sh start zkfc
- 此時叢集中 nnn1 成為 nno2 的 standby
- 由于 hbase 記憶體中存儲了 hdfs namenode 節點資訊。需要重新開機 hbase 叢集,讓 hbase 擷取新的 hdfs 節點資訊
- hm1 上,執行
hbase-daemon.sh restart master
- hm2 上,hm1啟動無異常,執行
hbase-daemon.sh restart master
- hmr* 上,依次執行
,注意:該重新開機為 hbase regionserver 平滑重新開機,故需要觀察 regionserver 的狀态 ok 才可以繼續下一台。graceful_stop.sh --restart --reload --debug ${regionser-num}
- nno2 停止 namenode 服務
,讓 nnn1 切換到 “active”,保證叢集正常hadoop-daemon.sh stop namenode
- nno2 停止 zkfc 服務
hadoop-daemon.sh stop zkfc
- 此時 namenode 隻有 nnn1,遷移 nno2 與 nno1 一緻即可
提示
- 遷移過程不必操作太快,實時通過背景關注叢集狀态
- 如果 hdfs ha 模式有問題,優先重新開機 namenode 恢複機器為可用模式,以防止 hbase 叢集不可用導緻的業務問題