【Otter】关于otter双A模式的一点疑问
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,何为双A模式:可以简单理解为mysql的双主模式,互为主从具体可参考:https://github.com/alibaba/otter/wiki/Manager配置介绍官方博客的配置方法:双A同步相比
千家信息网最后更新 2025年11月07日【Otter】关于otter双A模式的一点疑问何为双A模式:可以简单理解为mysql的双主模式,互为主从
具体可参考:https://github.com/alibaba/otter/wiki/Manager配置介绍
官方博客的配置方法:
背景:
111<->112 双A模式
111->112_canal:111 同步数据至112
112->111_canal:112同步数据至111
在以上的背景下
疑问一:数据的增删查改都没问题,但是当在111上 执行create table/Truncate 这类DDL语句后,不会同步到112上,反之在112上执行可以同步至111,因为支持ddl同步这个参数的原因
解决办法:
待续
疑问二:当表没有主键约束时,在非主站点上执行insert会重复插入一条如:
原因:otter设计的单向回环
解决办法:设计表都带上自增主键
疑问三:如果两边同时插入一条数据,自增id怎么办?
在github上《otter数据库入库算法》部分看到这样一段话:合并算法执行后,单pk主键只有一条记录,减少并行load算法的复杂性(比如batch合并,并行/串行等处理)
因为并发插入之间的时间间隔非常短,短于同步之间的延迟,在主副站点分别插入后是同一条pk建,并且副站点后插入,那么副站点是最新副本集也就是trust 点,副站点数据覆盖主站点数据,《otter数据一致性》详解!
解决办法:参考官方双a的做法,设置步长和起始值
具体可参考:https://github.com/alibaba/otter/wiki/Manager配置介绍
官方博客的配置方法:
双A同步相比于双向同步,整个配置主要是一些参数上有变化,具体步骤:
- 配置一个channel
- 配置两个pipeline
* 注意:除了需要定义一个主站点外,需要在高级设置中将一个pipeline的"支持DDL"设置为false,另一个设置为true,否则将提示"一个channel中只允许开启单向ddl同步!"错误 - 每个pipeline各自配置canal,定义映射关系
背景:
111<->112 双A模式
111->112_canal:111 同步数据至112
- 主站点:true
- 支持ddl同步: 关闭
- 跳过ddl异常: 开启
112->111_canal:112同步数据至111
- 主站点:flase
- 支持ddl同步: 开启
- 跳过ddl异常: 开启
在以上的背景下
疑问一:数据的增删查改都没问题,但是当在111上 执行create table/Truncate 这类DDL语句后,不会同步到112上,反之在112上执行可以同步至111,因为支持ddl同步这个参数的原因
解决办法:
待续
疑问二:当表没有主键约束时,在非主站点上执行insert会重复插入一条如:
- 非主站点上执行:
- mysql> insert into test3 values(5);
- Query OK, 1 row affected (0.01 sec)
- mysql> select * from test3;
- +------+
- | id |
- +------+
- | 4 |
- | 5 |
- | 5 |
- +------+
- 3 rows in set (0.00 sec)
- 主站点上:
- mysql> select * from test3;
- +------+
- | id |
- +------+
- | 4 |
- | 5 |
- +------+
- 2 rows in set (0.00 sec)
原因:otter设计的单向回环
思路:最终一致性
适用场景: A地和B地数据不对等,比如A地为主,写入量比较高,B地有少量的数据写入
单向回环流程:(比如图中以HZ为trusted source站点)
- us->hz同步的数据,会再次进入hz->us队列,形成一次单向回环
- hz->us同步的数据,不会进入us->hz队列(回环终止,保证不进入死循环)
解决办法:设计表都带上自增主键
疑问三:如果两边同时插入一条数据,自增id怎么办?
- mysql> select * from admin;
- +----+---------+
- | id | role_id |
- +----+---------+
- | 8 | 77 |
- | 9 | 777 |
- | 11 | 99 |
- | 12 | 999 |
- | 16 | 888 | ---可以看到,主站点丢失,未插入!
- +----+---------+
- 5 rows in set (0.00 sec)
在github上《otter数据库入库算法》部分看到这样一段话:合并算法执行后,单pk主键只有一条记录,减少并行load算法的复杂性(比如batch合并,并行/串行等处理)
因为并发插入之间的时间间隔非常短,短于同步之间的延迟,在主副站点分别插入后是同一条pk建,并且副站点后插入,那么副站点是最新副本集也就是trust 点,副站点数据覆盖主站点数据,《otter数据一致性》详解!
解决办法:参考官方双a的做法,设置步长和起始值
- 修改两台的步长
- mysql> show global variables like '%auto_increment_increment%';
- +--------------------------+-------+
- | Variable_name | Value |
- +--------------------------+-------+
- | auto_increment_increment | 2 |
- +--------------------------+-------+
- mysql> show global variables like '%auto_increment_increment%';
- +--------------------------+-------+
- | Variable_name | Value |
- +--------------------------+-------+
- | auto_increment_increment | 1 |
- +--------------------------+-------+
- 再次测试
- [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
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安全错误
数据库的锁怎样保障安全
网络安全 不传谣 信谣
红蒙网络安全科技公司
数据库决定因素
网络守护进程服务器
花园战争怎么切换服务器
服务器怎么在地狱找残骸
襄阳定制软件开发企业
云计算加强网络安全
App网络安全升级需要多久
net 建立离线数据库
上海朝夕网络技术公司
新加坡网络安全ppt
2020世界网络安全大会时间
北京乾宇臻程软件开发
进入网页数据库
数据库 with
linux数据库文件放在哪
商城属于软件开发吗
数据库中数据什么样子
传奇4ui是那个服务器
人力资源系统软件开发商
超级计算机服务器公司
数据库筛选日期
网络安全物理监管
gta5是用什么软件开发的
用户数据库是建立在下面
济南赛博网络技术公司
数据库管理有哪些工作
姑苏区缘之空网络技术服务部
网络安全不良信息举报