环境信息
- 操作系统系统:Centos7
- JDK:1.7
- CDH 版本:5.8.4
利用Cloudera Manager 迁移zookeeper
- 进入zookeeper instance界面
- 停止一台老的zookeeper服务
- 确保zookeeper服务成功选举出新的leader节点(可通过命令
echo "stat" | nc nfjd-hadoop-test01 2181
查看每个zookeeper节点状态) - 从zookeeper instance界面删除老的zookeeper节点
- 添加新的zookeeper节点
- 进入新的zookeeper节点详细页面,启动zookeeper服务(zookeeper instance界面无法拉起服务,报错信息:
Starting these new ZooKeeper Servers may cause the existing ZooKeeper Datastore to be lost. Try again after restarting any existing ZooKeeper Servers with outdated configurations. If you do not want to preserve the existing Datastore, you can start each ZooKeeper Server from its respective Status page.
) - 确保zookeeper状态页面为1个leader节点其他全为Follower
- 依次重启其他过期配置zookeeper节点
- 重启其他过期配置服务,例:hdfs,yarn,hbase等
- 重新部署客户端配置文件
- 在hdfs服务中执行Failover Controller手动切换一次NameNode主备
Go to the HDFS service -> Click the Instances tab -> Federation and High Availability -> Actions -> Manual Failover
注:每次迁移一台机器,迁移过程中保证一台Leader,其他全是Follower。测试环境验证可以先迁移再重启其他依赖服务。
利用Cloudera Manager进行HDFS核心进程迁移 (NameNode,Failover Controller,JournalNode)
准备阶段
- HDFS 已启用 HA 并使用 quorum-based storage
- 未启用 Federation
- automatic failover 已启用,且 ZooKeeper 服务正常
- 目标主机在集群中
- Hue 服务的 HDFS Web Interface Role 属性设置为 HttpFS
- 备份所有 NameNode 和 JournalNode 上的数据目录(
dfs.namenode.name.dir
、dfs.journalnode.edits.dir
)[可让namenode进入安全模式,做一次check point再备份最新fsimage文件即可] - Finalize the metadata upgrade (NameNode)
- 迁移namenode主机acl用户
迁移过程中:
- 确保多数 JournalNode 正常运行
- 一次只迁移一台主机上的服务
迁移操作:
- HDFS --> Instances --> Migrate Roles
- 选择待迁移的主机,然后勾选 NameNode、JournalNode、Failover Controller
- 选择目标主机,并勾选 Delete existing role data on the destination host
- 勾选 Yes, I am ready to restart the cluster now
问题汇总
迁移问题
Saving namespace of NameNode on host nfjd-hadoop02-node56.jpushoa.com.
Command aborted because of exception: Command timed-out after 90 seconds
# 执行check point超时,正常情况下无法在90s内完成check point,但是CM这步写死了只能在90秒完成,否则迁移终止(目前结论)
解决步骤
根据日志信息找到执行的hdfs.sh脚本所在位置(主机需正确)
-bash-4.1$ locate hdfs.sh
/opt/cloudera/parcels/CDH-5.6.0-1.cdh5.6.0.p0.45/lib/hadoop/libexec/init-hdfs.sh
/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/hadoop/libexec/init-hdfs.sh
/opt/cloudera/parcels/CDH-5.7.3-1.cdh5.7.3.p0.5/lib/hadoop/libexec/init-hdfs.sh
/opt/cloudera/parcels/CDH-5.7.5-1.cdh5.7.5.p0.3/lib/hadoop/libexec/init-hdfs.sh
/opt/cloudera/parcels/CDH-5.8.4-1.cdh5.8.4.p0.5/lib/hadoop/libexec/init-hdfs.sh
/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hadoop/libexec/init-hdfs.sh
/usr/lib64/cmf/service/dr/snapshot-hdfs.sh
/usr/lib64/cmf/service/hdfs/hdfs.sh <--这一个
debug脚本,未发现可调超时参数(页面也无相关参数)
sh -x /usr/lib64/cmf/service/hdfs/hdfs.sh "dfsadmin" "-fs" "hdfs://nfjd-hadoop02-node27.jpushoa.com:8020" "-saveNamespace"
尝试修改脚本(务必确保最近一次check point完成,检查fsimage文件是否生成)
$ vi /usr/lib64/cmf/service/hdfs/hdfs.sh
# 在行'#!/bin/bash'后添加以下代码,执行saveNamespace命令直接退出
if [ ${4} == "-saveNamespace" ];then
exit
fi
重新执行migrate操作
后续操作
HIVE 服务
- 停止 Hive 服务
- Update Hive Metastore NameNodes
- 启动 Hive 服务
迁移 HttpFS
- 在新主机上添加一个 HttpFS
- Hue 服务的 HDFS Web Interface Role 属性设置为新的 HttpFS
- 更新其他依赖于 HttpFS 的配置
- 删除旧主机上的 HttpFS 服务
迁移 NFS Gateway
- 在新主机上添加一个 NFS Gateway
- 更新依赖于 NFS Gateway 的配置
- 删除旧主机上的 NFS Gateway 服务