04——redis与mysql数据双写一致性
一、canal
-
是什么
canal[ka’nel,中文翻译为水道/管道/沟渠/运河,主要用途是用于MySQL数据库增量日志数据的订阅、消费和解析,是阿里巴巴开发并开源的,采用Java语言开发;
历史背景是早期阿里巴巴因为杭州和美国双机房部署,存在跨机房数据同步的业务需求,实现方式主要是基野业务tig9er(触发器)获取增量变更。从2010年开始,阿里巴巴逐步尝试采用解析数据库日志获取增量变更进行同步,由此衍生出了canal 项目;
-
能干嘛
-
数据库镜像
-
数据库实时备份
-
索引构建和实时维护(拆分异构索引、倒排索引等)
-
业务cache刷新
-
带业务逻辑的增量数据处理
-
-
下载地址
二、工作原理
-
传统mysql主从复制工作原理
MySQL的主从复制将经过如下步骤:
1、当master主服务器上的数据发生改变时,则将其改变写入二进制事件日志文件中;
2、salve从服务器会在一定时间间隔内对master主服务器上的二进制日志进行探测,探测其是否发生过改变,
如果探测到master主服务器的二进制事件日志发生了改变,则开始一个/O Thread请求master二进制事件日志;
3、同时master主服务器为每个l/O Thread启动一个dump Thread,用于向其发送二进制事件日志;
4、slve从服务器将接收到的二进制事件日志保存至自己本地的中继日志文件中;
S、save从服务器将启动SQL Thread从中继日志中读取二进制日志,在本地重放,使得其数据和主服务器保持一致;
6、最后l/O Thread和SQL Thread将进入睡眠状态,等待下一次被唤醒;
-
canal工作原理
canal模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议
-
MySQL master收到dump请求,开始推送binary log给slave(即canal)
-
canal解析binary log对象(原始为byte流)
-