加入收藏 | 设为首页 | 会员中心 | 我要投稿 上海站长网 (https://www.021zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 搜索优化 > 正文

有关otter双A模式的一点疑问

发布时间:2022-03-30 11:42:18 所属栏目:搜索优化 来源:互联网
导读:何为双A模式:可以简单理解为mysql的双主模式,互为主从 官方博客的配置方法: 双A同步相比于双向同步,整个配置主要是一些参数上有变化,具体步骤: 配置一个channel 配置两个pipeline * 注意:除了需要定义一个主站点外,需要在高级设置中将一个pipeline
      何为双A模式:可以简单理解为mysql的双主模式,互为主从
 
      官方博客的配置方法:
      双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异常:    开启
 
解决办法:
待续
 
疑问二:当表没有主键约束时,在非主站点上执行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)
同步至主站点了,但是非主站点会再插入一遍
 
疑问三:如果两边同时插入一条数据,自增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 |
+--------------------------+-------+
 
再次测试
[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 |
| 31 |     888 |
| 32 |      88 |
+----+---------+
5 rows in set (0.00 sec)

(编辑:上海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!