温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


Fayson的github:

​https://github.com/fayson/cdhproject​


提示:代码块部分可以左右滑动查看噢


1.文档编写目的



对于未启用HA的NameNode集群,fsimage和edits将存储在活动的NameNode和SecondNameNode上,建议定期备份fsimage和edits。


对于启用HA的NameNode集群,由于fsimage和edits通常存储在两个NameNode服务器上,并且edits也会存储在Journal Quorum(通常为3个服务器),因此一般建议只关注定期备份fsimage。


本篇文章Fayson主要介绍如何备份NameNode Metadata数据以及恢复。


  • 本次Fayson的测试环境为

1.CM和CDH版本为5.15

2.Redhat7.4


2.NameNode Metadata备份



1.备份fsimage数据,(该操作适用HA和非HA的NameNode),使用如下命令进行备份:


[root@cdh01 disk1]# mkdir nn_metadata_back
[root@cdh01 disk1]# hdfs dfsadmin -fetchImage nn_metadata_back/
[root@cdh01 disk1]# ll nn_metadata_back

(可左右滑动)


NameNode Metadata备份和恢复最佳实践_服务器


注意:不要直接使用http://<nn_hosts>:50070/imagetransfer?getimage=1&txid=latest这是一个内部的API接口,如果接口改变需要做相应的修改,并且只能针对活动的NameNode使用。


2.备份edits数据(该操作适用非HA的NameNode),使用如下命令备份:


[root@cdh01 current]# sudo -u hdfs hdfs dfsadmin -rollEdits

(可左右滑动)


NameNode Metadata备份和恢复最佳实践_服务器_02


注意:需要使用hdfs用户执行,该操作将结束当前edits日志并启动一个新的。


3.拷贝edits日志到备份目录(该操作适用非HA的NameNode),使用如下命令进行备份


在CM上找到NameNode的dfs.name.dir配置目录


NameNode Metadata备份和恢复最佳实践_hdfs_03


将/data/disk1/dfs/nn/current目录下的edits_0*开头的文件拷贝至备份目录


[root@cdh01 disk1]# mkdir nn_metadata_back/edits
[root@cdh01 disk1]# cp /data/disk1/dfs/nn/current/edits_0* nn_metadata_back/edits/
[root@cdh01 disk1]#

(可左右滑动)


NameNode Metadata备份和恢复最佳实践_hdfs_04


4.备份VERSION文件(该操作适用于HA和非HA的NameNode),这个文件不需要定期备份,因为它不会更改,但该文件非常重要,因为文件中包含了clusterID一级其它详细信息


[root@cdh01 disk1]# cp /data/disk1/dfs/nn/current/VERSION nn_metadata_back/
[root@cdh01 disk1]# ll nn_metadata_back/

(可左右滑动)


NameNode Metadata备份和恢复最佳实践_hdfs_05


3.NameNode Metadata恢复



在前面我们备份的NameNode Metadata数据,如果我们的NameNode服务器突然大宕机无法恢复,这个时候需要用一个新的服务器来还原NameNode服务,如下是常规的还原过程:


在Fayson的测试环境下,cdh01.fayson.com为NameNode节点,用来模拟设该节点故障,需要通过备份数据来恢复NameNode服务。


1.通过CM将新服务器添加到集群中(将之前故障节点从集群从删除,添加hostname和IP与故障节点一致的服务器到集群)


2.通过CM为新加的节点添加NameNode角色


3.检查NameNode的dfs.name.dir配置的目录在服务器上是否存在,如果不存在则需要手动的创建并确保目录属主为hdfs:hdfs,且父目录权限为700


[root@cdh01 ~]# mkdir -p /data/disk1/dfs/nn/
[root@cdh01 ~]# chown hdfs:hadoop /data/disk1/dfs/nn
[root@cdh01 ~]# chmod 700 /data/disk1/dfs/nn

(可左右滑动)


NameNode Metadata备份和恢复最佳实践_数据_06


4.将VERSION和最后备份的fsimage文件复制到/data/disk1/dfs/nn/current目录下


[root@cdh01 dfs]# mkdir -p /data/disk1/dfs/nn/current
[root@cdh01 dfs]# cp /data/disk1/nn_metadata_back/VERSION /data/disk1/dfs/nn/current/
[root@cdh01 dfs]# cp /data/disk1/nn_metadata_back/fsimage_0000000000004483704 /data/disk1/dfs/nn/current/
[root@cdh01 dfs]# cp /data/disk1/nn_metadata_back/edits/* /data/disk1/dfs/nn/current/
[root@cdh01 dfs]# chown -R hdfs:hdfs /data/disk1/dfs/nn/current/

(可左右滑动)


NameNode Metadata备份和恢复最佳实践_数据_07


注意:因为Fayson的集群NameNode为启用HA,所以将备份的edits数据也拷贝到/data/disk1/dfs/nn/current目录下,如果你的集群启用了HA则可以不用考虑edits数据的恢复。


5.为fsimage文件创建md5校验


[root@cdh01 dfs]# cd nn/current/
[root@cdh01 current]# md5sum fsimage_0000000000004483704 > fsimage_0000000000004483704.md5
[root@cdh01 current]# ll fsimage_0000000000004483704*

(可左右滑动)


NameNode Metadata备份和恢复最佳实践_服务器_08


6.完成以上步骤后,启动NameNode服务


NameNode Metadata备份和恢复最佳实践_数据_09


查看50070端口,HDFS数据已恢复


NameNode Metadata备份和恢复最佳实践_hdfs_10


注意:上述的恢复的过程,替换的主机名与IP和之前故障的服务器一致,如果主机名与新添加的服务器不同,在HA的集群中还需要重新初始化Zookeeper znode以进行故障自动转移,Fayson前面的文章《​​如何修改启用了高可用HDFS的NameService ID​​》有介绍


4.总结



1.NameNode Metadata的备份要考虑是否启用HA,如果没有启用HA的NameNode则需要额外的备份edits,启用HA的NameNode则可以不用备份。


2.恢复NameNode Metadata数据到新的服务器上,需要注意新节点与故障节点的hostname是否一致,如果不一致在HA的NameNode集群中需要额外的操作重新初始化Zookeeper znode以进行故障自动转移。


3.恢复数据时需要注意数据目录及文件的权限和属主问题,否则可能会导致NameNode服务不能正常启动。



提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。



推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

NameNode Metadata备份和恢复最佳实践_服务器_11

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操