热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysql高一致高可用方案

一句话总结:使用官方MysqlInnodbCluster集群方案实现Mysql冗余备份,无单点故障的高可用性。项目背景:腾讯数据中心网络的SDN控制器,项目业务对数据的要求如下:

一句话总结:使用官方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方案:

 

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为具体某个写节点,当该节点挂掉后,虽然组复制机制会自动重新选主,但应用层面就需要做额外处理如切换数据源等。

 

而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

 


推荐阅读
  • MySQL for OPS 08:MHA 高可用
    MySQL for OPS 08:MHA 高可用 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Linux环境中使用Mysql数据库
    Linux下Mysql数据库MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司,目前属于Oracle公司,MySQL被广泛地应用在I ... [详细]
  • 本文是搭建的mariadb-10.0.17版本的下载地址:https:downloads.mariadb.orginterstitialmariadb-10.0.17sourcemariadb-10.0.17.tar.gzfromhtt ... [详细]
  • 1、MySQL标志说明MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 数据库进入全新时代,腾讯云发布五大数据库提前布局
    8月28日,腾讯云数据库在京正式启动战略升级,宣布未来将聚焦云原生、自治、超融合三大战略方向,以用户为中心,联接未来。并在现场面向全球用户同步发布五大战略级新品,包括数据库智能管家 ... [详细]
  • MySQL/MariaDB/PerconaDB提权条件漏洞
    背景  2016年11月01日,国外安全研究员DawidGolunski在MyS ... [详细]
  • MySQL之left join表查询中发生字符集转换导致表索引失效
    mysql,之,left,join,表,查询,中,发生,字符,集,转换, ... [详细]
  • 1.ATP方式安装在ubuntu系统的apt软件仓库中,默认存在MySQL数据库,所以直接使用apt命令就可以安装。使用命令:aptapt-getin ... [详细]
author-avatar
社会逼我爱上Money_717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有