登录
首页 >  数据库 >  MySQL

CANAL 高可用

来源:SegmentFault

时间:2023-01-17 18:11:26 305浏览 收藏

你在学习数据库相关的知识吗?本文《CANAL 高可用》,主要介绍的内容就涉及到MySQL、Java,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

Canal 是阿里巴巴mysql数据库binlog的增量订阅&消费组件, 你可以从这儿了解它.

Canal 的常见使用场景之一就是数据同步, 例如我们使用 canal 就是为了把 mysql 的数据同步到 elasticsearch 中. 使用 canal 做数据同步的时候无疑会涉及到三个部分: 数据源(mysql), canal server(接收 mysql binlog), canal client(接收 canal server 发送的解析过的 binlog 消息).

为了保证数据同步高可用, canal 针对上述三个部分设计了对应的高可用方案.

Canal server 和 client 高可用

Canal server 和 client 端的高可用方案依赖 zookeeper, 启动 canal server 和 client 的时候都会 zookeeper 读取信息. Canal 在 zookeeper 存储的数据结构如下:

/otter
└── canal
    └── destinations
        └── flight_segment  # canal 实例名称 
            ├── 1001 # canal client 信息
            │   ├── cursor # 当前消费的 mysql binlog 位点
            │   ├── filter # binlog 过滤条件
            │   └── running  # 当前正在运行的 canal client 服务器
            ├── cluster # canal server 列表
            │   └── 10.93.61.86:11111 
            └── running # 当前正在运行的 canal server 服务器

Canal server 和 client 启动的时候都会去抢占 zk 对应的 running 节点, 保证只有一个 server 和 client 在运行, 而 server 和 client 的高可用切换也是基于监听 running 节点进行的.

mysql 多数据源高可用

Canal 一个实例可以配置两个数据源, master 和 standby. 假如 master 数据源宕机了, canal 的 MysqlDetectingTimeTask 就会调用 HeartBeatHAController 触发一个在 master 和 standby 数据源之间的自动切换.

MysqlDetectingTimeTask 其实就是在 canal server 和 mysql 之间维护心跳信息, 当 mysql 挂了之后触发一次自动切换.

当然, 为了做到上述三种高可用 Canal 做了很多工作, 在这儿就不展开讲了, 以后有机会的话会仔细分析一下.

CANAL 高可用 - Agentd

参考链接:
Canal HA 模式

今天带大家了解了MySQL、Java的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表