我有一个namenode hdfs集群,其中包含多个datanode,这些datanode存储了许多tb的数据。我想在该集群上启用高可用性并添加另一个namenode。实现这一目标的最有效和最不容易出错的方法是什么?理想情况下,这将工作没有任何停机时间或简单的重新启动。
想到的两个选项是:
编辑namenode的配置以促进ha特性并重新启动它。然后添加第二个namenode,重新配置并重新启动datanodes,以便它们知道集群现在是ha。
在数据方面创建一个相同的集群,但是有两个namenodes。然后将数据从旧的datanodes迁移到新的datanodes,最后调整所有hdfs客户机的指针。
第一种方法似乎更简单,但需要一些停机时间,我不确定这是否可行。第二种方法比较干净,但是数据迁移和指针调整存在潜在的问题。
1条答案
按热度按时间5hcedyr01#
如果没有任何停机时间,您将无法在适当的位置执行此操作;非ha设置正是如此,不是高度可用的,因此任何代码/配置更改都需要停机。
要在原地执行此操作时产生最少的停机时间,您可能需要:
为ha设置设置配置。这包括诸如共享编辑目录或日志节点之类的内容—请参阅https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfshighavailabilitywithqjm.html 或者https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfshighavailabilitywithnfs.html.
使用
hdfs dfsadmin
命令。这将确保namenode能够快速重启(启动时,nn将读取最新的fsimage,然后应用在该fsimage之后创建的editlog中的所有编辑)。重新启动当前namenode并将其置于活动模式。
在待机状态下启动新的namenode。
更新datanodes上的配置并重新启动以应用它们。
更新其他客户端上的配置并重新启动以应用。
在这一点上,所有的事情都将是ha感知的,唯一发生的停机时间是活动nn的快速重启-相当于在非ha设置中的任何代码/配置更改期间所经历的情况。
第二种方法应该是可行的,但是请记住,您需要两倍的硬件,并且在迁移期间维护两个集群之间的一致性可能很困难。