关于双主

首先声明一下,双主这种架构个人不怎么喜欢,所以这里只做简单说明 与吐槽

Ⅰ、双主架构介绍

M/S(A) <====> S/M(B)

为什么要这么做呢?有什么意义呢?

我也不知道

Ⅱ、双主搭建

主上操作
change master
start slave

机器A
auto_increment_increment  自增值设置为2

机器B
auto_increment_increment  自增值设置为2
auto_increment_offset     起始值也设置为2

tips:
session级别的参数,不能用set global

A
1 3 5 7
B
2 4 6 8

这样就可以双写了,带有自增的insert没问题

但极力不推荐

Ⅲ、双写存在的问题

3.1 不好的第一点

一张表上如果有唯一索引,即使是自增,也会完蛋

A上同步到B,B上写,就会报duplicate,这还比较好,至少两边数据还是一致的

万一A还没同步到B,B上插入也成功了,两边都成功了复制是失败的,这咋办?两边数据都不一致了,对不起来

3.2 不好的第二点

解决不了update问题

同一条记录在两个节点上更新,前面一个更新的节点数据被覆盖,就更新丢失了

3.3 相关说明

双写存在很多问题

  • 以前做双主,主从复制关系之前都建立好了,以后做选主的时候就不用建立复制关系了,以前建立复制关系是很烦的一件事情
  • mha不需要做双主,mmm才是做双主,5.6开始,只要开启gtid,选主是很容易的
  • 如果不是5.6,但是用了mha,mha会自动重建复制关系

综上:所以双主用来做选主的架构其实也不多了,很落后,双主做双写很危险

应用层控制双写,如果能解决上面说的问题就可以用,但是很难

如果做到的话,对写入的带宽有很大提升

tips:
①A同步到B,为什么B不会再推到A,这样无限循环?

因为同步的记录是带有server-id的,检测到要发送的server-id就是接收过来的server-id就不会发了

②oracle的rac为什么可以双写?

  • 支持共享存储架构,多个进程共享一个存储
  • MySQL的M和S存储是自己管自己
  • oracle这么用(rac的共享存储)就是单点

Ⅳ、双主的一个比较好的方案

拒绝交叉写入

+---------+       +---------+
|         |       |         |
|   db1   |       |   db1   |
|         <======>          |
|   db2   |       |   db2   |
|         |       |         |
+----^----+       +----^----+
     |                 |
     |                 |
    db1               db2
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 9,414评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,155评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,449评论 18 399
  • 视听说2journey into the unknown. 1、从本篇文章中学到最重要的概念: 旅游使我们快乐 2...
    玩的开心哦阅读 1,828评论 2 0
  • 日复一日,年复一年,远在求学的学子,家里日常劳作的父母,感谢他们的养育,他们成就我们的明天,我们要陪伴他们终老,希...
    臻暧阅读 1,229评论 0 0

友情链接更多精彩内容