不为失败找理由,要为成功找方法。

跨集群数据同步方案讨论

Elasticsearch | 作者 yayg2008 | 发布于2018年05月21日 | 阅读数:17942

虽然ES本身就是一个分布式系统,但在生产实践中,往往还是让所有ES节点落在单机房内,各个数据中心之间,采用其他方式来同步数据。那么如何来做数据同步,以及如何确保数据一致性,就成了不得不面对的问题。现提出我知道的方案,供大家讨论,也希望大家伙能分享自己的方案~~~
方案一,双写
在数据写入ES时,通过MQ或者其他方式实现数据双写或者多写,目前很多MQ都有数据持久化功能,可以保障数据不丢;再结合ES各种状态码来处理数据重复问题,即可实现多中心数据的最终一致。
方案二,第三方数据同步
例如使用mysql的主从同步功能,在不同数据中心之间,从本机房的mysql同步数据到ES,依托mysql数据一致性来保障ES数据一致。datax,StreamSet均提供了类似功能。
方案三,基于ES translog同步
读取translog,同步并重放,类似于mysql binlog方式。看起来这种方式最干净利落,但涉及到ES底层代码修改,成本也较高,目前已有的实践:。[/url]
抛砖引玉~~~
已邀请:

medcl - 今晚打老虎。

赞同来自: laoyang360 Dm yayg2008 JackGe famoss chinagrowing harvey wajika 0c0c0f cccthought更多 »

关于方案1,有兴趣试试我的这个小工具么,目前支持多集群多写了,自带本地磁盘队列,支持扩展外部 MessageQueue,如 Kafka,RabbitMQ。地址: https://github.com/medcl/elasticsearch-proxy
 
方案2最复杂,需要从原始数据开始进行处理,需要从 MySQL 到 ES 的文档转换,MySQL 的数据表达方式往往不够直观,使用起来不是很方便。
 
方案3,目前 ES 的 Translog 不能直接读取,修改底层代码产生新的分支,不具实际可行性。
 
还有方案么,有的:
 
方案4,ES 正在实现新的 CCR,cross cluster replication, 基于底层 sequence id 机制,实现的 Changes API,一个集群可被另外一个集群或是本集群“订阅”,从而可以实现数据复制,进行同步,可以是跨数据中心集群也可以本地集群的数据同步。
 
 
 

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

有没有考虑esm定期快照,备份功能呢

luyuncheng

赞同来自:

crc 是CCR is designed around an active-passive index model, 貌似如果真出现机房断了,好像不能做到异地写容灾?

要回复问题请先登录注册