Apache Atlas使用各类系统并与之交互,为数据管理员提供元数据管理和数据血缘信息。经过适当地选择和配置这些依赖关系,可使用Atlas实现高度的服务可用性。本文档介绍了Atlas中的高可用性支持状态,包括其功能和当前限制,以及实现此高级别可用性所需的配置。html
在高级架构章节(请参阅我翻译的《Atlas开发指南(中文版)》)概述了构成Atlas的各类组件。下面提到的各类组件的选项从上面的页面中获取上下文,在继续阅读本页以前值得一看。web
目前,Atlas Web Service有一个限制,即它一次只能有一个活动实例。在早期版本的Atlas中,能够配置备份实例并使其可用。可是,须要手动故障转移才能使此备份实例处于活动状态。算法
今后版本开始,Atlas将经过自动故障转移支持活动(active)/被动(passive)配置中的多个Atlas Web服务实例。这意味着用户能够同时在不一样的物理主机上部署和启动Atlas Web Service的多个实例。其中一个实例将自动选为“active”实例以服务用户请求。其余人将自动被视为“passive”。若是“active”实例因故意中止或因为意外故障而变得不可用,则其余实例之一将自动被选为“active”实例并开始为用户请求提供服务。apache
“active”实例是惟一能够正确响应用户请求的实例。它能够建立,删除,修改或响应元数据对象上的查询。 “passive”实例将接受用户请求,但会使用HTTP重定向将其重定向到当前已知的“active”实例。具体而言,passive实例自己不会响应对元数据对象的任何查询。可是,全部实例(active和passive)都将响应返回有关该实例的信息的管理请求。bootstrap
在高可用性模式下配置时,用户能够得到如下操做收益:后端
在如下小节中,咱们将介绍为Atlas Web Service设置高可用性所需的步骤。咱们还描述了如何设计部署和客户端以利用此功能。最后,咱们描述了底层实现的一些细节。api
设置高可用性功能必须知足如下先决条件。浏览器
要在Atlas中设置高可用性,必须在atlas-application.properties
文件中定义一些配置选项。虽然在配置页面中定义了完整的配置项列表,但本节列出了一些主要选项。缓存
atlas.server.ha.enabled
设置为true
来启用它。atlas.server.ids
的值。atlas.server.address.id
的值,其中id表示此物理计算机的标识符字符串。
host1.company.com
和host2.company.com
的计算机,则能够按以下方式定义配置选项:atlas.server.ids=id1,id2 atlas.server.address.id1=host1.company.com:21000 atlas.server.address.id2=host2.company.com:21000
atlas.server.ha.zookeeper.connect=zk1.company.com:2181,zk2.company.com:2181,zk3.company.com:2181
要验证高可用性是否正常,请在安装了Atlas Web Service的每一个实例上运行如下脚本。服务器
$ATLAS_HOME/bin/atlas_admin.py -status
此脚本能够打印如下值之一做为响应:
在正常操做状况下,这些实例中只有一个应该打印值ACTIVE做为对脚本的响应,而其余实例将打印PASSIVE。
能够经过两种方式访问Atlas Web Service:
为了利用客户端中的高可用性功能,有两种选择。
实现对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时才被视为成功。
若是不想设置和管理单独的代理,则使用高可用性功能的另外一个选项,是构建可以检测状态和重试操做的客户端应用程序。在这样的设置中,可使用造成总体的全部Atlas Web Service实例的URL启动客户端应用程序。而后,客户端应在每一个上面调用REST URL/api/atlas/admin/status
以肯定哪一个是活动实例。 Active实例的响应形式为{Status:ACTIVE}
。此外,当客户端在操做过程当中面临任何异常时,它应该再次肯定哪些剩余URL处于活动状态并重试该操做。
Atlas附带的AtlasClient类可用做示例客户端库,该库实现处理集合并选择正确的Active Server实例的逻辑。
Atlas中的实用程序(如quick_start.py
和import-hive.sh
)能够配置为与多个服务器URL一块儿运行。在此模式下启动时,AtlasClient会自动选择并使用当前活动实例。若是在二者之间设置了代理,则在运行quick_start.py
或import-hive.sh
时可使用其地址。
Atlas高可用性工做在主JIRA ATLAS-510下进行跟踪。在其下提交的JIRA提供了有关如何实施高可用性功能的详细信息。在高层次上,能够调出如下几点:
Atlas使用JanusGraph存储和管理元数据。默认状况下,Atlas使用独立的HBase实例做为JanusGraph的底层存储。为了为元数据存储提供HA,咱们建议将Atlas配置为使用分布式HBase做为JanusGraph的底层存储。要将Atlas配置为在HA模式下使用HBase,请执行如下操做:
atlas.properties
中配置以使用HBase设置Atlas的选项,请参阅我翻译的《Atlas开发指南(中文版)》中“配置”章节。如上所述,Atlas经过JanusGraph索引元数据以支持全文搜索查询。为了给索引存储提供HA,咱们建议将Atlas配置为使用Solr
或Elasticsearch
做为JanusGraph的索引存储支撑。
要将Atlas配置为在HA模式下使用Solr,请执行如下操做:
要将Atlas配置为在HA模式下使用Elasticsearch,请执行如下操做:
来自Hook的元数据通知事件经过写入名为ATLAS_HOOK
的Kafka Topic发送到Atlas。一样,从Atlas到其余集成组件(如Ranger)的事件也会写入名为ATLAS_ENTITIES
的Kafka Topic。因为Kafka持久化这些消息,即便消费者因发送事件而关闭,事件也不会丢失。此外,咱们建议Kafka也设置容错,以便它具备更高的可用性保证。要将Atlas配置为在HA模式下使用Kafka,请执行如下操做:
$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.
若是托管Atlas表的HBase region servers挂掉,Atlas将没法存储或检索HBase中的元数据,直到它们从新联机。