千家信息网

【Otter】关于otter双A模式的一点疑问

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,何为双A模式:可以简单理解为mysql的双主模式,互为主从具体可参考:https://github.com/alibaba/otter/wiki/Manager配置介绍官方博客的配置方法:双A同步相比
千家信息网最后更新 2026年11月02日【Otter】关于otter双A模式的一点疑问何为双A模式:可以简单理解为mysql的双主模式,互为主从
具体可参考:https://github.com/alibaba/otter/wiki/Manager配置介绍


官方博客的配置方法:

双A同步相比于双向同步,整个配置主要是一些参数上有变化,具体步骤:

  1. 配置一个channel

  2. 配置两个pipeline
  3. * 注意:除了需要定义一个主站点外,需要在高级设置中将一个pipeline的"支持DDL"设置为false,另一个设置为true,否则将提示"一个channel中只允许开启单向ddl同步!"错误
  4. 每个pipeline各自配置canal,定义映射关系

背景:
111<->112 双A模式

111->112_canal:111 同步数据至112
  1. 主站点:true
  2. 支持ddl同步: 关闭
  3. 跳过ddl异常: 开启

112->111_canal:112同步数据至111
  1. 主站点:flase
  2. 支持ddl同步: 开启
  3. 跳过ddl异常: 开启

在以上的背景下
疑问一:数据的增删查改都没问题,但是当在111上 执行create table/Truncate 这类DDL语句后,不会同步到112上,反之在112上执行可以同步至111,因为支持ddl同步这个参数的原因

解决办法:
待续

疑问二:当表没有主键约束时,在非主站点上执行insert会重复插入一条如:
  1. 非主站点上执行:
  2. mysql> insert into test3 values(5);
  3. Query OK, 1 row affected (0.01 sec)

  4. mysql> select * from test3;
  5. +------+
  6. | id |
  7. +------+
  8. | 4 |
  9. | 5 |
  10. | 5 |
  11. +------+
  12. 3 rows in set (0.00 sec)

  13. 主站点上:
  14. mysql> select * from test3;
  15. +------+
  16. | id |
  17. +------+
  18. | 4 |
  19. | 5 |
  20. +------+
  21. 2 rows in set (0.00 sec)
同步至主站点了,但是非主站点会再插入一遍
原因:otter设计的单向回环

思路:最终一致性

适用场景: A地和B地数据不对等,比如A地为主,写入量比较高,B地有少量的数据写入

单向回环流程:(比如图中以HZ为trusted source站点)

  • us->hz同步的数据,会再次进入hz->us队列,形成一次单向回环
  • hz->us同步的数据,不会进入us->hz队列(回环终止,保证不进入死循环)

解决办法:设计表都带上自增主键


疑问三:如果两边同时插入一条数据,自增id怎么办?
  1. mysql> select * from admin;
  2. +----+---------+
  3. | id | role_id |
  4. +----+---------+
  5. | 8 | 77 |
  6. | 9 | 777 |
  7. | 11 | 99 |
  8. | 12 | 999 |
  9. | 16 | 888 | ---可以看到,主站点丢失,未插入!
  10. +----+---------+
  11. 5 rows in set (0.00 sec)


在github上《otter数据库入库算法》部分看到这样一段话:合并算法执行后,单pk主键只有一条记录,减少并行load算法的复杂性(比如batch合并,并行/串行等处理)
因为并发插入之间的时间间隔非常短,短于同步之间的延迟,在主副站点分别插入后是同一条pk建,并且副站点后插入,那么副站点是最新副本集也就是trust 点,副站点数据覆盖主站点数据,《otter数据一致性》详解!

解决办法:参考官方双a的做法,设置步长和起始值
  1. 修改两台的步长
  2. mysql> show global variables like '%auto_increment_increment%';
  3. +--------------------------+-------+
  4. | Variable_name | Value |
  5. +--------------------------+-------+
  6. | auto_increment_increment | 2 |
  7. +--------------------------+-------+

  8. mysql> show global variables like '%auto_increment_increment%';
  9. +--------------------------+-------+
  10. | Variable_name | Value |
  11. +--------------------------+-------+
  12. | auto_increment_increment | 1 |
  13. +--------------------------+-------+

  14. 再次测试
  15. [root@DB-22 dbaadmin]# python test.py
    ()
    ()
    all over Mon Jul 31 17:54:10 2017
    [root@DB-22 dbaadmin]# python test.py
    ()
    ()
    all over Mon Jul 31 17:54:21 2017



  16. mysql> select * from admin;
    +----+---------+
    | id | role_id |
    +----+---------+
    | 28 | 111 |
    +----+---------+
    1 row in set (0.00 sec)


    mysql> select * from admin;
    +----+---------+
    | id | role_id |
    +----+---------+
    | 28 | 111 |
    | 29 | 888 |
    | 30 | 88 |
    +----+---------+
    3 rows in set (0.00 sec)


    mysql> select * from admin;
    +----+---------+
    | id | role_id |
    +----+---------+
    | 28 | 111 |
    | 29 | 888 |
    | 30 | 88 |
    | 31 | 888 |
    | 32 | 88 |
    +----+---------+
    5 rows in set (0.00 sec)






同步 数据 主站点 配置 站点 单向 回环 支持 模式 疑问 办法 算法 一致 一致性 之间 再次 原因 参数 官方 背景 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云信互联网科技有限公司 今日互联网科技 互联网科技战争 没上市的科技互联网公司 互联网公司 科技公司 伴你行互联网科技有限公司 无锡溥仪互联网科技有限公司 卫星互联网科技股票 河南猎农互联网科技有限公司 崇明区互联网教育科技售后服务 未来五年的互联网科技 深圳市罗太互联网科技有限公司 山东子淼互联网科技有限公司 厦门江牛科技互联网 互联网科技股为什么大涨 风投北京互联网科技 下一代互联网重大应用科技园 互联网科技新闻 湖北辰鑫科技互联网 安徽九吞吴互联网科技有限公司 新华互联网科技学院 互联网科技集团 互联网科技公司电话 丰台科技园 互联网 湖北码尼互联网科技有限公司电话 从那以后互联网科技有限公司 世界互联网科技成果奖 盐城市攀科互联网科技有限公司 长沙易易互联网科技有限公司 小牛互联网科技有限公司地址
0