同步复制-组复制-多实例-主主复制

同步复制(组复制)

了解 MGR(multi group replication) —>多节点的组复制

bb2559a33df244c1c1e275cc0f55912

Consensus是 讨论,共识 —>(半数以上的成功通过就可以)达成一致

Consensus 分为单主和多主(推荐使用)

多主最多可以支持九个节点↓

ec55862b912a75ff9099227a1d2e1ab

  1. Master 1:
    • 执行操作(execute)。
    • 然后对这些操作进行认证(certify)。
    • 接着操作被写入到一个二进制日志(binlog)。
    • 最后,操作被提交(commit)到数据库。
  2. Master 2 和 Master 3:
    • 这两个实例不直接执行操作,而是从一个中继日志(relay log)中获取操作。
    • 它们各自认证(certify)这些操作,保证数据的一致性。
    • 然后应用(apply)这些操作到自己的数据集。
    • 将操作写入自己的二进制日志(binlog)。
    • 最后提交(commit)操作。

底部的“Consensus”表示所有的主实例在进行变更前需要达成一致,这是为了确保数据在所有主实例中保持同步和一致性。

什么是同步复制

同步复制是数据库复制技术的一种形式,它确保数据在多个数据库副本(通常是分布在不同服务器上)之间保持一致。在同步复制中,所有的数据更改(如INSERT、UPDATE、DELETE操作)在主数据库上执行后,会即时复制到一个或多个从数据库上。只有当所有的从数据库都确认已经接收并应用了这些更改之后,操作才会在主数据库上提交。这种方式保证了在任何时候,所有数据库副本都包含了相同的数据集。

形象的理解一下:

想象一下你是一位厨师,在做一道需要精确配方的蛋糕。你有几个助手,每个助手都要做一个一模一样的蛋糕。在同步复制的情况下,这就像你和你的助手们一起动作同步。

每当你加一个配料到你的蛋糕里,你的每个助手都要在他们的蛋糕里做同样的事情。你等待他们告诉你:“好的,我加好了”,然后你们一起进行下一步。如果其中一个助手说:“等一下,我还没加”,那么大家都会等待,直到每个人都完成了这一步。

这就是同步复制的工作方式。每次主数据库更新数据时,所有的从数据库(就像助手们)都必须确认他们已经接收并且更新了相同的数据。只有在这个确认过程完成之后,整个系统才会继续下一步操作。这样可以确保所有数据库的数据都是完全一致的,就像确保每个助手的蛋糕都是按照相同的配方制作的一样。

就像厨房里同步工作可能会让整个烘焙过程慢下来一样,同步复制也可能增加数据库操作的延迟,因为它需要等待所有副本的确认。但好处是你会得到高度一致和可靠的结果,就像每个蛋糕都会一样美味一样。

image-20231212102004316

图中,一个白人男性厨师正往碗里加入蛋糕配料。与此同时,他的三位助手——一位亚洲女性、一位黑人男性和一位拉丁裔男性——都在自己的烹饪台上,手里拿着与主厨相同的碗,模仿主厨的动作,且动作完全同步。他们都暂停了手中的活,注视着厨师,等待下一步的指示。

这正如同在同步复制的数据库系统中,每一项数据变动都需要在所有的数据库副本中被复制和确认后,系统才会执行下一步操作。这个过程确保了所有副本在任何时刻都保持数据的一致性。

什么叫多实例

一个实例就是运行一个mysqld的进程
mysql多实例: '简单理解就是在一台服务器上,mysgl 服务开启多个不同的端口(如3306.3307),运行多个服务进程。这些 mysql 服务进程通过不同的 socket 来监听不同的数据端口,进而互不干涉的提供各自的服务。'
多实例: 就是多个运行起来的 mysqld 进程,每个进程里运行自己的库,各自为各自的库提供服务。

13cde0f87536ddd7e3c40bc4283a437

一台服务器运行着两个mysqld进程,然后一台监控3306,一台监控3307。

一个跑hunan的库,一个跑shanxi的库

web1访问hunan

web2访问sahnxi

多实例的优点

  1. 资源隔离
    • 每个实例可以单独配置和管理,提供更好的安全性和稳定性。
  2. 故障隔离
    • 单个实例故障不会影响到同一服务器上的其他实例。
  3. 性能优化
    • 可以根据每个实例的需求进行资源(内存、CPU、I/O)的优化配置。
  4. 维护灵活性
    • 可以单独对某个实例进行重启或维护,而不干扰其他实例。
  5. 负载分散
    • 可以通过增加实例数量来分散高负载,提高系统的可扩展性和吞吐量。
  6. 服务特化
    • 不同实例可以针对不同的应用程序或服务需求进行特化。

多实例的缺点

  1. 资源消耗
    • 每个实例可能都需要一定量的系统资源,多实例可能导致资源使用不足。
  2. 管理复杂性
    • 需要监控和管理更多的实例,可能会增加管理的复杂性和开销。
  3. 配置复杂性
    • 每个实例可能需要不同的配置,使得配置管理变得更加复杂。
  4. 潜在的性能冲突
    • 如果多个高负载实例运行在同一物理服务器上,可能会相互竞争资源,导致性能问题。
  5. 数据一致性挑战
    • 如果实例之间需要共享数据,保持数据一致性可能会变得更加困难。

主主复制

其实是两台服务器互为主从

df3e80600933554e2c71123dab55a5a

主主复制主键冲突问题解决方案:

​ 2台mysql地位相等, 假如2个请求同时到达2台服务器。请求A节点,stu的id为1。请求的B节点,stu的id也为1,这时候主键很容易冲突。

​ 让A服务器的主键id从1,3,5,7来增长(从1开始自增,偏移量2)

​ set global auto_increment_increment = 2;

​ set global auto_increment_offset = 1;

​ set session auto_increment_increment = 2;

​ set session auto_increment_offset = 1;

​ 让B服务器的主键id从2,4,6,8来增长(从2开始自增,偏移量2)

​ set global auto_increment_increment = 2;

​ set global auto_increment_offset = 2;

​ set session auto_increment_increment=2;

​ set session auto_increment_offset = 2;

假如后期我们还需要加sql服务器,我们还可以用其他办法去限制。比如在oracle有sequnce,序列(序列每次访问,生成递增/递减的数)

以redis为例,我们可以专门构建一个global:userid。每次PHP插入mysql前,执行incr->global:userid, 得到一个递增的userid

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不冤不乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值