namenode服务迁移
交代一下背景:
1. 由于机器过保,需要进行机器的置换,所以就有了这么个事情;
2. namenode是普通的ha模式,没有配置federation;
3. 需要尽最大的可能不影响生产环境中Hadoop集群的服务
4. 我们的集群都是通过hostname进行的配置,不是通过具体的ip进行的配置。推荐使用hostname进行配置
下面开始记录一下本次的工作: 这里不写出具体的ip和hostname,假设原来的namenode服务在ip为a,hostname为hosta和ip为b,hostname为hostb的两台机器上上,其中a机器过保, 新机器的ip为c,需要将a上面的namenode服务迁移到c上面;
步骤如下:
1. 停止a机器上的namenode和zkfc服务,此时集群还是可以正常工作的
2. 停止了a机器上的namenode服务后, 此时a机器就不在集群范围了。接着修改集群中每台机器的hosts文件,将原来的 a和hosta的映射去掉,改成c和hosta的映射。修改完后,同步一份hosts文件到c机器。
3. 配置b机器c机器的免密码登录,因为到时候namenode的ha切要用到
4. 拷贝a机器上的Hadoop安装目录到c机器对应的目录下,根据配置文件创建对应的目录和修改目录的权限,并且修改环境变量,弄成和a上面的一样即可。
5. 同步namenode的fsimage,在c机器执行: hdfs namenode -bootstrapStandby
6. 启动c机器上的namenode等服务(还有zkfc等服务)
7. 重启b机器上的zkfc服务
以上,namenode服务迁移完毕,不会影响生产环境的正常工作。无需停止其它节点的服务.
下面对几个注意事项进行说明:
1. 在操作的过程中要注意目录的权限,操作集群一定要使用对应的账号。这里都是统一用的hadoop账号
2. 需要重启另外一台机器上的zkfc服务, 因为修改了fencing的私钥,不重启zkfc会导致namenode的ha不能正常切换
3. 这里进行namenode的服务迁移却没有停集群的原因是我们的集群是用hostname进行配置的,即使ip变了,只要hostname没变是不会造成影响的,这也是推荐使用hostname进行集群配置的原因, 因为像这种迁移的操作会方便很多。如果是配置的ip,上面的操作就行不通了,必须停止集群。
4. 关于zkfc是否需要重新格式化的问题:答案是不需要的,同样是因为通过hostname进行配置的,所以不需要。因为底层都是通过hostname去找对应的机器,它能够自动的去找到对应的机器。