//
MySQL原生高可用方案之InnoDB Cluster(一)
//
01
InnoDB Cluster(集群)介绍
之前的文章中,我们针对Innodb Replicaset进行了介绍,它是MySQL中的一种高可用方案,它的硬伤是不能实现自主的故障自愈。今天我们来看另外一种功能更加健全的高可用方案,Innodb Cluster。
InnoDB Cluster是MySQL官方推出的高可用方案,一个集群由至少3个MySQL Server组成,它提供了MySQL服务的高可用性和可伸缩性,InnoDB Cluster包含下面三个关键组件:
1、MySQL Shell,它是MySQL的高级管理客户端
2、MySQL Server和MGR,使得一组MySQL实例能够提供高可用性,对于MGR,Innodb Cluster提供了一种更加易于编程的方式来处理MGR
3、MySQL Router,一个轻量级的中间件
Innodb Cluster集群的架构图如下:
从图中不难看出,MySQL Server位于架构的最底层,每个Server之间借助MGR实现故障自愈和容错,通常情况下,InnoDB Cluster使用MGR的弹珠模式,高级用户还可以使用MGR的多主模式。
对于应用程序来说,直连的是MySQL Router;
对于DBA来说,使用更多的是MySQL Shell
02
InnoDB ReplicaSet的限制
在将InnoDB Cluster使用到生产环境之前,我们需要确保服务器满足以下要求:
1、InnoDB Cluster使用组复制,所以实例之间首先需要能够成功搭建MGR,dba.checkInstanceConfiguration方法可以用来验证实例是否满足组复制要求,并提供dba.configureInstance方法可以用来配置实例从而满足要求
2、MGR场景下可以使用MyISAM类型的表,这类表无法通过MGR写入,但是可以读取。在使用InnoDB Cluster的时候,为了能够写入这种类型的表,需要将其转换成为Innodb存储引擎的。
3、Performance schema特性必须在每个Innodb Cluster的成员中开启
4、MySQL Shell配置Innodb Cluster的时候需要使用到Python,需要确保我们的环境上有安装Python
5、从MySQL8.0.17开始,Innodb Cluster集群中的server id 必须唯一,相同Server id的MySQL Server在加入集群的时候,会报错。
6、从MySQL 8.0.23开始,应该将MySQL实例开启并行复制。
7、InnoDB Cluster配置过程中,会设置大多数常用的系统变量,但是不会设置transaction_isolation隔离级别变量,默认是RR隔离级别,如果使用底层的MGR使用的是单主模式,则不会影响集群,如果使用的是多主模式,则建议将隔离级别修改成RC级别。
下一篇文章将详细描述InnoDB Cluster集群的搭建过程。搭建之前,需要拥有MySQL Shell、MySQL Router和MGR的环境,关于环境搭建部分,可以查看对应的文章内容:
MySQL Shell搭建:
MySQL原生高可用方案之InnoDB ReplicaSet(二)
MySQL Router搭建:
MySQL原生高可用方案之InnoDB ReplicaSet(三)
MGR搭建:
MGR搭建以及性能测试