mysql同步elasticsearch调研

db同步elasticsearch调研背景

目前项目采用的是更新数据后再更新elasticsearch,各种历史原因导致很多数据并不是同步的,业务互相紧耦合, 所以需要调研适合团队发展的 db同步es机制,从业务层面剔除这部分功能维护。

下面是本人在搭建、配置、调试过程中一些总结和踩完坑后整理的配置。

搭建测试环境,低版本es:

下载elasticsearch2.3.3安装包。

下载地址:https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.3/elasticsearch-2.3.3.tar.gz

安装elasticsearch-head插件,下载地址:

https://github.com/mobz/elasticsearch-head/archive/master.zip

插件安装

第一种方案 logstash-input-jdbc

1.安装logstash

此方案为定时扫描表进行同步方式,优点用户多,使用方便 缺点实时性不好,最少一分钟同步

安装前要求安装java环境

安装logstash插件,logstash-input-jdbc

确保安装ruby gem

更换源

配置

mysql.conf

实际同步sql文件 sync.sql

elasticsearch外机访问需要在elasticsearch.yml配置:

运行(查看控制台扫描、添加纪录) 如果首次全亮同步,去掉配置文件中where条件

此处注意es要手动创建mapping,否则时间类可能插入报错

第二种方案 go-mysql-elasticsearch

基于binlog的同步方案,优点比较实时.缺点需要改造数据库配置

项目地址: https://github.com/siddontang/go-mysql-elasticsearch

首先查看mysql的binlog纪录形式

配置my.cnf

1.安装golang,设置gopath

2.安装项目

3.创建river.toml配置最简化版

实际情况可能多个表组成一个index type,具体配置如下

项目启动:

查看控制台输出。

其他注意事项:

当修改表结构后,要删除./var/下面的信息

控制台日志

以上工具实验结果个人总结:

1. logstash-input-jdbc工具

优点用户比较多,操作简单,不需要修改数据库配置。因为直接定时sql扫描,及时性最快也需要一分钟可同步, 无法响应物理性数据删除 ,数据量和性能方面需要压测。

2. go-mysql-elasticsearch工具

优点采用binlog同步方式,测试过程响应及时。但是需要修改数据库配置, 稳定性、数据量同样需要压测

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181103G12IE900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券