ElasticSearch跨集群复制(CCR,Cross-Cluster Replication)是一种用于在不同Elasticsearch集群之间同步数据的功能。通过CCR,用户可以在主集群(Leader Cluster)和从集群(Follower Cluster)之间建立复制关系,从而实现数据的实时备份、灾难恢复或地理分布式数据访问等目标。
以下是关于如何配置和使用Elasticsearch CCR的详细指南。
领导者索引是主集群中的索引,所有写入操作都发生在这里。它的状态和数据会被复制到从集群。
跟随者索引是从集群中的索引,它会自动从领导者索引中复制数据。跟随者索引通常是只读的。
在开始配置之前,请确保以下条件满足:
在从集群中添加主集群为远程集群。编辑elasticsearch.yml
文件或通过API完成配置。
elasticsearch.yml
cluster.remote.leader_cluster:
seeds: ["<leader-cluster-ip>:9300"]
重启从集群以应用更改。
使用以下命令将主集群添加为远程集群:
PUT /_cluster/remote/info
{
"leader_cluster": {
"seeds": ["<leader-cluster-ip>:9300"]
}
}
验证远程集群是否成功添加:
GET /_cluster/remote/info
确保两个集群都已启用CCR功能。默认情况下,CCR功能可能需要额外许可(如黄金或铂金许可证)。可以通过以下命令检查许可证状态:
GET /_license
如果未启用,需升级许可证或联系管理员。
在从集群中创建一个跟随者索引,并将其绑定到主集群的领导者索引。
示例命令:
POST /_ccr/follow
{
"index": "follower_index",
"remote_cluster": "leader_cluster",
"leader_index": "leader_index"
}
上述命令中:
follower_index
是从集群中的索引名称。leader_cluster
是远程主集群的名称。leader_index
是主集群中的索引名称。检查复制状态以确保一切正常:
GET /follower_index/_ccr/stats
输出应包含类似以下内容:
{
"index": "follower_index",
"shards": [
{
"shard_id": 0,
"status": "following",
"leader_global_checkpoint": 123,
"follower_global_checkpoint": 123
}
]
}
通过CCR,可以将数据从一个地理位置复制到另一个地理位置,以减少延迟或提高可用性。
CCR可以用作一种实时备份机制,确保关键数据始终有副本。
当主集群发生故障时,可以从集群可以接管服务,确保业务连续性。
以下是CCR工作流程的Mermaid代码表示:
sequenceDiagram participant LeaderCluster as 主集群 participant FollowerCluster as 从集群 LeaderCluster->>FollowerCluster: 添加为主远程集群 FollowerCluster->>LeaderCluster: 请求领导者索引元数据 LeaderCluster-->>FollowerCluster: 返回元数据 FollowerCluster->>LeaderCluster: 开始同步数据 LeaderCluster-->>FollowerCluster: 发送增量更新