• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 位置: MySQL 8 中文手册 -> MySQL 组复制

    组复制背景

    本节提供有关MySQL组复制的背景信息。

    创建容错系统的最常见方法是诉诸于使组件冗余,换句话说,可以删除组件,并且系统应继续按预期运行。这就带来了一系列挑战,将此类系统的复杂性提高到了一个完全不同的水平。具体来说,复制的数据库必须处理以下事实:它们需要维护和管理多台服务器,而不仅仅是一台服务器。此外,随着服务器一起协作创建该组,还必须解决其他一些经典的分布式系统问题,例如网络分区或大脑分裂情况。

    因此,最终的挑战是将数据库和数据复制的逻辑与使多个服务器以一致且简单的方式进行协调的逻辑相融合。换句话说,要让多个服务器就系统的状态以及系统所经历的每一次更改的数据达成一致。可以将其概括为使服务器在每个数据库状态转换上都达成协议,从而使它们都作为一个数据库前进,或者最终它们收敛到同一状态。这意味着它们需要作为(分布式)状态机运行。

    MySQL组复制为分布式状态机复制提供了服务器之间的强大协调。服务器属于同一组时,它们会自动进行协调。该组可以在具有自动主选的单主模式下运行,其中一次仅一个服务器接受更新。或者,对于更高级的用户,可以在多主模式下部署组,在该模式下,所有服务器都可以接受更新,即使它们是同时发布的。这种功能的代价是应用程序必须解决此类部署所施加的限制。

    有一个内置的组成员资格服务,可以使组的视图保持一致,并且在任何给定时间点均可用于所有服务器。服务器可以离开并加入该组,并且视图将相应更新。有时服务器可能会意外离开该组,在这种情况下,故障检测机制会检测到此情况并通知该组视图已更改。这都是自动的。

    对于要提交的事务,组的大多数必须在全局事务顺序中就给定事务的顺序达成一致。每个服务器分别决定提交或中止事务,但是所有服务器都做出相同的决定。如果存在网络分区,导致成员无法达成协议的分裂,那么系统将无法继续运行,直到解决此问题。因此,还有一个内置的自动裂脑保护机制。

    所有这些均由提供的组通信系统(GCS)协议提供支持。这些提供故障检测机制,组成员资格服务以及安全且完全有序的邮件传递。所有这些属性是创建系统的关键,该系统可确保在服务器组之间一致地复制数据。该技术的核心是Paxos算法的实现。它充当组通信引擎。