序言

分布式系统一个最重要的特性就是高可用,实现这个特性的核心是一致性协议。MySQL MGR 正是使用了最成熟的 Paxos 一致性算法来实现系统的数据副本中的强一致性,使得 MySQL 集群可以对外提供金融级别的数据安全性保障。

本文我们将从以下主题带大家来认识 MGR,并时间搭建一个 MGR 测试集群,测试 MGR 高可用特性。

MGR 里面一些专业术语概念解释

MGR 的优点

如何计算 MGR 中最多容忍的故障节点数

配置复制组的 9 个步骤

配置复制组的参数选项含义

MGR primary 节点故障恢复演示

整理好的 Op 脚本

InnoDB Cluster 的核心是组复制(Group Replication),它旨在让数据复制更加健壮和可靠。在本文中,我们会探讨组复制的概念,并且带着你手动从最低层的配置搭建一个组复制的集群。一个优秀的数据库管理员必须要了解产品的工作原理,而不仅仅是如何配置好产品使之运行,但是当出问题的时候,怎么处理?这就需要最低级别的组复制设置的经验了。

让我们从构成组复制 (Group Replication) 的一些术语列表开始。

概念、术语和行话

Binary log:由服务器生成的一种日志文件,其中包含了已经执行的所有事务的二进制形式。Binary log 文件也用于主从复制,在两台服务器之间交换事务。在主上使用时,它记录了所有数据记录的变更,这些更改可以发送到从上执行,用来创建数据副本。

Multi-primary:一种组复制的模式,可以将写操作发送到多个主节点,并在组中进行复制。

Failover:一种事件,允许复制组从主服务器上的故障中进行恢复,自动选择新的主服务器,继续对外提供服务。

Fault tolerant:从组中检测到故障或者错误,并从错误中恢复而不丢失数据以及功能的能力。

Group:在同一组中通信的多个 MySQL 服务器集合。

Group communication:一种特殊的机制,它使用状态机和通信协议来保持组中服务器之间的协调,包括事务执行,以及角色的选举。

Instance:一个正在运行的 MySQL 服务器,通常用于指在同一台机器上运行的一个或者多个 MySQL 服务进程。

Primary:组中接收所有数据写入的服务器角色。

Relay log:从上记录从主的 Binary log 缓存中读取数据事务的 log,它的格式和 Binary log 相同。

Secondary:组中被分配了对外提供读操作的服务器,这意味着应用程序可以从它读取数据,但是不能对它写入。

Single-primary:指的是配置了一个 Primary 服务器和多个 Secondary 服务器的复制组。

Switchover:一种受控的维护事件,在这个事件中,管理员主动更改 Primary 服务器的角色,将某一台 Secondary 服务器变成新的 Primary 服务器,这个操作不会自动发生。

Transaction:在将数据更新操作应用到数据库之前,必须成功的完成的一组数据更改操作,如果中间失败,整个过程将不会被应用到数据库(事务的原子性)。

Topology:复制组中服务器的逻辑布局,通常有以下的布局形式

Single-primary:单个 Primary 服务器,其他的服务器都是 Secondary 角色,都连接到它。

Tiered(分层):连接多个 Single-primary 复制组的一种模式,Secondary 服务器通常用做另一个组的 Primary。

Multi-primary:每个 Primary 服务器连接到组中的其他 Primary 服务器以及组中的 Secondary 服务器。

概述

MySQL 组复制是 MySQL 复制的高级特性,目的在于实现容错的分布式系统。复制组是一组通过消息传递进行交互协调的服务器,并对外提供高可用的读写服务。组复制的好处可以总结为以下几点:

无需手动的处理服务器的故障

提供分布式容错

自动化的配置更新(添加/删除实例)

自动检测和处理冲突

提供数据不丢失的保证

组复制机制建立在以上的属性抽象之上,实现了一个多主,处处更新的复制协议。使得组复制能够稳定提供上述保障的重要技术之一就是全局事务标识符(GTIDs)。参与组复制的服务器将启用 GTIDs。