MySQL发展至今,在高可用性方面不断前进,从最初的异步复制、半同步复制、群组复制,演进到现在的InnoDB Cluster和InnoDB Replica Set。在这一篇里将说明各种高可用架构以及其适用的场景。

 

MySQL Replication

MySQL数据库架构——高可用演进_MySQL

 

经典的主从复制,需要多个步骤手动进行配置。例如,用户管理,备份恢复,配置复制......。MySQL仅提供了核心功能,整体架构需要用户自己决定(大部分情况下需要定制)。在这种情况下,组织或者公司需要使用不同的技术组件,技术专家或DBA需要将大量的工作和时间投入到自动化处理。

 

MySQL InnoDB Cluster

MySQL数据库架构——高可用演进_MySQL_02

2016年,MySQL推出了MySQL InnoDB Cluster,InnoDB Cluster主要包括MySQL Group Replication(群组成员变化管理、网络分区控制、集群范围一致性......),MySQL Shell(强有力的接口,自动化整合全部的组件),MySQL Router(应用透明路由、负载均衡、自动应用故障转移......)以及MySQL Clone(自动化部署成员,完全整合至InnoDB Cluster)。

 

MySQL InnoDB Replica Set

MySQL数据库架构——高可用演进_MySQL_03

2020年,MySQL推出MySQL InnoDB Replica Set。该功能基于经典的主从复制,完全整合MySQL Shell 和 MySQL Router。

 

上面简要介绍了MySQL高可用的过去和现在的解决方案,下面将详细地介绍InnoDB Cluster和InnoDB Replica Set。

 

MySQL InnoDB Cluster是MySQL的一体化产品解决方案,具有高可用性和可伸缩性的特点,组件包括MySQL Server、MySQL Shell、MySQL Router和MySQL Group Replication。它的目标是提供一个MySQL一体化产品,全部的组件统一开发,整合全部的组件,并进行全栈测试。此外,简单易用也是该产品的特色,使用一个统一的客户端MySQL Shell统一进行集群编排和管理。

 

MySQL Group Replication是分布式高可用MySQL数据库,具有容错、自动故障转移、多节点更新、自动成员管理、冲突检测/解决以及防止数据丢失功能。它是复制数据库状态机理论的实现,能够保证整体写入顺序,保证一致性。集群范围内最终一致,如果使用8.0.14之后的MySQL可以实现会话和全局范围的读写强一致性。MySQL5.7版本将这个功能GA,并支持全部的MySQL平台,包括Linux、Windows、Solaris、macOS 、FreeBSD等。

 

MySQL Group Replication可以用于如下场景:

一致性:数据零丢失(RPO=0)

  • 主要成员故障时,数据不会丢失。

  • 防止网络分区,通过大多数在线原则防止网络分区。

可用性:自动故障转移

  • 自动选取主要成员

  • 自动控制网络分区

读取扩展:

  • 按需增加/删除节点

  • 使用流程控制处理延迟

  • 可配置一致性级别

    • 最终一致

    • 完整一致性

主主环境:

  • 同时写入多个成员

    • 组内顺序写入(XCOM,PAXOS理论的实现)

    • 保证一致性

  • 写入性能良好

    • 乐观锁(取件于工作负载)

 

MySQL Router

透明访问数据库的架构,在应用程序和后端的MySQL数据库之间提供透明的路由连接。

  • 透明客户端连接路由

    • 负责均衡

    • 应用程序连接故障转移

    • 配置简单

  • 无缝设计提供简单的HA客户端路由

    • 路由作为应用程序栈的一部分

  • 整合 InnoDB Cluster 和 InnoDB Replica Set

  • 2个TCP端口用于主节点和非主节点通信

     

MySQL Shell

提供一个数据库管理接口,可以执行MySQL相关的全部任务。

  • 支持多种语言:JavaScript、Python、SQL

  • 可编写脚本

  • 支持文档存储和关系型模型

  • 公开完整的开发和管理API

  • 经典的MySQL协议和X协议

MySQL Shell简单易用,可以通过它快速搭建InnoDB Cluster。

创建集群

MySQL数据库架构——高可用演进_MySQL_04

配置实例

MySQL数据库架构——高可用演进_MySQL_05

添加实例

MySQL数据库架构——高可用演进_MySQL_06

启动MySQL Router

MySQL数据库架构——高可用演进_MySQL_07

检查集群状态

MySQL数据库架构——高可用演进_MySQL_08MySQL数据库架构——高可用演进_MySQL_09

 

MySQL InnoDB Replica Set

  • 完全整合MySQL Router

  • 简单易用的MySQL Shell

  • 配置、增加、移除成员

  • 自动化部署成员(Clone)

  • 主从复制架构

    • 手动进行切换和故障转移

    • 异步读取扩展

    • 简单的主从架构

    • 没有硬件网络要求

      • 提供主节点的可用性

InnoDB Replica Set可以通过克隆自动部署新成员,利用MySQL Shell自动配置用户和复制,手动配置、增加移除应用程序使用的服务器,MySQL Router或其他代理,并且能够整合MySQL Router的负载均衡能力。从而避免了以往配置主从复制时所需的繁琐步骤。

以往需要使用额外的监控工具在每台服务器上去检查拓扑状态,用户需要负责全部组件的所有配置,每一个设置都相当于定制化。使用InnoDB Replica Set可以通过MySQL Shell status()来查看拓扑状态,并且Shell会基于最佳实践配置服务器、路由和复制,以防止发生错误。

InnoDB Replica Set是一套标准的解决方案,由MySQL团队提供支持和质量保证,这个方案的优点是简单易用,初学者也可以快速掌握。

 

最后说明一下如何选择不同的高可用架构。

首先要明确业务的需求,高可用性越高意味着成本也越高。可以从以下几个方面去明确目标:

  • 恢复时间目标(RTO)

    • 服务从故障中恢复需要多长时间?

  • 恢复点目标(RPO)

    • 服务在故障中允许丢失的数据

  • 故障类型

    • 高可用:单一服务器故障,网络分区

    • 容灾:整体地域/网络故障

    • 人为错误:操作失误,故意破坏

  • 程度

    • 0

    • 小时

    • ...

不同业务需求对应的架构

单一地域

  • RTO=小时

  • RPO=分

  • 一台MySQL服务器

    • 备份

    • 同步日志

MySQL数据库架构——高可用演进_MySQL_10

单一地域

  • RTO=小时

  • RPO=少于1秒

  • 一台MySQL服务器

    • 频繁备份

    • 持续拉取二进制日志

 

MySQL数据库架构——高可用演进_MySQL_11

单一地域

  • RTO=数分

  • RPO=少于1秒

  • MySQL InnoDB Replica Set

MySQL数据库架构——高可用演进_MySQL_12

单一地域

  • RTO=数秒

  • RPO=0

  • MySQL InnoDB Cluster

MySQL数据库架构——高可用演进_MySQL_13

多地域

  • 地域故障

  • RTO=数分

  • RPO=数秒

  • MySQL InnoDB Cluster

    • 配合使用异步复制

MySQL数据库架构——高可用演进_MySQL_14

多地域

  • 地域故障

  • RTO=数分

  • RPO=0

  • MySQL InnoDB Cluster 跨地域部署

    • 两个地域的一致性级别设置为AFTER,或者三个地域,每个地域具有1-2个成员

    • 写入的吞吐量受到影响,写入事务需要保证事务同步

 

以上是关于MySQL高可用性架构的内容,用户可以根据不同的需求选择适合自己的架构。

 

感谢您关注”MySQL解决方案工程师“!

MySQL数据库架构——高可用演进_MySQL_15