本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

【MySQL运维】Canal集群部署

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

一、Canal工作原理

Canal基于数据库增量日志进行解析,提供增量数据的订阅和消费。它伪装成MySQL slave去向master进行请求,然后将获取到的binlog进行解析成特定格式后推送到Kafka,最后供后端服务消费。Canal的架构图如下,图中的Server代表了Canal的实例;instance对应一个数据队列,一个Server可以有多个instance;instance中包含了eventParser(数据源接入,模拟slave与master交互)、eventSink(Parser和Store的连接器,进行数据过滤、加工与分发eventStore(数据存储)、metaManager(增量订阅与消费信息管理)

canal1.jpg


二、安装Zookeeper与Kafka集群

Zookeeper与Kafka的部署可参考本站文章——《Kafka集群部署使用与扩容教程


三、Canal单节点模式

1、MySQL开启二进制日志,并且配置为row模式,大概如下:

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


2、为Canal创建用户并授权

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


3、下载Canal安装包,地址为https://github.com/alibaba/canal

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


4、修改Canal实例配置

vi conf/example/instance.properties
canal.instance.mysql.slaveId = 1234  #server id不要和主库与其他从库重复
canal.instance.master.address = 192.168.94.10:3306  #主库地址 
canal.instance.master.journal.name = 
canal.instance.master.position = 
canal.instance.master.timestamp = 
canal.instance.dbUsername = canal #canal用户账号 
canal.instance.dbPassword = 123456  #canal用户密码
canal.instance.defaultDatabaseName =  #需要同步的数据库
canal.instance.connectionCharset = UTF-8
canal.instance.filter.regex = .\*\\\\..\*  #需要过滤的表


5、启动Canal

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


四、Canal集群+Kafka模式

1、Canal 1.1之后默认支持将接受到的binlog数据直接传递给MQ,目前默认支持的MQ系统有kafka和rocketmq,这里列出了每个canal节点需要修改的配置,其他的保持默认配置即可

#canal配置文件
vi /usr/local/canal/conf/canal.properties
canal.serverMode = kafka  #默认是tcp,修改为kafka,客户端从kafka消费数据,感知不到canal的存在
canal.mq.flatMessage = false  #是否扁平消息
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


#instance配置文件
vi /usr/local/canal/conf/example/instance.properties
canal.instance.mysql.slaveId=2131

# 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=

# position info
canal.instance.master.address=172.20.0.144:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=

# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=123456

canal.mq.topic=example
canal.mq.dynamicTopic=pluto_is_web,pluto_ps,pluto_ps_operation,pluto_ps_operation_ap_test,channel_cpp  #需要创建的topic

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

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


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

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

已有 0/254 人参与

发表评论:

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

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