mysql 强一致性_Mysql高一致高可用方案

本文介绍了在腾讯数据中心网络SDN控制器项目中,如何使用MySQL官方的InnoDB Cluster来实现高一致性和高可用性。项目需求包括高可用的冗余备份、强一致性以及低并发。对比了多种业内方案的优缺点,最终选择了基于Paxos协议的MySQL Group Replication,以单主模式确保数据一致性,并通过MySQL Router为应用层提供统一入口,简化数据库故障切换。此外,还介绍了MySQL Shell作为集群管理工具的角色。
摘要由CSDN通过智能技术生成

一句话总结:使用官方Mysql Innodb Cluster集群方案实现Mysql冗余备份,无单点故障的高可用性。

项目背景:

腾讯数据中心网络的SDN控制器,项目业务对数据的要求如下:

1、对数据可用性要求高,要求多节点冗余备份,Mysql单点故障后可以切换到其他节点

2、对数据准确性要求高,对Mysql写数据时,需要强一致性备份,不能是异步的备份

3、并发请求低

业内方案:

方案

优点

缺点

主备或一主多备,默认为异步复制,可安装插件半同步复制

官方方案,可进行读写分离,配置较简单

1、写节点单点故障

2、默认异步备份,非强一致性

3、将从库提升为主库需要应用层实现

双主 + keepalive + 虚IP

双主可同时写

1、引入了keepalive组件

2、双主同时写存在较多冲突场景

MariaDB Gelera Cluster

支持多写和高可用性,同步复制备份,每个节点保留全部数据

1、全同步写,写性能较低

2、不支持锁的SQL如lock/unlock等

3、不支持XA事务

Mysql NDB Cluster

官方方案,支持分片即分布式存储,支持多写,号称可做到99.999%的可用性

1、架构复杂,部署也较复杂

2、管理节点的可靠性需额外再考虑

Mysql Fabric

早起Oracle出的方案,支持分片和基于同步或半同步的复制备份

1、用的人较少,方案有点不成熟

2、需要修改代码,使用特定的mysql-connector

业内在冗余备份的基础上,提高并发能力的设计思路有:

1、读写分离,单入口写,多节点同时读

2、写并发提升:数据分片,即类似分库,1~100的数据分布在节点A,100~200的数据分布在节点B,不同分片的数据如2和102可同时写

3、写并发提升:多主即多写,大多数情况不同数据同时写,当碰到同时操作同一数据如update同一条记录,由额外的仲裁流程介入,Mysql多主模式的处理方式为先提交的事务写成功,后提交的事务失败抛出异常,由应用层面处理看是丢弃或是读取最新事务后重新发起事务

采用方案:

由于分片、多写等复杂的方案架构复杂,都有一些限制,而项目还用到了Mysql的事务,XA事务,事务隔离,事务传播,表锁,行锁等,固应根据项目需要选择尽量简单的方案,采用Mysql官方的Innodb Cluster方案:

b54da8a98d8e212dfeebc20d2f8bcb41.png

Mysql Innodb Cluster方案其实是由Mysql几个功能和插件组成的:

1、Mysql Group Replication组复制

基于paxos协议的高一致性备份,写节点挂掉后自动重新选主,支持单主模式和多主模式(这里我们采用单主模式)。具体如下:

1)高一致性

基于原生复制及 paxos 协议的组复制技术,提供一致数据安全保证

2)高容错性

多数派机制,只要不是超过一半节点挂掉就能工作,内置了集群检测、fail-tolarence、fail-over等机制

3)高扩展性

节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息

4)高灵活性

有单主模式和多主模式,单主模式下,所有写操作都在主上进行;多主模式下,所有 server 都可以同时处理写操作

2、Mysql Router

Mysql Router更多是为应用层面服务的,假设应用层面如hibernate配置了数据库url为具体某个写节点,当该节点挂掉后,虽然组复制机制会自动重新选主,但应用层面就需要做额外处理如切换数据源等。

951e5a74faf38511c5a5c7ef49982ee5.png

951e5a74faf38511c5a5c7ef49982ee5.png

而Mysql Router可以为应用层面屏蔽下面数据库的变化,提供统一的操作入口。

3、Mysql shell

Mysql shell是作为Mysql Cluster的命令行管理工具。

引用:

https://dev.mysql.com/doc/refman/8.0/en/mysql-innodb-cluster-introduction.html

https://dev.mysql.com/doc/refman/8.0/en/group-replication-summary.html

https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-innodb-cluster.html

591027735cf7799750211ce03469be93.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值