概观:
版本要求:
从集群的版本必须等于或者高于主集群的版本
过程解析:
复制过程主要分为两个阶段(对应ES写入的两个阶段,复制落地到磁盘的segment和复制写入缓存区还未落地到磁盘的数据)
Step1--复制远程leader集群的segment到 本地 follower集群
Step2--复制远程leader集群的 operator records (存在内存缓冲区和translog )到 本地follower集群。
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
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
The follower shard task updates some statistics and immediately sends another read request to the leader shard.意味着,每次请求返回的条件是3个满足一个就返回(读取最大size,读取最大的条数records或者读取等待的时间timeout).
参考官网文档
https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ccr-overview.html