全部產品
Search
文件中心

Elasticsearch:通過CCR跨叢集複製解決跨叢集容災情境

更新時間:Jun 30, 2024

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執行個體。

通過NLB和PrivateLink實現跨叢集CCR

兩個阿里雲ES叢集均建立於舊網路架構下,且處於同一VPC。

說明

僅支援6.7.0及以上版本的單可用性區域的阿里雲ES執行個體。

通過配置執行個體網路互連實現跨叢集CCR

說明
  • 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叢集中建立待遷移的索引。

    1. 登入Leader叢集的Kibana控制台。具體操作,請參見登入Kibana控制台

    2. 在頁面左上方單擊菜單.png表徵圖,選擇Management > 開發工具Dev Tools

    3. 執行以下命令,在Leader叢集中建立待遷移的索引。

      PUT /leader-new
      {
        "settings": {
          "number_of_shards": 1,
          "number_of_replicas": 0
        },
        "mappings": {
          "properties": {
            "name": {
              "type": "text"
            },
            "age": {
              "type": "integer"
            }
          }
        }
      }

情境一:針對具體索引實現跨叢集複製

步驟一:串連Leader叢集

  1. 登入Follower叢集的Kibana控制台。具體操作,請參見登入Kibana控制台

  2. 在頁面左上方單擊菜單.png表徵圖,選擇Management > Stack Management

  3. 管理(Management)頁面的左側導覽列,單擊遠程叢集(Remote Clusters)。

  4. 單擊添加遠程叢集(Add a remote cluster)。

  5. 在添加遠程叢集頁面中,輸入Leader叢集資訊。

    • 名稱(Name):Leader叢集的名稱,不可重複。

    • 串連模式(Connection mode):開啟使用代理模式(Use proxy mode)開關。

    • Proxy 位址(Proxy address):Proxy 伺服器地址,格式為終端節點網域名稱:9300,終端節點網域名稱即PrivateLink終端節點服務下的終端節點ID的網域名稱。

      說明

      由於CCR功能是Kibana通過資料節點之間的TCP連接埠(9300)訪問資料節點IP的形式來進行網路互連,因此不支援HTTP連接埠(9200)訪問。

  6. 單擊儲存

    儲存後,系統會自動連接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 伺服器地址,格式為PrivateLink終端節點服務下的終端節點ID的網域名稱:9300

說明

本文CCR/CCS使用的是Elasticsearch的傳輸層(Transport layer),需要使用9300連接埠進行通訊。

步驟二:配置跨叢集複製

  1. 在Follower叢集Kibana控制台的管理(Management)頁面,在左側導覽列單擊跨叢集複製(Cross-Cluster Replication)。

  2. 單擊建立Follower索引(Create a follower index)。

  3. 配置跨叢集複製。

    參數

    說明

    Remote cluster

    選擇您已串連的遠程叢集。

    Leader index

    待遷移的索引。

    Follower index

    遷移資料產生的索引。索引名稱不可重複。

  4. 單擊建立(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叢集索引名稱。

步驟三:驗證資料備份結果

  1. 在Leader叢集的Kibana控制台,執行如下命令,在Leader叢集的索引中插入資料。

    POST leader-new/_doc/
    {
      "name":"Jack",
      "age":40
    }
  2. 在Follower叢集的Kibana控制台,執行如下命令,驗證資料是否遷移成功。

    GET leader-new-copy/_search

    返回結果如下,Leader叢集的Leader索引(leader-new)中的資料,已通過CCR功能複製到了Follower叢集的Follower索引(leader-new-copy)中。image.png

  3. 在Leader叢集中,重新插入一條資料,驗證增量資料是否即時同步。

    POST leader-new/_doc/
    {
      "name":"Pony",
      "age":50
    }
  4. 資料插入後,在Follower叢集中執行如下命令。

    GET leader-new-copy/_search

    從查詢結果可以看到,通過CCR可以實現增量資料的即時同步。image.png

情境二:指定索引模式實現批量跨叢集複製

步驟一:串連Leader叢集

  1. 登入Follower叢集的Kibana控制台。具體操作,請參見登入Kibana控制台

  2. 在頁面左上方單擊菜單.png表徵圖,選擇Management > Stack Management

  3. 管理(Management)頁面的左側導覽列,單擊遠程叢集(Remote Clusters)。

  4. 單擊添加遠程叢集(Add a remote cluster)。

  5. 在添加遠程叢集頁面中,輸入Leader叢集資訊。

    • 名稱(Name):Leader叢集的名稱,不可重複。

    • 串連模式(Connection mode):開啟使用代理模式(Use proxy mode)開關。

    • Proxy 位址(Proxy address):Proxy 伺服器地址,格式為終端節點網域名稱:9300,終端節點網域名稱即PrivateLink終端節點服務下的終端節點ID的網域名稱。

      說明

      由於CCR功能是Kibana通過資料節點之間的TCP連接埠(9300)訪問資料節點IP的形式來進行網路互連,因此不支援HTTP連接埠(9200)訪問。

  6. 單擊儲存

    儲存後,系統會自動連接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 伺服器地址,格式為PrivateLink終端節點服務下的終端節點ID的網域名稱:9300

說明

本文CCR/CCS使用的是Elasticsearch的傳輸層(Transport layer),需要使用9300連接埠進行通訊。

步驟二:配置跨叢集複製

  1. 在Follower叢集Kibana控制台的管理(Management)頁面,在左側導覽列單擊跨叢集複製(Cross-Cluster Replication)。

  2. 單擊自動跟隨模式(Auto-follow patterns)頁簽。

  3. 單擊建立自動跟隨模式(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將依據之後按照索引模式建立的新索引進行跨叢集複製。

步驟三:驗證資料備份結果

  1. 在Leader叢集的Kibana控制台,執行以下命令,在Leader叢集中添加索引。

    PUT /leader-new
    {
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 0
      },
      "mappings": {
        "properties": {
          "name": {
            "type": "text"
          },
          "age": {
            "type": "integer"
          }
        }
      }
    }
  2. 在Follower叢集的Kibana控制台,執行如下命令,驗證新索引是否成功遷移到Follower叢集中。

    get _cat/indices?v

    image.png

通過配置執行個體網路互連實現跨叢集CCR

準備工作

  1. 準備兩個相同版本(6.7及以上)的阿里雲ES執行個體,且兩個ES執行個體在同一專用網路和虛擬交換器下。

    說明
    • 兩個ES執行個體分別作為:

      • 遠程叢集Leader Cluster:未經處理資料所在的叢集。

      • 本地叢集Follower Cluster:從Leade叢集中的一個或多個索引複製資料。

    • 如果遠程叢集上已經上傳了同義字檔案,本地叢集中也需要上傳一致的同義字檔案。

  2. 在遠程叢集中添加需要進行網路互連的本地叢集。具體操作,請參見通過配置執行個體網路互連使用跨叢集搜尋功能

  3. 在Leader叢集中建立待遷移的索引。

    1. 登入Leader叢集的Kibana控制台。具體操作,請參見登入Kibana控制台

    2. 在頁面左上方單擊菜單.png表徵圖,選擇Management > 開發工具Dev Tools

    3. 執行以下命令,在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屬性。

  4. 關閉待遷移的索引的物理複製功能。

    說明

    對於6.7.0版本的Elasticsearch執行個體,系統會預設為建立索引開啟物理複製功能。使用CCR功能時,需要先關閉物理複製功能。

    1. 關閉索引。

      POST myindex/_close
    2. 更新索引settings,關閉物理複製功能。

      PUT myindex/_settings
      {
      "index.replication.type" : null
      }
    3. 開啟索引。

      POST myindex/_open

步驟一:串連遠程叢集

  1. 登入本地叢集的Kibana控制台。具體操作,請參見登入Kibana控制台

  2. 在頁面左上方單擊菜單.png表徵圖,選擇Management > Stack Management

  3. 管理(Management)頁面的左側導覽列,單擊遠程叢集(Remote Clusters)。

  4. 單擊添加遠程叢集(Add a remote cluster)。

  5. 在添加遠程叢集頁面中,輸入Leader叢集資訊。

    • 名稱(Name):遠程叢集的名稱,不可重複。

    • Proxy 位址(Proxy address):需要配置為遠程叢集的節點的IP地址:9300。遠程叢集的節點的IP地址,可在遠程叢集的Kibana控制台中,使用GET /_cat/nodes?v命令擷取。所配置的節點中必須包含主節點,建議您配置多個子節點,確保當主節點不可用時,可以繼續使用跨叢集複製功能。

      說明

      由於CCR功能是Kibana通過資料節點之間的TCP連接埠(9300)訪問資料節點IP的形式來進行網路互連,因此不支援HTTP連接埠(9200)訪問。

  6. 單擊儲存

    儲存後,系統會自動連接遠程叢集。串連成功後,串連狀態顯示串連(Connected)

步驟二:配置跨叢集複製

  1. 在本地叢集Kibana控制台的Management頁面,在左側導覽列單擊跨叢集複製(Cross-Cluster Replication)。

  2. 單擊建立Follower索引(Create a follower index)。

  3. 配置跨叢集複製。

    參數

    說明

    Remote cluster

    選擇您已串連的遠程叢集。

    Leader index

    待遷移的索引。本文使用準備工作中建立的myindex索引。

    Follower index

    遷移資料產生的索引。索引名稱不可重複。

  4. 單擊建立(Create)。

    建立成功後,索引狀態顯示為Active

步驟三:驗證資料備份結果

  1. 在遠程叢集的Kibana控制台,執行如下命令,在遠程叢集中插入資料。

    POST myindex/_doc/
    {
      "name":"Jack",
      "age":40
    }
  2. 在本地叢集的Kibana控制台,執行如下命令,驗證資料是否遷移成功。

    GET myindex_follow/_search

    返回結果如下。遠程叢集的Leader索引(myindex)中的資料,已通過CCR功能複製到了本地叢集的Follower索引(myindex_follow)中。資料同步結果

    說明

    Follower索引為唯讀狀態,如果需要和普通索引一樣寫入資料,需要先轉換成普通索引。詳細資料,請參見使用Elasticsearch跨叢集複製進行跨資料中心複製

  3. 在遠程叢集中,重新插入一條資料,驗證增量資料是否即時同步。

    POST myindex/_doc/
    {
      "name":"Pony",
      "age":50
    }
  4. 資料插入後,在本地叢集中進行查看,結果如下。驗證資料同步的即時性

    從以上結果可以看到,通過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