CDH HDFS HA 支持

https://blueprints.launchpad.net/sahara/+spec/cdh-ha-support

此蓝图旨在为 Cloudra 插件实现 HDFS 高可用性 (HA)。

问题描述

目前 Cloudera 插件不支持服务的 HA。我们计划将 HDFS HA 作为第一步实现。Yarn 和其他服务的 HA 将在后续步骤中实现。

提议的变更

HDFS HA 的实现将通过 CM API enable_nn_ha() 来完成。此 API 将通过提供一些信息增强来帮助我们启用 HDFS HA。

CDH 5 仅支持基于 Quorum 的存储作为唯一的 HA 实现,因此我们只会实现此方案。为此,我们需要添加一个备用 NameNode 和若干个 JournalNode。JournalNode 的数量应该是奇数,并且至少为 3。当 HDFS HA 启用时,SecondaryNameNode 将不再使用。因此,我们可以将用于 SecondaryNameNode 的节点重用于备用 NameNode。

HDFS HA 有一些硬件约束(请参阅参考链接)。但是,由于 Openstack 中的所有资源都是虚拟的,我们只需要确保 NameNode 和备用 NameNode 位于不同的物理主机上即可。

总而言之,我们将按以下方式实现 HDFS

  • 添加一个角色 JournalNode。

  • 如果用户(集群管理员)选择了 JournalNode,则将启用 HA。

  • 如果启用了 HA,我们将验证 JournalNode 的数量是否满足要求。

  • JournalNode 角色在集群创建期间不会真正创建。实际上,它们将用作 CM API enable_nn_ha() 的参数。

  • 如果启用了 HA,我们将使用 SecondaryNameNode 作为备用 NameNode。

  • 如果启用了 HA,我们将设置反亲和性,以确保 NameNode 和 SecondaryNameNode 不位于同一物理主机上。

  • 如果启用了 HA,则集群中需要 Zookeeper 服务。

  • 集群启动后,我们将调用 enable_nn_ha 来启用 HDFS HA。

  • 如果启用了 HA,在 Oozie workflow xml 文件中,我们将提供 nameservice 名称而不是 NameNode 名称,在 get_name_node_uri 方法中。以便集群可以自行确定哪个 NameNode 是活动的。

替代方案

无。

数据模型影响

无。

REST API 影响

无。

其他最终用户影响

无。

部署者影响

无。

开发者影响

无。

Sahara-image-elements impact

无。

Sahara-dashboard / Horizon 影响

无。

实现

负责人

主要负责人

Ken Chen

工作项

更改将仅在 sahara/plugins/cdh 目录中进行。目前,我们将仅基于 CDH 5.4.0 进行此操作。CDH 5.0.0 和 CDH 5.3.0 插件将不受支持。更改在“Proposed change”部分中描述。

依赖项

无。

测试

我们将仅进行基本检查:创建一个具有 HDFS HA 的 Cloudera 集群,并查看它是否处于活动状态。

文档影响

需要更新文档,其中包含有关启用 CDH HDFS HA 的信息。

参考资料

  • NameNode HA with QJM <http://www.edureka.co/blog/namenode-high-availability-with-quorum-journal-manager-qjm/>

  • Introduction to HDFS HA <http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_hag_hdfs_ha_intro.html>

  • Enable HDFS HA Using Cloudera Manager <http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_hag_hdfs_ha_enabling.html#cmug_topic_5_12_unique_1>

  • Configuring Hardware for HDFS HA <http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_hag_hdfs_ha_hardware_config.html>