说明
由于 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 执行
hdfs namenode -bootstrapStandby
,提示都输入 “yes”,变为新的standby - 启动 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* 上,依次执行
graceful_stop.sh --restart --reload --debug ${regionser-num}
,注意:该重启为 hbase regionserver 平滑重启,故需要观察 regionserver 的状态 ok 才可以继续下一台。
- nno2 停止 namenode 服务
hadoop-daemon.sh stop namenode
,让 nnn1 切换到 “active”,保证集群正常 - nno2 停止 zkfc 服务
hadoop-daemon.sh stop zkfc
- 此时 namenode 只有 nnn1,迁移 nno2 与 nno1 一致即可
提示
- 迁移过程不必操作太快,实时通过后台关注集群状态
- 如果 hdfs ha 模式有问题,优先重启 namenode 恢复机器为可用模式,以防止 hbase 集群不可用导致的业务问题