跨集群复制(CCR)功能支持将远程集群中的索引复制到本地集群。 可以在一些常见的生产用例中使用此功能:

  • 灾难恢复(DR)/高可用性(HA):如果主群集发生故障,则进行灾难恢复。 辅助群集可以用作热备份
  • 地理位置优先:在 Elasticsearch 中复制数据以更接近用户或应用程序服务器,从而减少延迟。优先就近读取数据,提升性能
  • 集中报告:将数据从大量较小的集群复制回一个中央集群进行报告

CCR概述:

  • 复制是索引层面的,从索引的配置和主索引一致(shards数量,replicas数量)
  • 复制是 active-passive 模式:意味着主索引可以写入,而从索引不能直接写入,只能被动的同步主索引的数据
  • 复制是 pull-based 模式:是由从集群驱动同步的,对主集群没有影响
  • 复制源索引称为 leader 索引
  • 复制目标索引称为 follower 索引

版本要求:

  • 从集群的版本必须等于或者高于主集群的版本

许可:

  • CCR是官方在 6.7 版本以上提供了此功能。此功能以 x-pack 插件的形式提供,遵循Elasticsearch自定义的开源协议,为商业付费功能。

 

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 :

  • 收费的玩意,关注即可