使用Atlas進行元數據管理之容錯和高可用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM