环境信息
canal version 1.1.1(其他版本也是如此) mysql version 5.7
问题描述
master与standby切换场景,如果mysql本身的主从 binlog文件差别很大的话,会导致切换失败,会找不到position。后面canal的主备切换改变目前的实现方式吗?
主>从 切换。很多时候切换是正常的能够做到,但是一旦binlog的差有点大的时候,就会切换失败,找不到position,应该是跟目前的切换实现方式有关系吧,每次都需要去停掉canal server,停掉canal-client 然后去zk上删除destination node,然后重启 server 跟client。
原提问者GitHub用户wangjinzhao
如果从落后于主,我们会找到主库里最后的binlog timestamp(比如5分钟),从落后于主(比如在2分钟),基于5分钟的时间戳去定位,我们会在从库中找到最后一条为2分钟的offest,从这个位点开始继续消费,因为主从关系的存在,从库会慢慢应用2分~5分的binlog数据,确保主从切换不丢binlog消费
切换的时候是以时间戳进行定位的,在从上找到最接近这个时间的,如果你走GTID订阅就没这个办法
原回答者GitHub用户agapple
在 Canal 中,主备切换需要根据已同步的 binlog 位置信息进行切换,如果 binlog 文件差异较大,会导致切换失败。这种情况下,需要对 Canal 进行重建,重新同步数据。因此,建议在实际场景中,尽量保证主备之间的 binlog 文件差异不要太大。
对于 Canal 的主备切换方式,早期版本确实需要停止 Canal Server、删除 ZooKeeper 上的 destination 节点,然后重新启动 Canal Server 和 Canal Client 进行主备切换。但是,从 Canal 1.1.4 版本开始,支持自动感知主备切换的问题,并且在不停止 Canal Server 的情况下,自动更新 binlog 位置信息,从而实现主备切换。具体实现方式是通过监控 MySQL 内部的 GTID 变化来完成的。
因此,建议升级 Canal 到 1.1.4 或者更高版本,以便自动感知主备切换,并自动完成 binlog 位置的更新,从而实现更加稳定和高效的主备切换。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。