【ELK】同步数据方案
ES集群间迁移
https://segmentfault.com/a/1190000039052421 Elasticdump数据备份与数据转移索引还原(实现不同ElasticSearch集群之间索引迁移)
Mysql数据同步到ES方案
方式:同步双写(数据写入DB时,同时写ES)
优点:逻辑简单
缺点:硬编码(写入MYSQL地方都要ES写入代码);业务强耦合;存在双写失败丢失数据风险(ES系统不可用、应用数据与ES网络故障、应用重启导致来不及写入ES);
方式:异步双写Worker
数据库的相关表中增加一个字段为timestamp的字段,任何crud操作都会导致该字段的时间发生变化;增加一个定时器程序(京东内部叫Worker),让该程序按一定的时间周期扫描指定的表,把该时间段内发生变化的数据提取出来;
缺点:时效性问题(定时器周期长);轮询压力
阿里Canal(binlog)
canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消费,
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
- MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
- canal 解析 binary log 对象(原始为 byte 流)
Logstash(不基于binlog,基于mysql定时)
定时同步,从DB通过mysql拼接数据写入ES
可选不同的input和output插件
方案:导入文件(logstash-input-file)
通过执行GET myindex/_search,检索历史数据是否已导入成功
方案:logstash-input-jdbc定时执行SQL将结果写入流 // 可能不支持7.X ES
可实现历史记录的全量同步,问题
1)如何知道什么时候同步历史数据完成?
2)准同步,依赖定时同步的周期
https://zhuanlan.zhihu.com/p/40177683 实战过程
https://cloud.tencent.com/developer/article/1694124?from=article.detail.1647080 利用logstash将mysql多表数据增量同步到es
bin/logstash-plugin install logstash-input-jdbc 对接mysql
bin/logstash-plugin install logstash-output-elasticsearch 对接ES