zoukankan      html  css  js  c++  java
  • 关于双主

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

    Ⅰ、双主架构介绍

    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的共享存储)就是单点

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

    拒绝交叉写入

  • 相关阅读:
    Rust语言环境配置;Rust版本1.45.2学习
    《代码英雄》系列整理
    Pingcap High Performance TiDB 课程学习记录@yaowenxu
    11. C语言百钱买百鸡问题(详解版)
    10. C语言输出菱形(详解版)
    9. C语言判断素数(求素数)(两种方法)
    8. C语言求圆周率π(三种方法)
    7. C语言杨辉三角(两种方法)
    6. C语言九九乘法表(五种输出形式)
    5. C语言希尔排序算法
  • 原文地址:https://www.cnblogs.com/---wunian/p/8992928.html
Copyright © 2011-2022 走看看