Elasticsearch(簡稱ES)叢集出現災難性事件,例如,硬體故障、軟體錯誤、資料中心故障、自然災害或其他導致服務中斷的情況,可使用跨叢集複製CCR(Cross Cluster Replication)實現跨地區或跨資源的容災能力,本文分別介紹新老網路架構下ES實現CCR的過程。
背景資訊
CCR是開源ES在platinum版本中發布的一個商業特性。購買阿里雲ES執行個體後,您無需額外付費,只需要簡單配置,即可使用CCR功能。
CCR用於容災恢複情境,對於分布在同VPC下不同可用性區域的ES叢集,可以通過CCR進行資料備份。當其中一個叢集(如遠程叢集)發生故障時,通過訪問其他叢集(本地叢集)來擷取故障叢集的資料進行恢複,保證資料不丟失。
使用CCR功能,需要準備兩種類型的叢集。一個是遠程叢集,即提供來源資料(Leader index)的叢集;一個是本地叢集,即訂閱資料(Follower index)的叢集。該功能為被動複製,即所有複製任務都是由本地叢集執行。同時支援批量即時移轉資料,更多詳情請參見Cross-cluster replication。
情境應用
依據您的業務情境選擇解決方案:
執行個體環境 | 情境應用 |
兩個阿里雲ES叢集均建立於新網路架構下。 說明 僅支援7.7版本以上的阿里雲ES執行個體。 | |
兩個阿里雲ES叢集均建立於舊網路架構下,且處於同一VPC。 說明 僅支援6.7.0及以上版本的單可用性區域的阿里雲ES執行個體。 |
CCR在不同執行個體網路環境的使用方式情節也適用於CCS功能在類似情境下的應用。更多資訊,請參見modules-cross-cluster-search 。
阿里雲ES執行個體不支援與自建ES執行個體進行跨叢集複製。
2020年10月之前建立的ES叢集屬於舊網路架構,2020年10月及之後建立的ES叢集屬於新網路架構。
通過NLB和PrivateLink實現跨叢集CCR
準備工作
建立兩個7.7及以上版本的阿里雲ES執行個體,且兩個ES執行個體在相同地區和可用性區域下。
說明兩個ES執行個體分別作為:
遠程叢集Leader Cluster: 指未經處理資料所在的叢集。
本地叢集Follower Cluster: 從Leader cluster中的一個或多個索引複製資料。
實現兩個ES執行個體間私網互連。具體操作,請參見通過NLB和PrivateLink實現阿里雲ES執行個體間私網互連。
說明通過NLB掛載Leader叢集的網域名稱IP,將Follower通過私網串連到Leader叢集。
在Leader叢集中建立待遷移的索引。
登入Leader叢集的Kibana控制台。具體操作,請參見登入Kibana控制台。
在頁面左上方單擊表徵圖,選擇Management > 開發工具(Dev Tools)。
執行以下命令,在Leader叢集中建立待遷移的索引。
PUT /leader-new { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "integer" } } } }
情境一:針對具體索引實現跨叢集複製
步驟一:串連Leader叢集
登入Follower叢集的Kibana控制台。具體操作,請參見登入Kibana控制台。
在頁面左上方單擊表徵圖,選擇
。在管理(Management)頁面的左側導覽列,單擊遠程叢集(Remote Clusters)。
單擊添加遠程叢集(Add a remote cluster)。
在添加遠程叢集頁面中,輸入Leader叢集資訊。
名稱(Name):Leader叢集的名稱,不可重複。
串連模式(Connection mode):開啟使用代理模式(Use proxy mode)開關。
Proxy 位址(Proxy address):Proxy 伺服器地址,格式為
終端節點網域名稱:9300
,終端節點網域名稱即PrivateLink終端節點服務下的終端節點ID的網域名稱。說明由於CCR功能是Kibana通過資料節點之間的TCP連接埠(9300)訪問資料節點IP的形式來進行網路互連,因此不支援HTTP連接埠(9200)訪問。
單擊儲存。
儲存後,系統會自動連接Leader叢集。串連成功後,串連狀態顯示串連(Connected)。
API樣本
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"<remote_cluster>": {
"mode": "PROXY",
"proxy_address": "終端節點網域名稱:9300"
}
}
}
}
}
參數 | 說明 |
persistent | 設定會持久儲存,即使在叢集重啟後也會保留。 |
<remote_cluster> | 替換為想要串連的遠程叢集的名稱。 |
mode | 僅支援proxy模式。本地叢集通過配置的Proxy 位址來訪問遠程叢集。所有的遠程請求都會發送到這個Proxy 位址,並由Proxy 伺服器轉寄到遠程叢集的合適節點。 |
proxy_address | Proxy 伺服器地址,格式為 說明 本文CCR/CCS使用的是Elasticsearch的傳輸層(Transport layer),需要使用9300連接埠進行通訊。 |
步驟二:配置跨叢集複製
在Follower叢集Kibana控制台的管理(Management)頁面,在左側導覽列單擊跨叢集複製(Cross-Cluster Replication)。
單擊建立Follower索引(Create a follower index)。
配置跨叢集複製。
參數
說明
Remote cluster
選擇您已串連的遠程叢集。
Leader index
待遷移的索引。
Follower index
遷移資料產生的索引。索引名稱不可重複。
單擊建立(Create)。
建立成功後,索引狀態顯示為Active。
API樣本:
建立Follower叢集索引時,必須引用Leader叢集以及在Leader叢集中建立的領導者索引。
PUT /leader-old-copy/_ccr/follow
{
"remote_cluster": "es-leader",
"leader_index": "leader-old"
}
參數 | 說明 |
remote_cluster | 串連的Follower叢集的名稱,與步驟一的參數對應。 |
leader_index | Leader叢集索引名稱。 |
步驟三:驗證資料備份結果
在Leader叢集的Kibana控制台,執行如下命令,在Leader叢集的索引中插入資料。
POST leader-new/_doc/ { "name":"Jack", "age":40 }
在Follower叢集的Kibana控制台,執行如下命令,驗證資料是否遷移成功。
GET leader-new-copy/_search
返回結果如下,Leader叢集的Leader索引(leader-new)中的資料,已通過CCR功能複製到了Follower叢集的Follower索引(leader-new-copy)中。
在Leader叢集中,重新插入一條資料,驗證增量資料是否即時同步。
POST leader-new/_doc/ { "name":"Pony", "age":50 }
資料插入後,在Follower叢集中執行如下命令。
GET leader-new-copy/_search
從查詢結果可以看到,通過CCR可以實現增量資料的即時同步。
情境二:指定索引模式實現批量跨叢集複製
步驟一:串連Leader叢集
登入Follower叢集的Kibana控制台。具體操作,請參見登入Kibana控制台。
在頁面左上方單擊表徵圖,選擇
。在管理(Management)頁面的左側導覽列,單擊遠程叢集(Remote Clusters)。
單擊添加遠程叢集(Add a remote cluster)。
在添加遠程叢集頁面中,輸入Leader叢集資訊。
名稱(Name):Leader叢集的名稱,不可重複。
串連模式(Connection mode):開啟使用代理模式(Use proxy mode)開關。
Proxy 位址(Proxy address):Proxy 伺服器地址,格式為
終端節點網域名稱:9300
,終端節點網域名稱即PrivateLink終端節點服務下的終端節點ID的網域名稱。說明由於CCR功能是Kibana通過資料節點之間的TCP連接埠(9300)訪問資料節點IP的形式來進行網路互連,因此不支援HTTP連接埠(9200)訪問。
單擊儲存。
儲存後,系統會自動連接Leader叢集。串連成功後,串連狀態顯示串連(Connected)。
API樣本
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"<remote_cluster>": {
"mode": "PROXY",
"proxy_address": "終端節點網域名稱:9300"
}
}
}
}
}
參數 | 說明 |
persistent | 設定會持久儲存,即使在叢集重啟後也會保留。 |
<remote_cluster> | 替換為想要串連的遠程叢集的名稱。 |
mode | 僅支援proxy模式。本地叢集通過配置的Proxy 位址來訪問遠程叢集。所有的遠程請求都會發送到這個Proxy 位址,並由Proxy 伺服器轉寄到遠程叢集的合適節點。 |
proxy_address | Proxy 伺服器地址,格式為 說明 本文CCR/CCS使用的是Elasticsearch的傳輸層(Transport layer),需要使用9300連接埠進行通訊。 |
步驟二:配置跨叢集複製
在Follower叢集Kibana控制台的管理(Management)頁面,在左側導覽列單擊跨叢集複製(Cross-Cluster Replication)。
單擊自動跟隨模式(Auto-follow patterns)頁簽。
單擊建立自動跟隨模式(Create auto-follow pattern)。
配置跨叢集複製。
參數
說明
Remote cluster
選擇您已串連的遠程叢集。
Index patterns
遠程叢集中待遷移的索引模式。
API樣本
PUT /_ccr/auto_follow/beats
{
"remote_cluster": "es-leader",
"leader_index_patterns":
[
"leader-*"
],
"follow_index_pattern": "{{leader_index}}-copy"
}
參數 | 說明 |
remote_cluster | 串連的遠程叢集的名稱,與步驟一參數對應。 |
leader_index_patterns | 匹配遠程叢集中哪些索引需要被複製。 |
follow_index_pattern | 指定在Follower叢集中建立的索引的名稱模式,CCR將依據之後按照索引模式建立的新索引進行跨叢集複製。 |
步驟三:驗證資料備份結果
在Leader叢集的Kibana控制台,執行以下命令,在Leader叢集中添加索引。
PUT /leader-new { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "integer" } } } }
在Follower叢集的Kibana控制台,執行如下命令,驗證新索引是否成功遷移到Follower叢集中。
get _cat/indices?v
通過配置執行個體網路互連實現跨叢集CCR
準備工作
準備兩個相同版本(6.7及以上)的阿里雲ES執行個體,且兩個ES執行個體在同一專用網路和虛擬交換器下。
說明兩個ES執行個體分別作為:
遠程叢集Leader Cluster:未經處理資料所在的叢集。
本地叢集Follower Cluster:從Leade叢集中的一個或多個索引複製資料。
如果遠程叢集上已經上傳了同義字檔案,本地叢集中也需要上傳一致的同義字檔案。
在遠程叢集中添加需要進行網路互連的本地叢集。具體操作,請參見通過配置執行個體網路互連使用跨叢集搜尋功能。
在Leader叢集中建立待遷移的索引。
登入Leader叢集的Kibana控制台。具體操作,請參見登入Kibana控制台。
在頁面左上方單擊表徵圖,選擇Management > 開發工具(Dev Tools)。
執行以下命令,在Leader叢集中建立待遷移的索引。
PUT myindex { "settings": { "index.soft_deletes.retention.operations": 1024, "index.soft_deletes.enabled": true } }
說明對於7.0及以下版本的Elasticsearch執行個體,在建立索引時,需要開啟soft_deletes屬性,否則會報錯。您可以通過
GET /<yourIndexName>/_settings?pretty
命令,查看是否開啟了soft_deletes屬性。開啟時,您可以在返回結果中看到soft_deletes屬性的配置。如果您需要遷移已建立的索引,需要通過重建索引來開啟soft_deletes屬性。
關閉待遷移的索引的物理複製功能。
說明對於6.7.0版本的Elasticsearch執行個體,系統會預設為建立索引開啟物理複製功能。使用CCR功能時,需要先關閉物理複製功能。
關閉索引。
POST myindex/_close
更新索引settings,關閉物理複製功能。
PUT myindex/_settings { "index.replication.type" : null }
開啟索引。
POST myindex/_open
步驟一:串連遠程叢集
登入本地叢集的Kibana控制台。具體操作,請參見登入Kibana控制台。
在頁面左上方單擊表徵圖,選擇
。在管理(Management)頁面的左側導覽列,單擊遠程叢集(Remote Clusters)。
單擊添加遠程叢集(Add a remote cluster)。
在添加遠程叢集頁面中,輸入Leader叢集資訊。
名稱(Name):遠程叢集的名稱,不可重複。
Proxy 位址(Proxy address):需要配置為
遠程叢集的節點的IP地址:9300
。遠程叢集的節點的IP地址,可在遠程叢集的Kibana控制台中,使用GET /_cat/nodes?v
命令擷取。所配置的節點中必須包含主節點,建議您配置多個子節點,確保當主節點不可用時,可以繼續使用跨叢集複製功能。說明由於CCR功能是Kibana通過資料節點之間的TCP連接埠(9300)訪問資料節點IP的形式來進行網路互連,因此不支援HTTP連接埠(9200)訪問。
單擊儲存。
儲存後,系統會自動連接遠程叢集。串連成功後,串連狀態顯示串連(Connected)。
步驟二:配置跨叢集複製
在本地叢集Kibana控制台的Management頁面,在左側導覽列單擊跨叢集複製(Cross-Cluster Replication)。
單擊建立Follower索引(Create a follower index)。
配置跨叢集複製。
參數
說明
Remote cluster
選擇您已串連的遠程叢集。
Leader index
待遷移的索引。本文使用準備工作中建立的myindex索引。
Follower index
遷移資料產生的索引。索引名稱不可重複。
單擊建立(Create)。
建立成功後,索引狀態顯示為Active。
步驟三:驗證資料備份結果
在遠程叢集的Kibana控制台,執行如下命令,在遠程叢集中插入資料。
POST myindex/_doc/ { "name":"Jack", "age":40 }
在本地叢集的Kibana控制台,執行如下命令,驗證資料是否遷移成功。
GET myindex_follow/_search
返回結果如下。遠程叢集的Leader索引(myindex)中的資料,已通過CCR功能複製到了本地叢集的Follower索引(myindex_follow)中。
說明Follower索引為唯讀狀態,如果需要和普通索引一樣寫入資料,需要先轉換成普通索引。詳細資料,請參見使用Elasticsearch跨叢集複製進行跨資料中心複製。
在遠程叢集中,重新插入一條資料,驗證增量資料是否即時同步。
POST myindex/_doc/ { "name":"Pony", "age":50 }
資料插入後,在本地叢集中進行查看,結果如下。
從以上結果可以看到,通過CCR可以實現增量資料的即時同步。
說明您也可以通過CCR功能的API,進行跨叢集複製相關操作。詳細資料,請參見Cross-cluster replication APIs。
常見問題
Q:為什麼在添加遠程叢集時,可以使用9300連接埠。但是通過網域名稱訪問Elasticsearch叢集時,只能使用9200連接埠?
A:9300連接埠實際上是開放的。因為涉及到產品的安全性原則,在SLB連接埠校正過程中,外網訪問Elasticsearch網域名稱的時候,只開放了9200連接埠。
Q:如何查看CCR同步狀態?
A:在Kibana中執行命令
GET /_ccr/stats
,查看failed分區數量,即number_of_failed_follow_indices
的值。如果failed分區數量為0,則同步是正常的。
如果failed分區數量不是0,可在follow叢集執行以下命令恢複同步:
POST /<follower_index>/_ccr/pause_follow POST /<follower_index>/_ccr/resume_follow