跨集群复制(CCR)功能支持将远程集群中的索引复制到本地集群。 可以在一些常见的生产用例中使用此功能:
- 灾难恢复(DR)/高可用性(HA):如果主群集发生故障,则进行灾难恢复。 辅助群集可以用作热备份
- 地理位置优先:在 Elasticsearch 中复制数据以更接近用户或应用程序服务器,从而减少延迟。优先就近读取数据,提升性能
- 集中报告:将数据从大量较小的集群复制回一个中央集群进行报告
CCR概述:
- 复制是索引层面的,从索引的配置和主索引一致(shards数量,replicas数量)
- 复制是 active-passive 模式:意味着主索引可以写入,而从索引不能直接写入,只能被动的同步主索引的数据
- 复制是 pull-based 模式:是由从集群驱动同步的,对主集群没有影响
- 复制源索引称为 leader 索引
- 复制目标索引称为 follower 索引
版本要求:
- 从集群的版本必须等于或者高于主集群的版本
许可:
CCR过程解析:
复制过程主要分为两个阶段(对应ES写入的两个阶段,复制落地到磁盘的segment和复制写入缓存区还未落地到磁盘的数据)
- Step1--复制远程leader集群的segment到 本地 follower集群
- Step2--复制远程leader集群的 operator records (存在内存缓冲区和translog )到 本地follower集群。
如下图:
1、Step1的过程(复制segment到从集群)
通过remote recovery的功能进行复制,复制远程集群的segment到本地集群,是一个网络密集型的过程。可以通过以下参数控制复制过程对网络的压力。
- ccr.indices.recovery.max_bytes_per_sec :限制每个节点上的总入站和总出站的远程流量(速度)。(默认值是40mb),当主集群和从集群都设置这个值后,先达到限制值的先其作用。即如果主集群设置20mb,从集群设置60mb,那么主集群也只会想从集群发送20mb。这个参数常用
- ccr.indices.recovery.max_concurrent_file_chunks:复制文件的并行度,即可以同时复制接个文件,默认值是5,最大值为10.
- ccr.indices.recovery.chunk_size:复制文件一次请求的最大限制,默认值是1mb
- ccr.indices.recovery.recovery_activity_timeout:leader等待follower恢复请求的时间,默认值是60s
- ccr.indices.recovery.internal_action_timeout: 在远程恢复过程中单个网络请求的超时值,默认值是60s
2、Step2的执行过程(复制缓存区数据到从集群)
过程分解:
主要参数:
- max_read_request_operation_count : 每次request读取的最大operate records的条数。默认值是5120
- max_read_request_size : 每次request读取的最大operate records的size。默认值是32mb
- max_outstanding_read_requests : 最多可以有多少个request同时读取,默认值是12
- read_poll_timeout : 等待新的操作记录的超时时间,默认值是1min
- max_retry_delay : 如果request失败了,等待重试的时间,默认值是"500ms"
- max_write_buffer_count" : writer buffer的最大记录数,默认值是2147483647
- max_write_buffer_size" : writer buffer的最大size,默认值是"512mb"
- max_write_request_operation_count : 一次bulk最大写入条数,默认值是5120
- max_write_request_size" : 一次buld最大写入size,默认值是9223372036854775807b
- max_outstanding_write_requests" : 最多可以有多少个bulk writer , 默认值是9
动手实践
1、参见:ES_CCS/R(二):跨集群搜索 Cross-cluster search (CCS) 创建两个集群,在 cluster_1 上创建命名为: twitter 的索引 并录入测试数据
2、在 cluster_2 上配置 remote cluster 并与 cluster_1连通,如下图:
3、点击 “Cross-Cluster Replication”,create a follower index,如下图:
4、配置完成后,自动复制功能已经在起作用 。同时也可以直接使用 API 来完成,在 cluster_2 的 Kibana 中打入如下的命令:
1 PUT twitter_copy/_ccr/follow
2 {
3 "remote_cluster" : "remote_twitter",
4 "leader_index" : "twitter"
5 }
Flag :
- 收费的玩意,关注即可