前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES CCR同步最佳实践

ES CCR同步最佳实践

原创
作者头像
沈小翊
修改2023-11-08 22:21:30
3861
修改2023-11-08 22:21:30
举报
文章被收录于专栏:大数据生态大数据生态

准备工作: 创建两个白金版ES集群,要求版本在7.0及以上

CCR同步实现

1. 如图,首先在follower集群建立两个集群的远程连接(连接的节点只添加一个也会发现所有seed nodes)

建立连接需要让follower集群使用leader集群证书

2. 建立单个索引同步链接(可同步存量数据)

3. 建立索引pattern同步链接(无法同步存量数据)

接下来,在leader集群创建对应索引,进行的增删查改操作会在几十秒内同步到follower集群

ES CCR同步机制(速度默认40MB/s)
测试1

假如test1被follower集群同步后,将follower集群的follower index test1删除后,对leader index test1做任意操作也不会同步到follower集群中,除非新建follower index test1

符合预期,follower index删除后同步停止。

测试2

如果在test1同步完成后,删除源端leader集群索引test1,再创建,更改数据,不会进行同步。但是只要删除follower集群的test1,后面follower集群会创建test1索引自动同步数据增删查改。

符合预期,因为同步操作是根据分片进行的。

总结

在follower集群新建follower index可以将已有index同步过来,pattern不行。

CCR只会同步建立auto index pattern之后,leader集群新建立的索引的数据更改。

参考链接:Tutorial: Disaster recovery based on uni-directional cross-cluster replication | Elasticsearch Guide [8.9] | Elastic

CCR单向容灾功能

当leader集群不可用时,比如master节点挂掉,此时可以使用follower集群。

1. 将follower索引提升为常规索引,以便它们接受写入。通过以下方式实现:

代码语言:javascript
复制
首先,暂停关注者索引的索引
POST /test*/_ccr/pause_follow
接下来,关闭关注者索引
POST /test*/_close
取消关注领导者索引
POST /test*/_ccr/unfollow
最后,打开关注者索引(此时是常规索引)
POST /test*/_open

2. 业务侧更改使用follower集群

测试

1. follower集群已经同步完leader集群的全部索引

2. 打掉ES master节点模拟不可用场景

3. 测试follower集群的follower index不能写入数据

4. 执行下列命令,将testxxx索引恢复为普通索引

代码语言:javascript
复制
//无法使用通配符,快速恢复全部索引使用脚本遍历执行
POST test2023091115581694419112/_ccr/pause_follow
POST test2023091115581694419112/_close
POST test2023091115581694419112/_ccr/unfollow
POST test2023091115581694419112/_open

5. 此时follower index恢复为普通索引,可以正常写入

Leader集群节点全挂情况下

此时follower集群远程连接失效

很明显,此时所有follower index无法同步数据

leader集群恢复后,远程连接也会恢复,远程同步会继续进行

follower集群全挂情况下

37分kill掉folower集群,此时继续往leader集群写入数据,follower恢复后发现了37分后的新索引,数据一致。

结论: follower宕机恢复后会继续同步leader集群新写入的数据。

CCR双向容灾功能

1. 为DC1和DC2集群分别配置一个ccr远程连接

2. 在DC1集群创建logs-dc1索引,在DC2集群创建logs-dc2索引

3. 为DC1集群配置auto index pattern同步所有logs-dc1*索引到DC2集群(DC2集群中logs-dc1*索引为只读的follower索引)

4. 为DC2集群配置auto index pattern同步所有logs-dc2*索引到DC1集群(DC1集群中logs-dc2*索引为只读的follower索引)

5. 在DC1集群为logs-dc1添加别名logs,设置logs-dc1为写入索引

6. 在DC1集群为logs-dc2添加别名logs,设置logs-dc2为写入索引

7. 业务方面日常往DC1集群的logs索引写入,logs-dc1会不断同步数据给DC2集群

8. 当DC1集群故障时,切换到DC2集群依旧对logs索引写入,此时写入到logs-dc2索引,会不断同步给DC1集群

总结: 可以看到,建立双向复制相较于单向而言,无需手动恢复follower索引,但配置相对更复杂,对于不同的业务写入都需要执行上述流程。

参考链接: Bi-directional replication with Elasticsearch cross-cluster replication (CCR) | Elastic Blog

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CCR同步实现
    • ES CCR同步机制(速度默认40MB/s)
      • 测试1
      • 测试2
      • 总结
  • CCR单向容灾功能
    • 测试
      • Leader集群节点全挂情况下
        • follower集群全挂情况下
        • CCR双向容灾功能
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档