Amazon OpenSearch 服務的跨叢集複寫 - Amazon OpenSearch 服務

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon OpenSearch 服務的跨叢集複寫

透過 Amazon Ser OpenSearch vice 中的跨叢集複寫,您可以將使用者索引、對應和中繼資料從一個 OpenSearch 服務網域複寫到另一個服務網域。使用跨叢集複寫有助於確保災難復原是否會中斷,並可讓您跨遠距資料中心複寫資料,以減少延遲。您為網域之間傳輸的資料支付標準 AWS 資料傳輸費用

跨叢集複寫遵循主動-被動複寫模型,其中本機或從動件索引從遠端或前置索引提取資料。領導者索引是指資料的來源,或您要從中複製資料的索引。追隨者索引是指資料的目標,或您要複製資料的索引。

跨叢集複寫適用於執行彈性搜尋 7.10 或 OpenSearch 更新版本的網域。有關跨叢集複寫的完整說明文件,請OpenSearch參閱文件

限制

跨叢集複寫有下列限制:

  • 您無法在 Amazon OpenSearch 服務網域和自我管理叢集 OpenSearch 或彈性搜尋叢集之間複寫資料。

  • 您無法將追隨者網域的索引複製到另一個追隨者網域。如果您要將索引複製到多個追隨者網域,則只能從單一引線領域複製索引。

  • 一個網域可以透過傳入和傳出連線的組合,連線到最多 20 個其他網域。

  • 當您初始設定跨叢集連線時,領導網域的版本必須與追隨者網域相同或更高。

  • 您無法使用 AWS CloudFormation 來連接網域。

  • 您無法在 M3 或高載 (T2 和 T3) 執行個體上使用跨叢集複寫。

  • 您無法在索引 UltraWarm 或冷索引之間複製資料。兩個索引都必須位於熱儲存中。

  • 當您從領導者網域刪除索引時,不會自動刪除追隨者網域上的對應索引。

必要條件

設定跨叢集複寫前,請確認網域符合下列需求:

許可需求

若要開始複寫,您必須在遠端 (領導) 網域上提供 es:ESCrossClusterGet 許可。我們建議您在遠端網域上採用下列 IAM 政策。此原則也可讓您執行其他作業,例如索引文件和執行標準搜尋:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/leader-domain/*" }, { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/leader-domain" } ] }

確認已針對 /leader-domain (而不是 /leader-domain/*) 套用 es:ESCrossClusterGet 許可。

為了讓非管理員使用者執行複寫活動,他們也必須對應至適當的許可。大多數許可均對應特定的 REST API 操作。例如,indices:admin/plugins/replication/index/_resume 許可能讓您恢復索引複寫。如需權限的完整清單,請參閱 OpenSearch 文件中的複寫權限

注意

開始複寫和建立複寫規則的命令屬於特殊情況。因為它們會在領導者和追隨者網域上叫用背景處理序,因此您必須在要求follower_cluster_role中傳遞leader_cluster_role和。 OpenSearch 服務會在所有後端複寫工作中使用這些角色。如需有關對應和使用這些角色的資訊,請參閱 OpenSearch文件中的對應領導者和追隨者叢集角色

設定跨叢集連線

若要將索引從一個網域複寫到另一個網域,您需要設定網域之間的跨叢集連線。連線網域最簡單的方法是透過網域儀表板的 Connections (連線) 索引標籤。您也可以使用組態 APIAWS CLI。因為跨叢集複寫遵循「提取」模型,您會從追蹤網域啟動連線。

注意

如果您先前已連線兩個網域以執行跨叢集搜尋,則無法使用相同的連線進行複寫。在主控台中,連線將標記為 SEARCH_ONLY。若要在兩個之前連線的網域之間執行複寫,您必須刪除連線,再重新建立連線。完成此操作後,該連線可用於跨叢集搜尋和跨叢集複寫。

如何設定連線
  1. 在 Amazon OpenSearch 服務主控台中,選取追蹤者網域,前往「連線」標籤,然後選擇「請求」。

  2. 對於 Connection alias (連線別名),輸入連線的名稱。

  3. 選擇要連線至您的 AWS 帳戶 和區域中的網域,或是要連線至其他帳戶或區域中的網域。

    • 若要連線至您的 AWS 帳戶和區域中的網域,請選取網域並選擇 Request (請求)。

    • 若要連線至其他 AWS 帳戶或區域中的網域,請指定遠端網域的 ARN,然後選擇 Request (請求)。

OpenSearch 服務會驗證連線要求。如果網域不相容,連線會失敗。如果驗證成功,則會將請求傳送至目的地網域進行核准。當目的地網域核准請求時,您就可以開始複寫。

跨叢集複寫支援雙向複寫。這表示您可以建立從網域 A 到網域 B 的輸出連線,並建立另一個從網域 B 到網域 A 的輸出連線。然後您可以設定複寫,讓網域 A 跟隨網域 B 中的索引,而網域 B 會跟隨網域 A 中的索引。

開始複寫

建立跨叢集連線之後,您就可以開始複寫資料。首先,在主導領域上建立要複寫的索引:

PUT leader-01

若要複寫該索引,請將此命令傳送至追蹤網域:

PUT _plugins/_replication/follower-01/_start { "leader_alias": "connection-alias", "leader_index": "leader-01", "use_roles":{ "leader_cluster_role": "all_access", "follower_cluster_role": "all_access" } }

您可以在網域儀表板的 Connections (連線) 索引標籤上找到連線別名。

為了簡單起見,此範例假設管理員發出請求,並針對 leader_cluster_rolefollower_cluster_role 使用 all_access。不過,在生產環境中,我們建議您同時在領導和追蹤索引上建立複寫使用者,並加以對應。使用者名稱必須相同。如需這些角色以及如何對應這些角色的詳細資訊,請參閱 OpenSearch文件中的對應領導者和追隨者叢集角色

確認複寫

若要確認正在進行複寫,請取得複寫狀態:

GET _plugins/_replication/follower-01/_status { "status" : "SYNCING", "reason" : "User initiated", "leader_alias" : "connection-alias", "leader_index" : "leader-01", "follower_index" : "follower-01", "syncing_details" : { "leader_checkpoint" : -5, "follower_checkpoint" : -5, "seq_no" : 0 } }

領導和追蹤檢查點的值以負整數開始,並反映您擁有的碎片數量 (-1 代表一個碎片,-5 代表五個碎片,依此類推)。這些值會隨著您所做的每項變更而遞增為正整數。如果值是相同的,表示索引已完全同步。您可以使用這些檢查點的值來測量跨網域的複寫延遲。

若要進一步驗證複寫,請將文件新增至領導索引:

PUT leader-01/_doc/1 { "Doctor Sleep":"Stephen King" }

同時確認文件顯示在追蹤索引上:

GET follower-01/_search { ... "max_score" : 1.0, "hits" : [ { "_index" : "follower-01", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "Doctor Sleep" : "Stephen King" } } ] } }

暫停和繼續複寫

如果您需要修復問題或減少領導網域的負載,可以暫時停止複寫。將此請求傳送至追蹤網域。請務必包含空的請求主體:

POST _plugins/_replication/follower-01/_pause {}

隨後獲取狀態,確保複寫已暫停:

GET _plugins/_replication/follower-01/_status { "status" : "PAUSED", "reason" : "User initiated", "leader_alias" : "connection-alias", "leader_index" : "leader-01", "follower_index" : "follower-01" }

當您完成變更後,請繼續複寫。將此請求傳送至追蹤網域。請務必包含空的請求主體:

POST _plugins/_replication/follower-01/_resume {}

您無法在已暫停超過 12 小時後繼續複寫。您必須停止複寫、刪除追蹤者索引,然後重新啟動領導者的複寫。

停止複寫

當您完全停止複寫時,追蹤索引會取消追蹤領導索引,並成為標準索引。停止複寫後,就無法重新開始複寫。

從追蹤網域停止複寫。請務必包含空的請求主體:

POST _plugins/_replication/follower-01/_stop {}

自動追蹤

您可以針對單一領導領域定義一組複寫規則,以自動複寫符合指定模式的索引。當領導網域上的索引符合其中一個模式 (例如,books*) 時,會在追隨者網域上建立相符的追隨者索引。 OpenSearch Service 會複寫符合模式的任何現有索引,以及您建立的新索引。不會複寫追隨網域上已經存在的索引。

若要複寫所有索引 (系統建立的索引以及追隨網域上已存在的索引除外),應使用萬用字元 (*) 模式。

建立複寫規則

在追蹤網域上建立複寫規則,並指定跨叢集連線的名稱:

POST _plugins/_replication/_autofollow { "leader_alias" : "connection-alias", "name": "rule-name", "pattern": "books*", "use_roles":{ "leader_cluster_role": "all_access", "follower_cluster_role": "all_access" } }

您可以在網域儀表板的 Connections (連線) 索引標籤上找到連線別名。

為了簡單起見,此範例假設管理員發出請求,並使用 all_access 作為領導和追蹤網域角色。不過,在生產環境中,我們建議您同時在領導和追蹤索引上建立複寫使用者,並加以對應。使用者名稱必須相同。如需這些角色以及如何對應這些角色的詳細資訊,請參閱 OpenSearch文件中的對應領導者和追隨者叢集角色

若要擷取網域上現有複寫規則的清單,請使用自動追蹤統計 API 操作

若要測試規則,請建立與領導網域上模式相符的索引:

PUT books-are-fun

同時檢查索引副本是否出現在追蹤網域上:

GET _cat/indices health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open books-are-fun ldfHO78xYYdxRMULuiTvSQ 1 1 0 0 208b 208b

刪除複寫規則

刪除複寫規則時, OpenSearch Service 會停止複寫符合模式的索引,但會繼續現有的複寫活動,直到您停止複寫這些索引為止。

從追蹤網域刪除複寫規則:

DELETE _plugins/_replication/_autofollow { "leader_alias" : "connection-alias", "name": "rule-name" }

升級連線的網域

若要升級具有跨叢集連線之兩個網域的引擎版本,請先升級追隨者網域,然後升級領導者網域。請勿刪除它們之間的連線,否則複寫會暫停,您將無法繼續。