mysql高可架构概览

2024年 3月 15日 100.1k 0

MySQL高可用架构通过是通过异步复制,半同步复制、组复制来实现。

早期MySQL未提供高可用自动故障切换工具,主要是第三方工具如:MHA,orchestrator

V5.7开始MySQL Group Replication 开始GA,可以选择MGR+ProxySQL

V8.0开始MySQL提供Innodb Cluster,Innodb ReplicaSet,Innodb ClusterSet 等方案

MYSQL复制

异步复制Asynchronous Replication

异步复制:write binlog后 dump thread读取event异步发送slave ,无需确认

半同步复制Semisynchronous Replication

半同步复制:semi-sync replication主库需等待至少一个从库ack确认才返回client事务提交。

实现方式按innodb commit 不同时间点(rpl_semi_sync_master_wait_point)又分为2种

V5.6 半同步 after_commit

innodb prepare ->binlog write->send binlog to slave-> binlog sync -> innodb redo commit -> wait ACK ->client receive OK
注:master没等从库ack确认就在innodb commit,其他session可读到提交数据,一旦切换且从库未接收数据,即对于其他session产生幻读丢数据,无法保障主从一致性; wait ack after innodb commit

V5.7增强半同步 after_sync

innodb prepare ->binlog write->send binlog to slave-> binlog sync ->wait ACK ->innodb redo commit ->client receive OK

注:master等从库ack确认再innodb commit,保障主从一致性; wait ack after send binlog to slave;存在存储引擎层面多了数据的可能:master在等ack确认前crash,binlog已经同步到slave,在client层看slave相对于master多了记录,但master crash recovery也是基于binlog 完整性来提交,这点是对client不友好

群组复制Group Replication

shared-nothing replication scheme:无共享复制方案是一组服务器每个都有完整的副本,组复制是靠消息广播、多数节点验证(基于write set无冲突提交,或冲突本地回滚,其他节点抛弃消息,不同节点并发提交的行冲突事务基于global order先提交先成功)、生成binlog/relay,非本地节点 apply event

binlog_transaction_dependency_tracking

COMMIT_ORDER 基于master 并发提交(同时进入flush,sync区间),在slave并发apply

WRITESET 更新行唯一标识hash value,在slave检查是否写冲突无冲突则并发apply

WRITESET_SESSION 不允许来自同一会话的事务并行执行

高可用架构

常用的MYSQL高可用架构

MHA

Orchestrator

MGR 5.7

InnoDB Cluster

InnoDB ReplicaSet

InnoDB ClusterSet

Mysql高可用组件

1.MySQL Router 透明客户端连接路由、负责故障转移、负载均衡等,常用于Cluster、ReplicaSet、ClusterSet等高可用解决方案
2.MySQL Shell 数据库管理接口
3.MySQL Server

MHA

注:自动故障切换,manager可以管理多套集群(100+),尽量保持不丢数据(依赖半同步,binlog补偿)

缺点:ssh互信存安全隐患,最后更新时间2018 年

Orchestrator

注:自动故障切换,manager可以管理多套集群,尽量保持不丢数据(依赖半同步,binlog补偿),工具本身高可用,web界面,提供了GUI,CLI,API等接口来检查复制拓扑

缺点:ssh互信存安全隐患,最后更新时间2021年


InnoDB Cluster

注:基于MySQL Group Replication,支持故障自动切换,支持单主/多主模式

简单说就是集成了mysql shell+mysql router+mysql server的组复制解决方案

mysql高可架构概览-1

InnoDB ReplicaSet

注:基于MySQL Replication,不支持故障自动切换,不支持多主模式,只支持基于行复制RBR,只支持GTID,只能是 mysql shell管理;mysql shell8.0.28之后版本创建ReplicaSet。

简单说就是集成了mysql shell+mysql router+mysql server的异步复制解决方案,多用于灾备环境

InnoDB ClusterSet

注:基于MySQL Replication,不支持故障自动切换,不支持多主模式,只支持基于行复制RBR,只支持GTID,只能是 mysql shell管理;mysql shell8.0.28之后版本创建ReplicaSet。

MySQL InnoDB ClusterSet provides disaster tolerance for InnoDB Cluster deployments by linking a primary InnoDB Cluster with one or more replicas of itself in different datacenters

简单说就是集成了InnoDB Cluster+InnoDB ReplicaSet的多数据中心灾备解决方案

mysql高可架构概览-1

参考:

Chapter 17 Group Replication

MySQL :: Improving the Parallel Applier with Writeset-based Dependency Tracking

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论