基于Canal的mysql数据库同步ElasticSearch方案实现环境搭建

9 篇文章 0 订阅
5 篇文章 0 订阅

基于Canal的mysql数据库同步ElasticSearch方案实现环境搭建

一、引文

       在互联网业务系统中,由于数据量级大,涉及B端商家&C端客户等原因,很多情况下需要针对生产数据库进行数据异构,如果通过程序等方式进行开发,开发量大且业务耦合度较高。基于阿里开源的Canal开源框架,可以实现mysql数据秒级甚至毫秒级的同步和灵活配置化异构数据,其中canal-adapter模块已经实现了es、hbase、rdb等目标源的适配。本文主要介绍如何搭建mysql-->canal-->es的数据同步方案。

二、主要步骤

1、环境安装

JDK安装(1.8+版本)

可直接在oracle官网上下载1.8以上JDK,链接为:https://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downloads-2133158.html

mysql安装

具体链接地址:https://dev.mysql.com/downloads/workbench/,具体安装步骤不在此赘述。

ElasticSearch安装

这里重点介绍一下elasticSearch的安装,首先注意,此处选择的canal-1.1.4版本不支持elasticSearch-7.*.*以上版本,可以选择6.*.*版本安装,本文选择的是elasticSearch-6.1.3版本,后面选择的ik分词器,也必须和elasticSearch的版本保持一致,否则可能会出现不兼容的情况。

下载:

Elasticsearch官网:https://www.elastic.co/cn/downloads/past-releases#elasticsearch,在windows环境下直接下载zip包即可。

 安装

zip包不需要安装,直接解压即可。

运行

点击elasticsearch-6.1.3的bin目录下的elasticsearch.bat,即可看到cmd运行窗口,从日志上可以看出有两个访问端口9300和9200,分别是Java程序访问端口、浏览器或者postman访问端口,直接打开浏览器,访问http://127.0.0.1:9200,可以看到下图效果:

对于各种复杂操作,elasticSearch的只提供了后端API,web端的操作很有限,比如查询某个index下的mapping结构,使用get请求http://localhost:9200/userinfo/_mapping,但是各类查询及操作极不方便,elasticsearch-head插件时候专门为elasticSearch提供的web客户端工具,下载地址为:https://github.com/mobz/elasticsearch-head

安装elasticsearch-head的前提,需要安装node和grunt:

node安装:从https://nodejs.org/en/download/直接下载相应版本的MSI安装即可;

grunt安装:在安装完node后,直接执行npm install -g grunt-cli 安装grunt ,执行grunt -version即可查看安装的grunt版本号;

elasticsearch参数配置修改:

在elasticsearch-6.1.3的config目录下,修改elasticsearch.yml,在最后增加以下配置,以便elasticsearch-head可以访问es服务:

#增加新参数,这样head插件可以访问es
http.cors.enabled: true 
http.cors.allow-origin: "*" 
node.master: true
node.data: true

可以自行调整node和cluster等配置:

cluster.name: es-63-crm 

node.name: node-101 

network.host: 0.0.0.0 

http.port: 9200 

以上步骤都操作完成之后,打开cmd,将路径转入elasticsearch-head-master下,执行grunt server,在浏览器中输入http://localhost:9100/,效果如下:

建立java工程,引入spring-data-elasticsearch相关依赖,基于ElasticsearchTemplate直接进行创建、更新、删除index等操作:

ik分词器安装(可选),elasticsearch默认分词器采取单个字分词,效果较差,可以集成IK分词器,需要和elasticsearch版本保持一致,此处我们同样选择6.1.3版本,直接选择zip包,下载后解压至elasticsearch-6.1.3\plugins\ik目录下(ik文件夹需要自行创建)。关于分词器的配置优化,此处不做展开讨论,可以自己通过elasticsearch-6.1.3\plugins\ik\congfig目录下的IKAnalyzer.cfg.xml配置文件进行调整。

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.1.3

重新启动elasticsearch,即可看到如下效果,至此关于elasticsearch环境搭建已经结束。

canal安装

canal基于Apache License 2.0开源协议,项目GitHub地址:https://github.com/alibaba/canal

本文选择的canal版本为1.1.4,主要模块包括canal.deploy-1.1.4、canal.adapter-1.1.4、canal.admin-1.1.4:

canal.deploy:canal服务端功能,负责解析mysql源数据库binlog日志;

canal.adapter:将读取出来的数据与目标数据存储源进行匹配,目前支持elasticsearch、hbase、rdb等三种模式;

canal.admin:canal管理端工具,支持面向WebUI的canal管理能力;

可以直接在https://github.com/alibaba/canal/releases中下载对应的各模块tar.gz压缩包,解压后无需安装,修改相应的配置,在windows平台下运行bat批处理命令即可运行。

在下载过程中,由于canal-adapter包较大,网速较慢,会出现下载超时问题,可以直接将整个canal源码打包下载后倒入IDE,自行编译成tar.gz包。(利用maven打包,需要注意将默认的maven仓库地址修改为你自己所在公司的私服仓库,否则可能会出现遇到报错。)

canal参数配置

canal-deploy配置

参数主要配置在conf目录下的canal.properties和canal_local.properties(window下以local配置为准)


canal.instance.filter.regex作为数据库schema和table过滤规则,主要有以下几种方式:

  1. 所有表:.* or .*\\..*
  2. canal schema下所有表: canal\\..*
  3. canal下的以canal打头的表:canal\\.canal.*
  4.  canal schema下的一张表:canal.test1
  5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)

canal-adapter配置

canal-adapter同样也有两个主要的配置文件需要根据实际情况进行调整,包括canal.adapter-1.1.4\conf目录下的application.yml配置文件和canal.adapter-1.1.4\conf\es目录下的*.yml文件(此处以同步至es为例,以example.yml为例。),

至此,canal相关的配置及环境搭建全部完成。

2、模块联调及运行效果:

将elasticsearch、canal-deploy、canal-adapter、mysql等所有服务开启,在数据库端尝试插入一条数据,看在es侧看到有数据同步更新:

至此,整个模块联调完成,后续就是需要增加zk,基于多表复杂关联、性能调优等做优化。

三、经验总结

在环境搭配过程中遇到的坑很多,需要逐个细节了解比对,比如mysql的配置,es的配置,canal与es中mapping中的匹配映射关系,好在这些都是开源的,实在找不到可以下载源码在本地调试,调试过程中,源码阅读和日志异常输出都很关键,在canal同步es的最后一步调试过程中,出现canal接受到mysql的binlog数据,但是始终无法同步至es,最后跟进源码,在canal-adapter中将关键包的log日志级别调整为Trace,最终定位到是date日期类型格式化异常,此问题目前还未解决,只是在同步时进行了忽略,后续还需要解决这个问题。整个过程花费的时间比较零碎,最重要的是能细心、耐心、恒心。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值