本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • 【MySQL运维】Canal集群模式与多数据库同步部署

【MySQL运维】Canal集群模式与多数据库同步部署

发布:TangLu2020-3-23 18:28分类: MySQL 标签: mysql canal

一、Canal工作原理

Canal基于数据库的增量日志进行解析,然后提供增量数据的订阅和消费。Canal会将自己伪装成MySQL的 Slave去向主库进行同步请求,然后将获取到的binlog解析成特定格式,最终推送给Kafka供后端服务进行消费


二、Canal集群部署前的准备工作

1、安装Zookeeper与Kafka集群

之所以要安装Kafka是因为Canal 1.1开始支持将接受到的binlog传递给MQ,目前支持的MQ系统有kafka和rocketmq。Zookeeper与Kafka的部署可参考本站文章——《Kafka集群部署使用与扩容教程


2、MySQL主库相关配置

开启binlog,并配置为row格式

[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复


为Canal创建用户并授权

grant select,replication slave,replication client on *.* to  'canal' @ '192.168.94.10'  identified by '123456'  #IP需要修改为Canal节点所在的信息


三、Canal集群模式部署

1、下载Canal安装包,地址为https://github.com/alibaba/canal,推荐使用1.1.4版本,该版本引入了canal-admin,可通过WebUI对Canal进行管理

wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
tar zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canal


2、Canal主要配置文件有2个,一个是conf/canal.properties,一个是conf/example/instance.properties。Canal有个强大的地方,修改完配置文件后不需要重启服务,会自动重新加载。


a.修改conf/canal.properties,该文件属于canal全局配置文件,用于配置canal工作模式、zk与kafka等信息

canal.serverMode = kafka  #默认是tcp,修改为kafka,客户端从kafka消费数据,感知不到canal的存在
canal.mq.flatMessage = false  #是否将binlog转为JSON格式。false代表使用原生Protobuf格式
canal.mq.servers = 192.168.94.10:9092,192.168.94.11:9092,192.168.94.12:9092  #kafka集群地址
canal.zkServers = 192.168.94.10:2181,192.168.94.11:2181,192.168.94.12:2181  #zk集群地址
canal.instance.global.spring.xml = classpath:spring/default-instance.xml  #默认的file-instance不支持HA持久化,需要修改为default


b.修改conf/example/instance.properties。这是每个Canal实例的配置文件,里面配置了需要同步的数据库信息、mq信息等。由于Canal同时支持Kafka和RocketMQ,并且很多配置采用同一个选项,所以某些选项只针对某个MQ生效。instance.properties文件所属的目录就属于一个实例,canal默认已创建好一个名为example的示范实例,如果要同步多个数据库实例的话,复制example目录后修改instance.properties即可

#################################################
canal.instance.mysql.slaveId=2131  #ID不可与主库和其他从库重复
canal.instance.gtidon=false

# position info  需要同步的数据库信息
canal.instance.master.address=192.168.10.56:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=

canal.instance.tsdb.enable=true
canal.instance.dbUsername=canal  #canal在数据库中的用户
canal.instance.dbPassword=123456  #canal用户的密码
canal.instance.connectionCharset = UTF-8
canal.instance.enableDruid=false
canal.instance.filter.regex=.*\\..*
canal.instance.filter.black.regex=

# mq config
canal.mq.topic=example  #mq里的topic名
canal.mq.dynamicTopic=pluto_is_web,pluto_ps,pluto_ps_operation,pluto_ps_operation_ap_test,channel_cpp  #动态创建的topic,支持多种配置语法,这里为每个库创建一个topic
canal.mq.partition=0


3、启动Canal

bin/startup.sh  #启动后需要观察2个日志,logs/example/example.log和logs/canal/canal.log


4、启动每Canal节点后,通过zk客户端可以查看当前正在工作的Canal节点。当Canal主节点故障时,客户端能通过zk获取到另外节点继续工作

zkcli.sh
get /otter/canal/destinations/example/running


5、推荐配置Canal Admin来使用图形化界面管理Canal

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《【MySQL运维】Canal集群模式与多数据库同步部署
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-575.html  [生成短网址]

已有 0/2768 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~