MySQL发展至今,在高可用性方面不断前进,从最初的异步复制、半同步复制、群组复制,演进到现在的InnoDB Cluster和InnoDB Replica Set。在这一篇里将说明各种高可用架构以及其适用的场景。
MySQL Replication
经典的主从复制,需要多个步骤手动进行配置。例如,用户管理,备份恢复,配置复制......。MySQL仅提供了核心功能,整体架构需要用户自己决定(大部分情况下需要定制)。在这种情况下,组织或者公司需要使用不同的技术组件,技术专家或DBA需要将大量的工作和时间投入到自动化处理。
MySQL InnoDB Cluster
2016年,MySQL推出了MySQL InnoDB Cluster,InnoDB Cluster主要包括MySQL Group Replication(群组成员变化管理、网络分区控制、集群范围一致性......),MySQL Shell(强有力的接口,自动化整合全部的组件),MySQL Router(应用透明路由、负载均衡、自动应用故障转移......)以及MySQL Clone(自动化部署成员,完全整合至InnoDB Cluster)。
MySQL InnoDB Replica Set
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 Router
检查集群状态
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服务器
-
备份
-
同步日志
-
单一地域
-
RTO=小时
-
RPO=少于1秒
-
一台MySQL服务器
-
频繁备份
-
持续拉取二进制日志
-
单一地域
-
RTO=数分
-
RPO=少于1秒
-
MySQL InnoDB Replica Set
单一地域
-
RTO=数秒
-
RPO=0
-
MySQL InnoDB Cluster
多地域
-
地域故障
-
RTO=数分
-
RPO=数秒
-
MySQL InnoDB Cluster
-
配合使用异步复制
-
多地域
-
地域故障
-
RTO=数分
-
RPO=0
-
MySQL InnoDB Cluster 跨地域部署
-
两个地域的一致性级别设置为AFTER,或者三个地域,每个地域具有1-2个成员
-
写入的吞吐量受到影响,写入事务需要保证事务同步
-
以上是关于MySQL高可用性架构的内容,用户可以根据不同的需求选择适合自己的架构。
感谢您关注”MySQL解决方案工程师“!