🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 市面上,比较流行的MySQL集群方案,包括官方和第三方提供的;考虑到综合因素,这里只采用官方方案; 官方方案主要包括MySQL Replication、MySQL Fabirc和MySQL Cluster以及MySQL InnoDB Cluster; ## 二 、MySQL Replication MySQL复制(MySQL Replication),是MySQL自带的功能; 它是**一主多从**的结构,主要目的是实现数据的多点备份(但它并没有故障自动转移和负载均衡特性); ### **相比于单个的MySQL的优势** * 可实现读操作连接从数据库,写操作连接主数据库,起到读写分离的作用,这个时候多个从数据库可以做负载均衡; * 可以在某个从数据库中暂时中断复制进程,来备份数据,从而不影响主数据的对外服务(如果在master上执行backup,需要让master处于readonly状态,这也意味这所有的write请求需要阻塞); ### **集群方案比较的优势** * MySQL Replication是MySQL自带的,无需借助第三方; * 数据被删除,可以从binlog日志中恢复; * 配置简单; ### **集群方案比较的劣势** * 从库要从binlog获取数据并重放,这肯定与主库写入数据存在时间延迟,因此从库的数据总是要滞后主库; * 对主库与从库之间的网络延迟要求较高,若网络延迟太高,将加重上述的滞后,造成最终数据的不一致; * 单一的主节点挂了,将不能对外提供写服务; ## 三、MySQL Fabirc MySQL 织物(MySQL Fabirc),是MySQL 官方提供的; 这是在MySQL Replication的基础上,增加了故障检测与转移,自动数据分片功能。不过依旧是**一主多从**的结构,MySQL Fabirc只有一个主节点,区别是当该主节点挂了以后,会从从节点中选择一个来当主节点; ### **集群方案比较的优势** * MySQL 官方提供的工具,无需第三方插件; * 数据被删除,可以从binlog日志中恢复; * 主节点挂了以后,能够自动从从节点中选择一个来当主节点,不影响持续对外提供写服务; ### **集群方案比较的劣势** * 从库要从binlog获取数据并重放,这肯定与主库写入数据存在时间延迟,因此从库的数据总是要滞后主库; * 对主库与从库之间的网络延迟要求较高,若网络延迟太高,将加重上述的滞后,造成最终数据的不一致; * 2014年5月推出的产品,数据库资历较浅,应用案例不多,网上各种资料相对较少; * 事务及查询只支持在同一个分片内,事务中更新的数据不能跨分片,查询语句返回的数据也不能跨分片; * 节点故障恢复30秒或更长(采用InnoDB存储引擎的都这样); ## 四 、MySQL Cluster MySQL 集群(MySQL Cluster)也是MySQL 官方提供的; MySQL Cluster是**多主多从**结构的; ### **集群方案比较的优势** * MySQL 官方提供的工具,无需第三方插件; * 高可用性优秀,99.999%的可用性,可以自动切分数据,能跨节点冗余数据(其数据集并不是存储某个特定的MySQL实例上,而是被分布在多个Data Nodes中,即一个table的数据可能被分散在多个物理节点上,任何数据都会在多个Data Nodes上冗余备份。任何一个数据变更操作,都将在一组Data Nodes上同步,以保证数据的一致性); * 可伸缩性优秀,能自动切分数据,方便数据库的水平拓展; * 负载均衡优秀,可同时用于读操作、写操作都都密集的应用,也可以使用SQL和NOSQL接口访问数据; * 多个主节点,没有单点故障的问题,节点故障恢复通常小于1秒; ### **集群方案比较的劣势** * 架构模式和原理很复杂; * 只能使用存储引擎 NDB ,与平常使用的InnoDB 有很多明显的差距。比如在事务(其事务隔离级别只支持Read Committed,即一个事务在提交前,查询不到在事务内所做的修改),外键(虽然最新的NDB 存储引擎已经支持外键,但性能有问题,因为外键所关联的记录可能在别的分片节点),表限制上的不同,可能会导致日常开发出现意外; * 作为分布式的数据库系统,各个节点之间存在大量的数据通讯,比如所有访问都是需要经过超过一个节点(至少有一个 SQL Node和一个 NDB Node)才能完成,因此对节点之间的内部互联网络带宽要求高; * Data Node数据会被尽量放在内存中,对内存要求大,而且重启的时候,数据节点将数据load到内存需要很长时间; ## 五 、MySQL InnoDB Cluster MySQL InnoDB cluster是Mysql官方提供的一个完全高可用的数据库解决方案,支持单主,也支持多主架构; ### **架构** MySQL InnoDB Cluster 主要由三个模块构成: 1. 支持Group Replication功能的MySQL Server(version >= 5.7.17,是高版本MySQL 的一个官方内置插件),模块主要功能在于实现了组内通信,故障转移(英语:failover, 即当活动的服务或应用意外终止时,快速启用冗余或备用的服务器、系统、硬件或者网络接替它们工作)、故障恢复(英语:failback,将系统,组件,服务恢复到故障之前的组态); 2. MySQL -Shell:它是官方提供的一个shell客户端,支持sql、js、python脚本命令;实现快速部署,主要提供了一套AdminAPI,可以自动化配置Group Replication,让我们无须再手动配置cluster中Group Replication相关参数; 3. MySQL -Router:内置读写分离,负载均衡,它是官方提供的一个用来实现负载的均衡的软件;