大数据谢列3:Hdfs的HA实现 (3)

JNs一次只允许一个NameNode写入编辑日志;
但是,以前活跃的NameNode仍然可能向客户端提供过时的读请求,
因此可以设置一个SSH 规避命令来杀死NameNode进程。

对于使用NFS文件的共享edit log,因为很难控制一次只允许一个NameNode写入,
需要更强有力地规避方法,一般可以选择如下方法:

撤销NameNode对共享存储目录的访问(通常使用特定于供应商的NFS命令)

通过远程管理命屏蔽相应网络端口(port)

做绝一点可以通过一个叫做“一枪爆头”方式进行规避(STONITH,short the other node in the head),通过一个特定的供电单元对相应的NameNode进行断电操作。

这就是推荐使用QJM的主要原因。

有了上述只是储备,我们很容易就可以把这个架构图画出来,以QJM为例

大数据谢列3:Hdfs的HA实现

那么转移过程大致如下:

大数据谢列3:Hdfs的HA实现

客户端故障转移

对于客户端而言,我们要让用户对于故障转移是无感的。
可以通过配置文件实现一个故障转移

在配置文件中通过配置几个参数实现故障转移:

dfs.nameservices:Hdfs逻辑名称

<property> <name>dfs.nameservices</name> <value>mycluster</value> </property>

dfs.ha.NameNodes.[nameservice ID]:nameservice中每个NameNode的唯一标识符

<property> <name>dfs.ha.``NameNode``s.mycluster</name> <value>nn1,nn2, nn3</value> </property>

dfs.NameNode.rpc-address.[nameservice ID].[name node ID]:每个NameNode监听的完全限定RPC地址

<property> <name>dfs.``NameNode``.rpc-address.mycluster.nn1</name> <value>machine1.example.com:8020</value> </property> <property> <name>dfs.``NameNode``.rpc-address.mycluster.nn2</name> <value>machine2.example.com:8020</value> </property> <property> <name>dfs.``NameNode``.rpc-address.mycluster.nn3</name> <value>machine3.example.com:8020</value> </property>

更多的配置可以查看
NameNode HA With QJM
NameNode HA With NFS

关于HA暂时介绍到这里,后续有空再进行详细的介绍。
之后会写一下关于Yarn的文章,感兴趣可以关注【兔八哥杂谈】

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssyys.html