开发者社区> 问答> 正文
1
0
分享

Canal server 脑裂问题

HA集群模式下,出现同一个destination在两个canal-sever上均处于启动状态的情况。

Canal版本1.1.4 , CanalAdmin 模式 ,canal-server1 和 canal-server2 做HA 配置一个destination d1, canal-server1 启动destination d1 , canal-server2 处于standby状态。

当canal-server1 发生网络抖动(比如断网)和zookeeper断开链接(超过zookeeper maxSessionTimeout 时间,默认20*tickTime 通常为40s) , 临时节点失效/otter/canal/destinations/d1/running ,canal-server2 成功创建并启动destination d1 ; 但此时canal-server1 并未stop掉 d1 . canal-server1 网络恢复后,会出现同一个destination d1 在canal-server1 canal-server2 都是启动状态。 在配置 canal.serverMode = kafka 模式下,会出现消息重复及顺序问题。

临时解决办法: canal-server RunningMonitor 收到Zookeeper Disconnected状态后,主动退出active模式。

`diff --git a/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalController.java b/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalController.java index 1cf4764..348beb5 100644 --- a/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalController.java +++ b/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalController.java @@ -203,7 +203,11 @@ public class CanalController { zkclientx.subscribeStateChanges(new IZkStateListener() {

                             public void handleStateChanged(KeeperState state) throws Exception {

                               if (state.equals(KeeperState.Disconnected)) {

                                           "destination :{}", destination);

                               }
                           }`

原提问者GitHub用户JichengSong

展开
收起
Java工程师 2023-05-03 09:42:39 130 0 发布于北京
举报
飞天免费试用计划
领取免费云资源,开启云上实践第一步
任务调度 XXL-JOB 版免费试用
400 元额度,开发版规格
额度1个月内有效
云原生网关 MSE Higress
422元/月
额度3个月内有效
服务治理 MSE Sentinel/OpenSergo
Agent数量 不受限
额度30个日内有效
1 条回答
写回答
取消 提交回答
  • ServerRunningMonitor有一个delayTime的设计,可以调低这个值,在处理zookeeper网络断开时即时退出,目前时默认延迟5秒钟

    原回答者GitHub用户agapple

    2023-05-04 13:26:20 发布于北京 举报
    赞同 评论 打赏

    评论

    全部评论 (0)

    登录后可评论
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等