本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon OpenSearch 服務的跨叢集複寫
透過 Amazon Ser OpenSearch vice 中的跨叢集複寫,您可以將使用者索引、對應和中繼資料從一個 OpenSearch 服務網域複寫到另一個服務網域。使用跨叢集複寫有助於確保災難復原是否會中斷,並可讓您跨遠距資料中心複寫資料,以減少延遲。您需要為網域之間傳輸的 AWS 資料支付標準的資料傳輸費
跨叢集複寫遵循主動-被動複寫模型,其中本機或從動件索引從遠端或前置索引提取資料。領導者索引是指資料的來源,或您要從中複製資料的索引。追隨者索引是指資料的目標,或您要複製資料的索引。
跨叢集複寫可在執行彈性搜尋 7.10 或 OpenSearch 更新版本的網域上使用。
注意
本文件說明如何從 Amazon OpenSearch 服務的角度設定跨叢集複寫。這包括使用 AWS Management Console 來設定跨叢集連線,這在自我管理 OpenSearch 叢集上是不可能的。如需完整文件,包括設定參考和完整的 API 參考資料,請參閱 OpenSearch 文件中的跨叢集複寫
限制
跨叢集複寫有下列限制:
-
您無法在 Amazon OpenSearch 服務網域和自我管理叢集 OpenSearch 或彈性搜尋叢集之間複寫資料。
-
您無法將追隨者網域的索引複製到另一個追隨者網域。如果您想要將索引複製到多個追隨者網域,則只能從單一引線領域複製索引。
-
一個網域可以透過傳入和傳出連線的組合,連線到最多 20 個其他網域。
-
當您初始設定跨叢集連線時,領導網域的版本必須與追隨者網域相同或更高。
-
您無法使用 AWS CloudFormation 來連線網域。
-
您無法在 M3 或高載 (T2 和 T3) 執行個體上使用跨叢集複寫。
-
您無法在索引 UltraWarm 或冷索引之間複製資料。兩個索引都必須位於熱儲存中。
-
當您從領導者網域刪除索引時,不會自動刪除追隨者網域上的對應索引。
必要條件
設定跨叢集複寫前,請確認網域符合下列需求:
-
彈性搜尋 7.10 或 1.1 或 OpenSearch 更新版本
-
已啟用精細存取控制
許可需求
若要開始複寫,您必須在遠端 (領導) 網域上提供 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 (連線) 索引標籤。您也可以使用組態 API 或 AWS CLI。因為跨叢集複寫遵循「提取」模型,您會從追蹤網域啟動連線。
注意
如果您先前已連線兩個網域以執行跨叢集搜尋,則無法使用相同的連線進行複寫。在主控台中,連線將標記為 SEARCH_ONLY
。若要在兩個之前連線的網域之間執行複寫,您必須刪除連線,再重新建立連線。完成此操作後,該連線可用於跨叢集搜尋和跨叢集複寫。
如何設定連線
-
在 Amazon OpenSearch 服務主控台中,選取追蹤者網域,前往「連線」標籤,然後選擇「請求」。
-
對於 Connection alias (連線別名),輸入連線的名稱。
-
選擇連線至您 AWS 帳戶 和區域或其他帳戶或區域中的網域。
-
若要連線至您 AWS 帳戶 和區域中的網域,請選取網域,然後選擇 [要求]。
-
若要連線至其他網域 AWS 帳戶 或區域中的網域,請指定遠端網域的 ARN,然後選擇 [要求]。
-
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_role
和 follower_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
"
}
升級連線的網域
若要升級具有跨叢集連線之兩個網域的引擎版本,請先升級追隨者網域,然後升級領導者網域。請勿刪除它們之間的連線,否則複寫會暫停,您將無法繼續。