跨集群复制(CCR)

复制经常被采用的策略:从translog拿到更新的历史,把它放到queue里面,然后拿到远程集群去重放所有的action,以达到回放的目的。
同样的ccr工程团队也是优先考虑回放translog,但是很快意识到lucene的translog不能实现快速高效的复制,尝试在translog上增加新的data structures把数据更新动作记录下来,但是lucene是关键的组件涉及复杂的修改,会对整体性能和稳定性有影响。
ccr工程团队尽量采用简单地实现认为功能的实现内置到lucece根基,不应该通过外围的方式实现,
首先lucece只有insert和delete,updata是标记为删除,并且insert一条新的数据。
复制工作需要的基本条件是需要有一个序列号(sequence ID),对lucene索引的操作都有唯一的序列号,添加seq ID后三个应用的设想:
1.可以获取这个ID以后所有操作的步骤;
2.可以快速恢复,集群如果挂了会在别的节点拷贝segment但是耗时长;可以选择translog重放指定seq ID之后的动作;
3.跨集群复制;

Sequence ID

seq ID的添加相当于彻底重写了数据复制逻辑。
1.实现seq ID仅仅seqno是不够的,为什么?
其实给每一个操作加一个seq no远不够,因为es是一个分布式的系统,seqno一定是主分片(primary)负责更新的,因为es所有的写动作一定是先在主分片中verify确认写的有效性,然后在并发在所有副分片同时执行并且等待所有的动作都comfirm后才返回客户端。所以所有的操作是先发生在主分片,如果主分片挂了,副分片提升为主分片,当并发读写很大或者网络分割切换主分片容易出现:原主分片还有残留地读写,新主分片也在读写那么两个分片上生成一样的seqno,这就会在恢复的时候发生冲突,如何处理这种情况?sequence ID = _seq_no + _primary_term,如果出现了主分片的切换,term的值会+1,term可以在cluster stat里面查看,也可在写入数据会返回term值。网络割裂的时候可以通过seq ID获取对应的操作,是存储在lucece文件中,具体指docvalue中。

curl -k -vv -XPOST "https://{ip:port}/foo/doc?pretty" -H 'Content-Type: application/json' --cacert /cert/root-ca.pem --key /cert/{ip}.key.pem --cert /cert/{ip}.crt -d'{"bar" : "baz"}'

查询结果如下:

当有seq ID,下一步是标记现在的操作做到哪一步,引入两个标志位local checkpoint和global checkpoint。
local checkpoint 是指在shard内部操作的标志位,代表这个数字之前的所以操作在这个shards内部操作成功,即成功落盘。
对于一个集群每个数据有多个副本,global checkpoint 代表这个number以前的所有操作在主分片和副分片中都执行成功的,是由primary shards负责更新,包括seqID也是由primary shards负责生成,在副本向主分片确认任何一笔写操作时,都会返回local checkpoint给主分片,因为主分片需要知道副分片哪些已经写成功了,主分片会汇总所有副本上游标位置来确定是否更新global checkpoint。

如此快速恢复不需要比较所有的操作,只要回放最近的global checkpoint以后的操作,提供了非常明显的界限。global checkpoint以前的操作是所有副本确认生效的,回放游标以后的操作。
但是并非所有的恢复都会回放operation 重做只针对于分片落后比较小。如果分片已经断线很久和别的分片差别很大回放耗时时间长,会直接拷贝segment。

Soft delete

  1. lucene原来是怎么delete文档的?

通过标志位,segment刷到磁盘是不会改变的,删除文档只是在另外文件中添加删除标记,这个文件只有在段合并的时候会读那些文档已经被逻辑删除,然后在磁盘中删除相应segment merge生成更大的segment文件。
标记删除后merge真正的删除称为hard delete,因为收到merge干扰。

  1. 为了实现跨集群复制,引入soft delete。
    所有删除的操作在复制到远端的集群前是不可以被merge删除segment的,否则远端集群会缺少一个删除的动作。
    为此,用软删除去保存在Lucene的删除操作,以便用于重放。即:lucene 可以标记一个字段为soft delete,不会被merge删除,直到操作被完整成复制到远端集群时,soft delete转变为原来lucene delete之后merge删除。

  2. 那么这个soft delete会维持多久,什么时候可以被真正删除?
    复制到远端集群,如果远端集群的通讯断了,游标一直保持在原来的位置会导致soft delete的文档越来越多,后续操作都不能merge 删除,对查询效率有影响。为控制无限制的增长,引入retention lease 代表如果soft delete多长时间内是有效的,超过retention lease 时间soft delete标记被删除,段合并后被删除。

CCR 复制流程


1.以索引为单位建立follow拉取;
2.一对多复制,支持多个cluster同时follow一个索引;
3.follow是单向、主从机制:复制过程中,leader index支持增删改,follow index只读。

CCR通讯链路上的复制

简单来说采用long pull机制由follow index拉取,由远端集群发送请求给主集群,主集群检查是否有operation需要发给客户端,如果需要会立即响应并持续不断的发给客户端。如果没有需要同步的数据,server端会在timeout时间内把连接block住,没有断开连接,并且在这段时间内反复检查是否有数据发送,最后回包给客户端,客户端收到回包立即发出下一个请求。

微观结构分析

以索引为单位建立follow,一个索引有多个分片,微观上是shard为单位建立follow,所以主从索引的分片一致。
seq ID和soft delete是lucene的机制,一个shard是完整的lucene数据结构。
如图,retention lease2标记坐标的操作都已经被复制,可以被merge删除,注意:有N个远端集群对应有N个retention lease。所以lucene merge删除时会选择最小lease 之前的segment可删除,由主分片维护retention lease。

复制流程

  1. 初始阶段(initialize stage)
    为提升效率,初始阶段会把主集群的segment以文件拷贝的形式 拷贝到远端集群,当initialize stage结束后进入到follow stage。
  2. follow stage
    这阶段会把operation拿到远端重放,加快同步速度。
  3. pause follow
    pause follow时,主分片会记住retention lease的状态和游标位置,还有一种情况网络中断,连接重试直至retention lease超时,retention lease一旦失效两个索引不可能再同步因为部分segment已经被merge删除,有些操作无法追踪。
  4. unfollw
    unfollow之后还能被重新follow, 之前的segment也会被merge删除,需要重新intialize

主数据中心挂了,将follow index变成 leader index。现阶段seqID业务冲突难处理,segment拷贝会导致恢复速度并不很快

#pause replication
post /<follow_index>/_ccr/pause_follow
#close index
post /<leader_index>/_ccr/pause_follow
#unfollow
post /<follow_index>/_ccr/unfollow
#open the index
post /<leader_index>/_ccr/open
  1. 双向复制场景

6 创建auto follow

 curl -k -vv -XPUT "https://{ip:port}/_ccr/auto_follow/beats"  --cacert /cert/root-ca.pem --key /cert/{ip}.key.pem --cert/cert/{ip}.crt -d'{"remote_cluster" : "lqt_index","leader_index_patterns" : ["lqt_*","wx_bill_*"],"follow_index_pattern":"{{leader_index}}-copy"}'

跨集群复制(CCR)相关推荐

  1. Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR

    0.引言 集群管理是ES的核心重点,因此相关的知识点至关重要,本期主要针对数据流.索引生命周期.可搜索快照.跨集群搜索.跨集群复制进行讲解 1.数据流 Data Stream 官方文档:Data st ...

  2. Elasticsearch(CCR)主从同步之跨集群复制

    注: 部分概念介绍来源于网络 1.跨集群复制Cross-cluster replication (CCR) 跨集群复制最早发布版本Elasticsearch 6.7 版本 跨集群复制 (CCR) 功能 ...

  3. Elasticsearch:跨集群复制 Cross-cluster replication(CCR)

    跨集群复制(CCR)功能支持将远程集群中的索引复制到本地集群. 可以在一些常见的生产用例中使用此功能: 灾难恢复(DR)/高可用性(HA):如果主群集发生故障,则进行灾难恢复. 辅助群集可以用作热备份 ...

  4. Elasticsearch跨集群复制(CCR)介绍

    跨集群复制(CCR,cross-cluster replication)属于xpack增强包中的功能,需要白金级.企业级证书才可使用.CCR可以将远程集群(leader)中的索引复制到本地集群(fol ...

  5. 最佳实践 | 基于腾讯云ES如何跨地域容灾?跨集群复制为您解忧!

    作者:吴容,腾讯云大数据Elasticsearch高级开发工程师 腾讯云大数据ES目前已经提供了多可用区部署,即支持同地域跨机房的高可用容灾方案,满足了绝大多数客户的需求.但是依然会有部分客户希望进一 ...

  6. elastic 跨集群复制 cross cluster replication

    CCR 是一项白金级功能,开源免费版不支持这个功能. 可通过 30 天试用许可证获取:该许可证既可通过 start trial API 激活 ,也可以直接从 Kibana 激活. 1. kibana激 ...

  7. Hadoop 跨集群复制文件

    hadoop distcp -pbc hdfs://namenode1/test hdfs://namenode2/test 如果报用户权限写入被拒绝,切换到hdfs

  8. 3分钟学会使用Elasticsearch跨集群复制功能(CCR)

    当您需要将本地Elasticsearch集群中的索引数据迁移到一个远程集群中,或者将一个远程集群中的索引数据迁移到本地集群,可通过跨集群复制CCR(Cross Cluster Replication) ...

  9. Mysql集群拆分_MySQL 5.7跨集群拆分迁移

    一.背景 一些业务时间久了之后,会进行一些业务逻辑的修改,通常也需要数据库的拆分迁移.这里假设源数据库为集群A(每个集群中仅有一个数据库,这里集群A就代表了数据库A),目标数据库为数据库B.C,之前甲 ...

最新文章

  1. ASP.NET MVC上传文件----uploadify的使用
  2. python 百度词典_python在线抓取百度词典的翻译结果翻译单词
  3. python死机_请问下为什么我用PYTHON写编译器一旦用READ就死机
  4. 开创先河!《王者荣耀国际版》成为东南亚运动会正式比赛项目
  5. 请你努力成为一名优秀的软件工程师,拒绝做优秀的码农!
  6. 第二百零一天 how can I坚持
  7. 全球最年轻的Python程序员;13 岁创建 RISC-V 内核,后浪程序员有多恐怖?
  8. 在.NET中调用Oracle9i存储过程经验总结
  9. 一个对oi选手的感想
  10. 国外GIS资源网站分类整理 来自www.gis520.com
  11. SCAU高级语言程序设计--实验4 选择结构(3)
  12. R统计绘图-使用rgl或pca3D包绘制3DPCA图
  13. wordpress媒体库增加分类和标签
  14. 如何使用Python进行投资收益和风险分析
  15. 【iOS】Sign in with Apple
  16. ppt编写一个抽奖系统_PPT抽奖程序
  17. 腾讯2018春招实习生和秋招面试问题
  18. 复数的辐角的主值的计算公式
  19. 禁止Altium designer(其他软件同样适用)联网的配置操作
  20. 高效又稳定的ChatGPT大模型训练技巧总结,让训练事半功倍!

热门文章

  1. CUDA:CUDA out of memory. Tried to allocate 100.00 MiB (GPU 0; 15.78 GiB total capacity; 14.24 GiB al
  2. 苹果第一台计算机的诞生的,纪念Mac诞生30周年:第一台Mac电脑深度拆解
  3. 学习笔记【Java 虚拟机②】垃圾回收
  4. java怎么求偏态函数_偏态分布的均值与中位数关系
  5. react+antd实现图片上传并且剪裁(请参照最新文章,此案例有bug)
  6. 重装系统失败解决办法|修复方法
  7. Microsoft Graph for Office 365 - 认证和授权场景
  8. python爬取flash数据_python爬虫: 爬取flash播放页面的信息
  9. c语言visit_数据结构(c语言)——入门数据结构的世界:顺序线性表(一)
  10. 关于void (visit)(const ElemType )的理解