您的位置:首页 > Web前端 > Node.js

Ambari—HDFS配置NameNode HA高可用原理和操作步骤(一)

2018-09-06 23:25 429 查看

NameNode HA原理

在典型的HA集群中,两台独立的机器被配置为NameNode。在工作集群中,NameNode机器中的一个处于Active状态,另一个处于Standby状态。

Active NameNode负责群集中的所有客户端操作,而Standby充当从服务器。Standby机器保持足够的状态以提供快速故障切换(如果需要)。

为了让Standby节点保持其与Active节点的状态同步,两个节点都与一组名为JournalNodes(JNs)的独立守护进程进行通信。当Active节点执行任何namespace修改时,Active节点将修改记录持久地记录到这些JN中的大多数中。Standby节点从JN读取edits并持续监视JN以更改edit log。一旦Standby节点观察edits后,会将这些edits应用于其自己的namespace。当使用QJM时,JournalNodes将执行shared editlog storage。在故障切换事件中,Standby服务器确保在将自己提升为Active状态之前,已从JounalNodes中读取所有edits。(这种机制确保在故障切换完成之前namespace状态已完全同步。)

注意

HA配置中不需要Secondary NameNode,因为Standby节点还执行Secondary NameNode的任务。

为了提供快速故障切换,Standby节点还需要有关群集中blocks块位置的最新信息。为了获得有关block位置的准确信息,DataNodes配置了两个NameNode的位置,并向两个NameNode机器发送block位置信息和心跳。

HA群集的正确操作对于一次只有一个NameNode应该处于Active状态至关重要。如果不这样做,会导致namespace状态在两个NameNode计算机之间快速发生分歧,从而导致潜在的数据丢失。(这种情况被称为裂脑情景split-brain scenario。)

为了防止裂脑方案,JournalNodes一次只允许一个NameNode作为一个writer。在故障切换期间,要选择成为active状态的NameNode将接管写入JournalNodes的角色。此过程可防止另一个NameNode继续处于活动状态,从而让新的Active节点安全地继续进行故障切换。

在HA群集中,Standby NameNode还执行namespace 状态的检查点。因此,请勿在HA群集中部署Secondary NameNode,CheckpointNode或BackupNode。

注意

必须至少有三个JournalNode守护进程,因为edit log修改必须写入大多数JN。这让系统可以容忍单台机器的故障。您也可以运行三个以上的JournalNodes,但为了增加系统可以容忍的故障次数,您必须运行奇数个JN(即3,5,7等)。

请注意,在运行N个JournalNodes时,系统最多可以承受(N-1)/ 2次故障并继续正常运行。

建议部署:

服务

组件

管理节点 MN

数据节点 DN

 

 

MN

MN

DN

DN

DN

 

           

HDFS

NameNode

Y

Y

 

 

 

 

ZKFailoverController

Y

Y

 

 

 

 

DataNode

 

 

Y

Y

Y

 

JournalNode

 

 

Y

Y

Y

ZKFailoverController(ZKFC)是一个ZooKeeper客户端,用于监视和管理NameNode的状态。运行NameNode服务的每台机器也运行ZKFC。ZKFC负责:

  • 健康监控: ZKFC定期使用健康检查命令对其本地NameNode进行ping操作。

  • ZooKeeper会话管理:当本地NameNode健康时,ZKFC在ZooKeeper中保持会话打开状态。如果本地NameNode处于active状态,则它还包含一个特殊的“lock”znode。该锁使用ZooKeeper对“ephemeral”节点的支持; 如果会话过期,锁定节点将被自动删除。

  • 基于ZooKeeper的选举:如果本地NameNode健康并且其他节点当前没有锁znode,ZKFC将尝试获取该锁。如果ZKFC成功,那么它“赢得选举”并将负责运行故障切换以使其本地NameNode处于 active状态。故障切换过程:首先,必要时先隔离前一个active,然后本地NameNode转换为active状态。

 

NameNode HA部署

 

1.1 先决条件

(1)验证群集中至少有三台主机,并且至少运行三台Apache ZooKeeper服务器。

(2)验证Hadoop分布式文件系统(HDFS)和ZooKeeper服务未处于维护模式。

如果HDFS或ZooKeeper服务处于维护模式,则NameNode HA向导将无法成功完成。

注意:HA不能接受包含下划线(_)的HDFS集群名称。

 

个人先停用HBase再继续后面操作

1.2 操作步骤

(1)在Web主界面中,选择服务> HDFS。

(2)单击服务操作,然后单击启用NameNode HA。

(3)Enable HA向导启动。该向导介绍了设置NameNode高可用性所需的一系列自动和手动步骤。

(4)在“Get Started”页面上,输入一个名称Nameservice ID(自己命名,如:mycluster),然后单击 Next。

 

HA设置完成后,您使用此Nameservice ID而不是NameNode FQDN。

(5)在“ Select Hosts”页面上,选择其他NameNode和JournalNodes的主机,然后单击“ Next”,JournalNodes数量一般为奇数个,建议配置在DataNode节点上。

 

(6)在Review页面上,确认您的主机选择并单击Next:

 

(7)按照所需手动步骤的说明:在NameNode页面上创建检查点,然后单击Next

 

您必须登录到当前的 NameNode主机,然后运行命令将NameNode置于安全模式并创建检查点。

(8)在“ Configure Components”页面上,监视配置进度条,然后单击Next:

 

(9)按照所需手动步骤的说明:初始化JournalNodes页面,然后单击下一步:

 

(10)按照所需手动步骤的说明:初始化JournalNodes页面,然后单击Next:

 

您必须登录到当前的 NameNode主机才能运行该命令来初始化JournalNodes。

(11)当Ambari检测到成功并且窗口底部的消息变为时 JournalNodes initialized,单击Next

(12)在“ Start Components”页面上,将进度条作为ZooKeeper服务器和NameNode启动进行监视; 然后单击Next:

 

(13)在所需的手动步骤上:初始化NameNode HA元数据 页面:使用页面上的说明完成每个步骤,然后单击 Next。

 

对于这一步,您必须登录到当前的 NameNode和附加的 NameNode。确保您已登录到每个命令的正确主机。完成每个命令后,单击OK确认。

(14)在Finalize HA Setup页面上,随着向导完成HA设置,监视进度条,然后单击Done 以完成向导。

 

Web UI重新加载后,您可能会看到一些警报通知。等待几分钟,直到所有服务重新启动。

(15)必要时使用Web重新启动任何组件。

(16)如果您使用的是Hive,则必须手动将Hive Metastore FS根目录更改为指向Nameservice URI而不是NameNode URI。您在“Get Started”步骤中创建了Nameservice ID。

步骤:

a、在安装Hive Metastore的主机上查找当前FS根目录:

hive --config /etc/hive/conf/conf.server --service metatool -listFSRoot

输出应该看起来类似于

Listing FS Roots... hdfs://<namenode-host>/apps/hive/warehouse

b、更改FS根目录

$ hive --config /etc/hive/conf/conf.server --service metatool -updateLocation <new-location><old-location>

例如,如果您的Nameservice ID是mycluster,则输入:

$ hive --config /etc/hive/conf/conf.server --service metatool -updateLocation hdfs://mycluster/apps/hive/warehouse hdfs://132.bd:8020/apps/hive/warehouse

输出看起来类似于:

Successfully updated the following locations...Updated X records in SDS table

(17)调整或检查下您的环境ZooKeeper故障切换控制器重试设置。

a、浏览:服务> HDFS>配置>高级core-site。

b、设置的参数:

ha.failover-controller.active-standby-elector.zk.op.retries=120

 

注:如果因安装失败问题,想删除界面上额外的一个NameNode,只能通过Restful接口删除,举例:

在Ambari Server主机上运行命令:

curl -u <AMBARI_USER>:<AMBARI_PW> -H "X-Requested-By: ambari" -i -X GET <AMBARI_PROTO>://localhost:<AMBARI_PORT>/api/v1/clusters/<CLUSTER_NAME>/host_components?HostRoles/component_name=NAMENODE

显示包含两个NameNode,删除其中一个:

curl -u <AMBARI_USER>:<AMBARI_PW> -H "X-Requested-By: ambari" -i -X DELETE <AMBARI_PROTO>://localhost:<AMBARI_PORT>/api/v1/clusters/<CLUSTER_NAME>/hosts/<ADDITIONAL_NAMENODE_HOSTNAME>/host_components/NAMENODE

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: