canal mysql mongodb_GitHub - younfor/canal_mysql_nosql_sync: 基于canal 的 mysql 与 redis/memcached/mongo...

本文介绍了如何使用Canal进行MySQL主从配置,并通过MQ(如RabbitMQ)将binlog数据实时推送到Redis或MongoDB。通过Canal解析binlog,确保数据的一致性,同时讨论了在数据同步过程中如何处理消费速度、故障恢复和性能优化等问题。
摘要由CSDN通过智能技术生成

下图是最基本的web服务器的结构图。

system-image.png

基于 Canal 的 MySql RabbitMQ Redis/memcached/mongodb 的nosql同步 (多读、nosql延时不严格 需求)

1.mysql主从配置

2.对mysql binlog(row) parser 这一步交给canal

3.MQ对解析后binlog增量数据的推送

4.对MQ数据的消费(接收+数据解析,考虑消费速度,MQ队列的阻塞)

5.数据写入/修改到nosql (redis的主从/hash分片)

6.保证对应关系的简单性:一个mysql表对应一个 redis实例(redis单线程,多实例保证分流不阻塞),关联关系数据交给接口业务

数据:mysql->binlog->MQ->redis(不过期、关闭RDB、AOF保证读写性能) (nosql数据仅用crontab脚本维护)

请求:http->webserver->redis(有数据)->返回数据 (完全避免用户直接读取mysql)

->redis(无数据)->返回空

7.可将它视为一个触发器,binlog为记录触发事件,canal的作用是将事件实时通知出来,并将binlog解析成了所有语言可读的工具。

在事件传输的各个环节 提高 可用性 和 扩展性 (加入MQ等方法)最终提高系统的稳定。

传统 Mysql Redis/memcached nosql的缓存 (业务同步)

从cache读取数据->

1.对数据在mysql的hash算法分布(db/table/分区),每个hash为节点(nosql数据全部失效时候,可保证mysql各节点可支持直接读取的性能)

2.mysql主从

3.nosql数据的hash算法分布(多实例、DB),每个hash为节点

4.nosql数据震荡处理 (当某节点挂了寻找替代节点算法(多层hash替代节点)。。。)

5.恢复节点数据

6.请求:http->webserver->【对key计算一致性hash节点】->connect对应的redis实例

->1.redis(有数据)-> 返回数据

->2.redis(无数据)-> mysql (并写入数据redis) -> 返回数据

->3.redis节点挂掉-> 业务寻址hash替代节点

-> 3.1 redis(有数据) -> 返回数据

-> 3.2 redis(无数据) -> mysql(并写入数据redis) -> 返回数据

canal-mysql-nosql.png

为什么要使用消息队列(MQ)进行binlog传输:

1.增加缓冲,binlog生产端(canal client)只负责生产而不需要考虑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值