一、前言
本文续上篇 http://fire7758.blog.51cto.com/993821/1373790
HDFS 的单点故障问题是因为仅有一个NameNode。本文以共享 MetaData及SecondaryNamenode的2种方法讲述如何恢复备机为NameNode 进行工作。
共享 MetaData的方法,即通过共享FsImage 和EditLog,这种方法解决了NameNode 的单点失效问题,当一个NameNode 出错以后,另外一个NameNode 可以接替原来的NameNode 继续工作。由于,两者是共享FsImage 和EditLog 的,所以两者保存的内容一致,不存在数据同步的问题。但是,这种方法又带来了新的问题,由于两个NameNode 共享相同的MetaData,而MetaData 服务器带来了新的单点失效问题,当其失效的时候,尽管两个NameNode 都正常,但是系统且不能继续运行。
SecondaryNamenode的方法,是通过一段时间(默认1小时,或超过指定大小时)对FsImage 和EditLog进行合并,生成镜像文件。所以这种备份方式可能会丢失数据(最后一次checkpoint到故障点间的数据)。
二、故障切换操作:
本文以namenode进程意外终止为例
1)共享 MetaData恢复(即nfs备份恢复)
a)停止原主机服务
在mt-hadoop-name1上操作:
使用hadoop用户操作:
停止JobTracker服务
hadoop-daemon.sh stop jobtracker
停止vip
sudo ifconfig eth0:0 down
b)备机启动服务,恢复为主机
在mt-hadoop-name2上配置并启动namenode:
使用hadoop用户操作:
备份name目录
mv /srv/hadoop/name /srv/hadoop/name_`date +%Y%m%d`
创建name目录
mkdir /srv/hadoop/name
从nfs备份中恢复namenode元数据
cp -r /srv/hadoop/remote/name/* /srv/hadoop/name
启动新namenode
启动vip
sudo ifconfig eth0:0 172.26.10.140 netmask 255.255.255.0
启动新namenode
hadoop-daemon.sh start namenode
hadoop-daemon.sh start jobtracker
2)checkpoint恢复
a)停止原主机服务
在mt-hadoop-name1上操作:
使用hadoop用户操作:
停止JobTracker服务
hadoop-daemon.sh stop jobtracker
停止vip
sudo ifconfig eth0:0 down
b)通过checkpoint恢复元数据
在mt-hadoop-name2上配置并启动namenode。
使用hadoop用户操作:
备份本地name目录
mv /srv/hadoop/name /srv/hadoop/name_`date +%Y%m%d`
创建本地name目录
mkdir /srv/hadoop/name
备份nfs上name目录
mv /srv/hadoop/remote/name /srv/hadoop/remote/name_`date +%Y%m%d`
创建nfs上name目录
mkdir /srv/hadoop/remote/name
停止secondarynamenode
hadoop-daemon stop secondarynamenode
启动vip (因checkpoint恢复时会启动namenode,这里namenode监听在vip上)
sudo ifconfig eth0:0 172.26.10.140 netmask 255.255.255.0
从checkpoint备份中恢复namenode元数据
hadoop namenode -importCheckpoint
停止namenode
使用Ctrl+C结束
正式启动新namenode 这里原来的secondarynamenode仍在这里运行
hadoop-daemon.sh start namenode
hadoop-daemon.sh start jobtracker
hadoop-daemon.sh start secondarynamenode
三、验证
查看hdfs内容
hadoop fs -ls /
查看datanode报告
hadoop dfsadmin -report
hdfs文件系统检查
hadoop fsck /