1. 介绍

Apache Atlas使用各种系统并与之交互,为数据管理员提供元数据管理和数据血缘信息。通过适当地选择和配置这些依赖关系,可以使用Atlas实现高度的服务可用性。本文档介绍了Atlas中的高可用性支持状态,包括其功能和当前限制,以及实现此高级别可用性所需的配置。

在高级架构章节(请参阅我翻译的《Atlas开发指南(中文版)》)概述了构成Atlas的各种组件。下面提到的各种组件的选项从上面的页面中获取上下文,在继续阅读本页之前值得一看。

2. Atlas Web Service

目前,Atlas Web Service有一个限制,即它一次只能有一个活动实例。在早期版本的Atlas中,可以配置备份实例并使其可用。但是,需要手动故障转移才能使此备份实例处于活动状态。

从此版本开始,Atlas将通过自动故障转移支持活动(active)/被动(passive)配置中的多个Atlas Web服务实例。这意味着用户可以同时在不同的物理主机上部署和启动Atlas Web Service的多个实例。其中一个实例将自动选为“active”实例以服务用户请求。其他人将自动被视为“passive”。如果“active”实例因故意停止或由于意外故障而变得不可用,则其他实例之一将自动被选为“active”实例并开始为用户请求提供服务。

“active”实例是唯一可以正确响应用户请求的实例。它可以创建,删除,修改或响应元数据对象上的查询。 “passive”实例将接受用户请求,但会使用HTTP重定向将其重定向到当前已知的“active”实例。具体而言,passive实例本身不会响应对元数据对象的任何查询。但是,所有实例(active和passive)都将响应返回有关该实例的信息的管理请求。

在高可用性模式下配置时,用户可以获得以下操作收益:

  • 维护间隔期间不间断的服务:如果需要关闭Atlas Web Service的活动实例以进行维护,则另一个实例将自动变为活动状态并可以为请求提供服务。
  • 意外故障时的不间断服务:如果Atlas Web Service的活动实例因软件或硬件错误而失败,则另一个实例将自动变为活动状态并可以为请求提供服务。

在以下小节中,我们将介绍为Atlas Web Service设置高可用性所需的步骤。我们还描述了如何设计部署和客户端以利用此功能。最后,我们描述了底层实现的一些细节。

2.1 在Atlas中设置高可用性功能

设置高可用性功能必须满足以下先决条件。

  • 确保在一组计算机上安装Apache Zookeeper(建议至少使用3台服务器进行生产)。
  • 选择2个或更多物理计算机以运行Atlas Web Service实例。这些机器定义了我们称之为Atlas的“服务器集合”。

要在Atlas中设置高可用性,必须在atlas-application.properties文件中定义一些配置选项。虽然在配置页面中定义了完整的配置项列表,但本节列出了一些主要选项。

  • 高可用性是Atlas中的可选功能。因此,必须通过将配置选项atlas.server.ha.enabled设置为true来启用它。
  • 接下来,定义标识符列表,每个物理机一个用于Atlas Web Service实例。这些标识符可以是简单的字符串,如id1,id2等。它们应该是唯一的,不应包含逗号。
  • 将这些标识符的逗号分隔列表定义为选项atlas.server.ids的值。
  • 对于每台物理计算机,将IP地址/主机名和端口列为配置atlas.server.address.id的值,其中id表示此物理计算机的标识符字符串。
    • 例如,如果您选择了2台主机名为host1.company.comhost2.company.com的计算机,则可以按如下方式定义配置选项:
atlas.server.ids=id1,id2
atlas.server.address.id1=host1.company.com:21000
atlas.server.address.id2=host2.company.com:21000
  • 定义将由Atlas高可用性功能使用的Zookeeper集群。
 atlas.server.ha.zookeeper.connect=zk1.company.com:2181,zk2.company.com:2181,zk3.company.com:2181
  • 您可以查看为高可用性功能定义的其他配置选项,并根据需要在atlas-application.properties文件中进行设置。
  • 对于生产环境,还必须在高可用性模式下设置Atlas所依赖的组件。这将在以下部分中详细介绍。按照这些说明设置和配置它们。
  • 在所选物理计算机上安装Atlas软件。
  • 将使用上述步骤创建的atlas-application.properties文件复制到所有计算机的配置目录中。
  • 启动从属组件。
  • 启动Atlas Web Service的每个实例。

要验证高可用性是否正常,请在安装了Atlas Web Service的每个实例上运行以下脚本。

$ATLAS_HOME/bin/atlas_admin.py -status

此脚本可以打印以下值之一作为响应:

  • ACTIVE:此实例处于活动状态,可以响应用户请求。
  • PASSIVE:这个实例是被动的。它会将收到的任何用户请求重定向到当前活动实例。
  • BECOMING_ACTIVE:如果服务器正在转换为ACTIVE实例,则会打印出来。服务器无法在此状态下为任何元数据用户请求提供服务。
  • BECOMING_PASSIVE:如果服务器正在转换为PASSIVE实例,则会打印出来。服务器无法在此状态下为任何元数据用户请求提供服务。

在正常操作情况下,这些实例中只有一个应该打印值ACTIVE作为对脚本的响应,而其他实例将打印PASSIVE。

2.2 配置客户端以使用高可用性功能

可以通过两种方式访问​​Atlas Web Service:

  • 使用Atlas Web UI:这是一个基于浏览器的客户端,可用于查询存储在Atlas中的元数据。
  • 使用Atlas REST API:由于Atlas公开了RESTful API,因此可以使用任何标准REST客户端,包括其他应用程序中的库。实际上,Atlas附带了一个名为AtlasClient的客户端,可以作为构建REST客户端访问的示例。

为了利用客户端中的高可用性功能,有两种选择。

(1)使用中间代理

实现对Atlas的高可用性访问的最简单的解决方案是安装和配置一些中间代理,该代理具有基于状态透明地切换服务的能力。一个这样的代理解决方案是HAProxy

以下是可以使用的示例HAProxy配置。请注意,此提供仅用于说明,而不是推荐的生产配置。请参阅HAProxy文档以获取适当的说明。

frontend atlas_fe
bind *:41000
default_backend atlas_be backend atlas_be
mode http
option httpchk get /api/atlas/admin/status
http-check expect string ACTIVE
balance roundrobin
server host1_21000 host1:21000 check
server host2_21000 host2:21000 check backup listen atlas
bind localhost:42000

上面的配置绑定HAProxy以监听端口41000以获取传入的客户端连接。然后,它会根据HTTP状态检查将连接路由到主机host1或host2。状态检查是使用REST URL /api/atlas/admin/status上的HTTP GET完成的,仅当HTTP响应包含字符串ACTIVE时才被视为成功。

(2)使用活动实例自动检测

如果不想设置和管理单独的代理,则使用高可用性功能的另一个选项,是构建能够检测状态和重试操作的客户端应用程序。在这样的设置中,可以使用形成整体的所有Atlas Web Service实例的URL启动客户端应用程序。然后,客户端应在每个上面调用REST URL/api/atlas/admin/status以确定哪个是活动实例。 Active实例的响应形式为{Status:ACTIVE}。此外,当客户端在操作过程中面临任何异常时,它应该再次确定哪些剩余URL处于活动状态并重试该操作。

Atlas附带的AtlasClient类可用作示例客户端库,该库实现处理集合并选择正确的Active Server实例的逻辑。

Atlas中的实用程序(如quick_start.pyimport-hive.sh)可以配置为与多个服务器URL一起运行。在此模式下启动时,AtlasClient会自动选择并使用当前活动实例。如果在两者之间设置了代理,则在运行quick_start.pyimport-hive.sh时可以使用其地址。

2.3 Atlas高可用性的实现细节

Atlas高可用性工作在主JIRA ATLAS-510下进行跟踪。在其下提交的JIRA提供了有关如何实施高可用性功能的详细信息。在高层次上,可以调出以下几点:

  • 自动选择Active实例,以及通过领导者选举算法自动故障转移到新的Active实例。
  • 对于领导者选举,我们使用Leader Latch Recipe of Apache Curator
  • Active实例是唯一一个在后端存储中初始化,修改或读取状态以保持一致的实例。
  • 此外,当实例被选为活动时,它会刷新来自后端存储的任何缓存信息以获取最新信息。
  • servlet过滤器确保只有活动实例服务用户请求。如果被动实例接收到这些请求,它会自动将它们重定向到当前活动实例。

3. 元数据存储

Atlas使用JanusGraph存储和管理元数据。默认情况下,Atlas使用独立的HBase实例作为JanusGraph的底层存储。为了为元数据存储提供HA,我们建议将Atlas配置为使用分布式HBase作为JanusGraph的底层存储。要将Atlas配置为在HA模式下使用HBase,请执行以下操作:

  • 选择在HA模式下设置的现有HBase群集,以在Atlas(OR)中进行配置在HA模式下设置新的HBase群集。

    • 如果为Atlas设置HBase,请按照Atlas官网“Installation Steps”,列出的HBase的相关设置说明进行操作。
  • 建议在使用Zookeeper进行协调的不同物理主机上的群集中使用多个HBase主服务器(至少2个),以提供HBase的冗余和高可用性。
  • 有关在atlas.properties中配置以使用HBase设置Atlas的选项,请参阅我翻译的《Atlas开发指南(中文版)》中“配置”章节。

4. 索引存储

如上所述,Atlas通过JanusGraph索引元数据以支持全文搜索查询。为了给索引存储提供HA,我们建议将Atlas配置为使用SolrElasticsearch作为JanusGraph的索引存储支撑。

4.1 Solr

要将Atlas配置为在HA模式下使用Solr,请执行以下操作:

  • 选择HA模式下的现有SolrCloud群集设置以在Atlas中配置(OR)设置新的SolrCloud群集。

    • 确保Solr在至少2个物理主机上启用以实现冗余,并且每个主机都运行Solr节点。
    • 建议将冗余数量设置为至少2个副本。
  • 创建Atlas所需的SolrCloud集合,详见Atlas官网“Installation Steps”。
  • 有关在atlas.properties中配置以使用Solr设置Atlas的选项,请参阅我翻译的《Atlas开发指南(中文版)》的文档中“配置”章节。

4.2 Elasticsearch

要将Atlas配置为在HA模式下使用Elasticsearch,请执行以下操作:

  • 选择现有的Elasticsearch集群设置,(或)设置新的集群Elasticsearch集群。
  • 确保Elasticsearch在至少五个物理主机上启用以实现冗余。
  • 建议设置分片数量为3
  • 有关在atlas.properties中配置以使用Elasticsearch设置Atlas的选项,请参阅我翻译的《Atlas开发指南(中文版)》的文档中“配置”章节。

5. 通知服务

来自Hook的元数据通知事件通过写入名为ATLAS_HOOK的Kafka Topic发送到Atlas。同样,从Atlas到其他集成组件(如Ranger)的事件也会写入名为ATLAS_ENTITIES的Kafka Topic。由于Kafka持久化这些消息,即使消费者因发送事件而关闭,事件也不会丢失。此外,我们建议Kafka也设置容错,以便它具有更高的可用性保证。要将Atlas配置为在HA模式下使用Kafka,请执行以下操作:

  • 选择在HA模式下设置的现有Kafka群集,以在Atlas(OR)中配置设置新的Kafka群集。

  • 建议群集中不同的Kafka代理在不同的物理主机上使用Zookeeper进行协调,以提供Kafka的冗余和高可用性。

    • 设置至少2个物理主机以实现冗余,每个主机托管一个Kafka代理。
  • 为Atlas使用设置Kafka主题:

    • ATLAS主题的分区数应设置为1(numPartitions)
    • 确定Kafka主题的副本数量:将此设置为至少2以实现冗余。
    • 运行以下命令:
    $KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper <list of zookeeper host:port entries> --topic ATLAS_HOOK --replication-factor <numReplicas> --partitions 1
    $KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper <list of zookeeper host:port entries> --topic ATLAS_ENTITIES --replication-factor <numReplicas> --partitions 1
    Here KAFKA_HOME points to the Kafka installation directory.

atlas-application.properties中,设置以下配置:

atlas.notification.embedded=false
atlas.kafka.zookeeper.connect=<comma separated list of servers forming Zookeeper quorum used by Kafka>
atlas.kafka.bootstrap.servers=<comma separated list of Kafka broker endpoints in host:port form> - Give at least 2 for redundancy.

6. 问题

如果托管Atlas表的HBase region servers挂掉,Atlas将无法存储或检索HBase中的元数据,直到它们重新联机。

使用Atlas进行元数据管理之容错和高可用的更多相关文章

  1. 使用Atlas进行元数据管理之Atlas简介

    背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...

  2. 使用Atlas进行元数据管理之Type(类型)

    背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...

  3. 使用Atlas进行元数据管理之Glossary(术语)

    背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...

  4. Storm容错和高可用

    Daemon Fault Tolerance Storm有一些不同的守护进程 Nimbus负责调度workers supervisors负责运行和杀死workers log views负责访问日志 U ...

  5. Apache Atlas元数据管理从入门到实战(1)

    一.前言   元数据管理是数据治理非常重要的一个方向,元数据的一致性,可追溯性,是实现数据治理非常重要的一个环节.传统数据情况下,有过多种相对成熟的元数据管理工具,而大数据时代,基于hadoop,最为 ...

  6. 数据治理之元数据管理的利器——Atlas入门宝典

    随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程.作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置.但是其官方文档不是很丰富,也不够详细.所以整 ...

  7. Oracle Metadata Management (OMM)元数据管理 12.2.1发布

    元数据管理元数据管理是解决大量关键业务和技术挑战的基础,这些挑战包括元数据实体有多少,上游数据变化的影响,在浏览器中提供友好的分析展现界面,或提供企业范围内的元数据现状分析和改进视图.OMM是一款基于 ...

  8. Oracle Enterprise Metadata Management (简称OEMM,Oracle元数据管理)12.1.3.0.1已经发布

    在数据处理及数据仓库建设中,元数据管理是必不可少的,OEMM可以解决元数据管理过程中各种关键业务问题和技术挑战,其中包括如何元数据的统计信息,了解变更数据之后对下游的影响范围,而且OEMM站在业务的角 ...

  9. 利用 yEd 软件做元数据管理

    利用 yEd 软件做元数据管理 yEd Diagram editor 是我常用的 flow chart 制图工具, 另外我也用它画 ER 和 use case 图. 总结一下我喜欢 yEd 的原因:1 ...

随机推荐

  1. SQL Server 中如何做到连续时间段的拆分?

    今天在工作中遇到了一个很实际的问题,客户在OA接口的员工休假中间表中提供了连续时间段的休假记录,例如: 张三,2018-12-1 ~2018-12-31 ,病假,31天.这样带来的问题是,如果我需要统 ...

  2. Cocoa包管理器之CocoaPods详解

    CocoaPods在Cocoa开发日常工作中经常用到的包管理器,即依赖管理工具.有的项目也有用Carthage的,Carthage是一个比较新的依赖管理工具,是使用Swift语言开发的.Carthag ...

  3. 大白话5分钟带你走进人工智能-第三节最大似然推导mse损失函数(深度解析最小二乘来源)(1)

                                                    第三节最大似然推导mse损失函数(深度解析最小二乘来源)        在第二节中,我们介绍了高斯分布的 ...

  4. STM32学习笔记(二):GPIO口工作原理

    STM32每个IO口具有7个寄存器来控制,每个IO口都可以自由进行编程控制,我们编程实际上控制的是通过控制那7个寄存器来控制我们的IO口,我们可以通过编程控制IO口,把IO口配置成如下八种模式: 1. ...

  5. 【ODI】| 数据ETL:从零开始使用Oracle ODI完成数据集成(一)

    0. 环境说明及软件准备 ODI(Oracle Data Integrator)是Oracle公司提供的一种数据集成工具,能高效地实现批量数据的抽取.转换和加载.ODI可以实现当今大多数的主流关系型数 ...

  6. MySQL之父造访腾讯云 为腾讯云数据库开源点赞

    近日,技术大牛 MariaDB 公司创始人兼CTO Michael Widenius(又名Monty).MariaDB 基金会主席 Kaj 来到中国,针对MariaDB与腾讯云的技术合作进行回访.去年 ...

  7. 我们必须要知道的RESTful服务最佳实践

    看过很多RESTful相关的文章总结,参齐不齐,结合工作中的使用,非常有必要归纳一下关于RESTful架构方式了,RESTful只是一种架构方式的约束,给出一种约定的标准,完全严格遵守RESTful标 ...

  8. 使用JS+Three.js+Echart开发商场室内地图客流信息统计功能

    现在的商场管理者在管理商场的同时面临着一些无法避免的问题比如:人员监管不到位.效率低下.商场同质化严重,人流量少等.发现了这些问题作为开发人员的我们怎能视而不见,我们的责任就是发现问题解决问题,提供更 ...

  9. 怎么让DIV在另一个DIV里靠底部显示?

    可以使用css的position属性的绝对定位. 拓展知识 position 属性指定了元素的定位类型. position 属性的五个值: static:HTML元素的默认值,即没有定位,元素出现在正 ...

  10. HTML 练习实现遮罩层

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...