管理HDFS高可用性群集
手动故障切换到备用NameNode
使用Cloudera Manager手动故障转移到备用NameNode
如果您正在运行启用了HA的HDFS服务,则可以手动使活动的NameNode故障切换到备用NameNode。这对计划中的停机时间很有用 - 用于主要主机的硬件更改,配置更改或软件升级。
1.转到HDFS服务。
2.单击实例选项卡。
3.点击联合和高可用性。
4.找到要在NameNode上进行故障转移的Nameservice行。 (仅在使用HDFS联合时显示多行。)
5.选择操作>手动故障切换。 (如果未为群集启用HA,则不会显示此选项。)
6.从弹出窗口中选择应该激活的NameNode,然后单击Manual Failover。
注意:仅限高级用户:您可以设置强制故障切换复选框,以强制选定的NameNode处于活动状态,无论其状态或其他NameNode的状态如何。强制进行故障转移将首先尝试将选定的NameNode故障转移到活动模式,并将另一个NameNode故障转移到待机模式。即使选定的NameNode处于安全模式,它也会这样做。如果失败,它将继续将选定的NameNode转换为活动模式。为避免使两个NameNode处于活动状态,只有在另一个NameNode完全停止或者可以通过第一个故障转移步骤转换到待机模式时,才使用它。
7.当所有步骤完成后,点击完成。
Cloudera Manager将您选择的NameNode转换为活动的NameNode,将另一个NameNode转换为备用NameNode。 HDFS不应该有两个活动的NameNode。
使用命令行手动故障转移到备用NameNode
要在两个NameNode之间启动故障切换,请运行命令hdfs haadmin -failover。
此命令会导致从第一个提供的NameNode到第二个的故障转移。如果第一个NameNode处于Standby状态,则此命令只是将第二个NameNode转换为Active状态而不会出错。如果第一个NameNode处于Active状态,则会尝试将其正常转换到Standby状态。如果失败,将按照顺序尝试防护方法(由dfs.ha.fencing.methods配置),直到其中一个方法成功。只有在这个过程之后,第二个NameNode才会转换到活动状态。如果没有防护方法成功,则第二个NameNode不会转换为活动状态,并且会返回错误。
注意:从命令行运行hdfs haadmin -failover是否可以从命令行或使用Cloudera Manager配置HA。这意味着即使Cloudera Manager不可用,也可以手动启动故障转移。
将HA NameNode移动到新主机
使用Cloudera Manager将HA NameNode移动到新主机
最低要求的角色:群集管理员(也由完全管理员提供)
Migrate Roles向导允许您将高度可用的HDFS服务的角色从一台主机移动到另一台主机。您可以使用它来移动NameNode,JournalNode和Failover Controller角色。
要求和限制:
1名称服务联合(多个名称空间)不受支持。
2此过程需要群集停机时间,而不是关机。必须运行此列表中讨论的服务才能完成迁移。
3HDFS和依赖于它的服务的配置必须有效。
4目标主机必须进行调试并保持健康。
5NameNode必须高度可用,使用基于法定存储。
6必须启用HDFS自动故障转移,并且群集必须具有正在运行的ZooKeeper服务。
7如果集群中存在Hue服务,则其HDFS Web Interface Role属性必须引用HttpFS角色,而不引用NameNode角色。
8大多数已配置的JournalNode角色必须正在运行。
9不在源主机上的故障转移控制器角色必须正在运行。
开始之前
在运行向导之前执行以下操作:
在运行活动和备用NameNode的主机上,备份数据目录。
在运行JournalNodes的主机上,备份JournalNode编辑目录。
如果源主机运行不正常或不可靠,请停止主机。
如果CDH和HDFS元数据最近已升级,元数据升级尚未最终完成,请完成元数据升级。
运行迁移角色向导
1.如果要将NameNode移动到的主机不在群集中,请按照将群集添加到群集中的说明添加主机。
2.转到HDFS服务。
3.单击实例选项卡。
4.点击Migrate Roles按钮。
5.单击源主机文本字段并指定运行要迁移的角色的主机。在搜索字段中,可以选择输入主机名来过滤主机列表并单击搜索。
支持以下用于指定主机名模式的快捷方式:
主机名范围(不含域名部分)
Range Definition | Matching Hosts |
---|---|
10.1.1.[1-4] | 10.1.1.1, 10.1.1.2, 10.1.1.3, 10.1.1.4 |
host[1-3].company.com | host1.company.com, host2.company.com, host3.company.com |
host[07-10].company.com | host07.company.com, host08.company.com, host09.company.com, host10.company.com |
IP地址
机架名称
选择所需主机旁边的复选框。要显示的可用角色列表显示。清除您不想迁移的任何角色。在迁移NameNode时,同位置的故障转移控制器也必须迁移。
6单击“目标主机”文本字段并指定要将角色迁移到的主机。在目标主机上,指示是否删除NameNode数据目录和JournalNode编辑目录中的数据。如果您选择不删除数据并且存在此类角色数据,则迁移角色命令将无法成功完成。
7通过选择是,确认迁移过程导致服务不可用,我准备好立即重启群集复选框。
8点击继续。命令进度屏幕显示列出迁移过程中的每个步骤。
9迁移完成后,单击完成。
使用命令行将HA NameNode移动到新主机
使用以下步骤将其中一个NameNode移动到新主机。
在这个例子中,当前的NameNode被称为nn1和nn2,并且新的NameNode是nn2-alt。该示例假定nn2-alt已经是此CDH 5 HA群集的成员,配置了自动故障转移,并且除了NameNode服务本身之外,还将nn2上的JournalNode移动到nn2-alt。
该过程将NameNode和JournalNode服务从nn2移动到nn2-alt,重新配置nn1以识别JournalNode的新位置,并在新HA配置中重新启动nn1和nn2-alt。
第1步:确保nn1是活动的NameNode
确保不会移动的NameNode处于活动状态;在这个例子中,nn1必须是活动的。您可以使用NameNodes的Web UI查看哪些是活动的;请参阅启动NameNodes。
如果nn1不是活动的NameNode,请使用hdfs haadmin -failover命令启动从nn2到nn1的故障转移:
hdfs haadmin -failover nn2 nn1
第2步:在nn2上停止服务
一旦确定要移动的节点处于非活动状态,请停止该节点上的服务:在此示例中,停止nn2上的服务。停止NameNode,ZKFC守护程序(如果是自动故障转移部署)以及JournalNode(如果您正在移动它)。继续如下。
1.停止NameNode守护进程:
$ sudo服务hadoop-hdfs-namenode停止
2.如果ZKFC守护进程正在运行,请停止它:
$ sudo服务hadoop-hdfs-zkfc停止
3.停止JournalNode守护程序,如果它正在运行:
$ sudo服务hadoop-hdfs-journalnode停止
4.确保这些服务未设置为在引导时重新启动。如果您不打算再次使用nn2作为NameNode,则可能需要删除这些服务。
第3步:在nn2-alt上安装NameNode后台进程
请参阅步骤3:使用YARN安装CDH 5或步骤4:使用MRv1安装CDH 5中有关安装hadoop-hdfs-namenode的说明。
第4步:在nn2-alt上配置HA
请参阅启用HDFS HA以在core-site.xml和hdfs-site.xml中的nn2-alt上配置属性以及解释和说明。您应该复制已经在nn2的相应文件中设置的值。
如果您要将JournalNode重定位到nn2-alt,请按照以下说明安装它,但不要启动它。
如果您正在使用自动故障转移功能,请确保按照说明配置nn2-alt上的必要属性并初始化ZooKeeper中的HA状态。
注意:如果已将自动故障转移配置为故障转移方法,则无需关闭群集即可执行此操作;仅当您从手动切换到自动故障切换时才需要关闭。
第5步:将dfs.name.dir和dfs.journalnode.edits.dir目录的内容复制到nn2-alt
如果要将JournalNode从nn2移动到nn2-alt,请使用rsync或类似工具复制dfs.name.dir目录的内容和dfs.journalnode.edits.dir目录。
第6步:如果您正在移动JournalNode,请更新nn1上的dfs.namenode.shared.edits.dir
如果将一个JournalNode从nn2重定位到nn2-alt,请在nn1的hdfs-site.xml中更新dfs.namenode.shared.edits.dir以反映新的主机名。有关dfs.namenode.shared.edits.dir的更多信息,请参阅此部分。
步骤7:如果您使用自动故障转移,请在nn2-alt上安装zkfc守护程序
有关说明,请参阅部署自动故障转移(如果已配置),但不要启动守护程序。
第8步:在nn2-alt上启动服务
启动NameNode;启动ZKFC进行自动故障切换;如果你想在nn2-alt上运行JournalNode,请安装并启动它。继续如下。
1.启动JournalNode守护进程:
$ sudo service hadoop-hdfs-journalnode start
2.启动NameNode守护进程:
$ sudo service hadoop-hdfs-namenode start
3.启动ZKFC守护进程:
$ sudo service hadoop-hdfs-zkfc start
4.将这些服务设置为在引导时重启;例如在RHEL兼容系统上:
““
sudochkconfighadoop−hdfs−namenodeon
s
u
d
o
c
h
k
c
o
n
f
i
g
h
a
d
o
o
p
−
h
d
f
s
−
n
a
m
e
n
o
d
e
o
n
sudo chkconfig hadoop-hdfs-zkfc on
$ sudo chkconfig hadoop-hdfs-journalnode on
第9步:如果您要重新部署JournalNode,请故障转移到nn2-alt
hdfs haadmin -failover nn1 nn2-alt
步骤10:如果您要重新安置JournalNode,请重新启动nn1
重新启动nn1上的NameNode守护进程以强制它重新读取配置:
sudo服务hadoop−hdfs−namenode停止 s u d o 服 务 h a d o o p − h d f s − n a m e n o d e 停 止 sudo服务hadoop-hdfs-namenode start
##其他HDFS haadmin命令
在您的HA NameNode已配置并启动后,您将有权访问一些其他命令来管理您的HA HDFS集群。具体来说,您应该熟悉hdfs haadmin命令的子命令。
本页介绍一些重要子命令的高级用法。有关每个子命令的具体使用信息,您应该运行hdfs haadmin -help 。
getServiceState
getServiceState - 确定给定的NameNode是活动还是备用
连接到提供的NameNode以确定其当前状态,根据情况打印“待机”或“活动”到STDOUT。此子命令可能由cron作业或监视脚本使用,这些脚本需要根据NameNode当前处于活动状态还是处于待机状态而具有不同的行为。
checkHealth
checkHealth - 检查给定NameNode的健康状况
连接到提供的NameNode以检查其健康状况。 NameNode能够对自身执行一些诊断,包括检查内部服务是否按预期运行。如果NameNode健康,该命令将返回0,否则返回非零值。有人可能会将此命令用于监视目的。
##启用HA后使用dfsadmin命令
默认情况下,适用的dfsadmin命令选项针对活动和备用NameNode运行。要将选项限制为特定的NameNode,请使用-fs选项。例如,
要为两个NameNode打开安全模式,请运行:
hdfs dfsadmin -safemode进入
要打开单个NameNode的安全模式,请运行:
hdfs dfsadmin -fs hdfs:// : -safemode enter
“`
有关dfsadmin命令选项的完整列表,请运行:hdfs dfsadmin -help。
从NFS挂载的共享编辑目录转换为基于法定存储
使用Cloudera Manager从基于NFS的共享编辑目录转换为基于法定存储的存储
1禁用HA。
2尽管备用NameNode角色已删除,但其名称目录不会被删除。清空这些目录。
3启用基于法定存储的HA。
使用命令行从基于NFS的共享编辑目录转换为基于法定存储的存储
1禁用HA。
2使用基于Quorum的存储重新部署HA。