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中的元數據,直到它們從新聯機。