MySQL MGR 有哪些优点

 更新时间:2020年08月06日 09:39:53   作者:MySQL轻松学  
这篇文章主要介绍了MySQL MGR 有哪些优点,文中讲解非常细致,帮助大家更好的理解和学习MySQL mgr,感兴趣的朋友可以了解下

MGR(Mysql Group Replication)是5.7版本新加的特性,是一个MySQL插件。

MGR 是一个新的高可用与高扩展的方案,集群中的任何节点数据都是一样的,可以实现任何节点都可以写入,实现了真正意义上的多主。

主要包含以下几部分:

 API层:负责完成和MySQL Server的交互,得到Server状态,完成事务的管理。

组件层:主要包括3个特定组件,Capture负责收集事务执行的相关信息,Applier负责应用集群事务到本地,Recovery负责节点的数据恢复。

复制层:负责冲突验证,接收和应用集群事务。

集群通信层:基于Paxos协议的集群通信引擎,以及和上层组件的交互接口。

MGR组复制:

基于传统异步复制和半同步复制的缺陷——数据的一致性问题无法保证,MySQL官方在5.7.17版本正式推出组复制(MySQL Group Replication,简称MGR)。

由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N / 2 + 1)决议并通过,才能得以提交。如上图所示,由3个节点组成一个复制组,Consensus层为一致性协议层,在事务提交过程中,发生组间通讯,由2个节点决议(certify)通过这个事务,事务才能够最终得以提交并响应。

引入组复制,主要是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。组复制依靠分布式一致性协议(Paxos协议的变体),实现了分布式下数据的最终一致性,提供了真正的数据高可用方案(是否真正高可用还有待商榷)。其提供的多写方案,给我们实现多活方案带来了希望。

MGR是实现分布式数据库架构,底层的分布式基础是Paxos协议。通过Paxos来保证分布式数据库系统中事务的提交顺序。虽然MGR会使用Slave的通道,但只是使用这个通道的执行线程(Applier Thread)来执行远程发送过来的Binlog Event,并没有使用这个通道来传输Binlog Event。MGR没有使用异步复制的Binlog Event传输机制,也不使用MySQL的服务端口来进行通信。MGR创建了一个独立的TCP端口来进行通信,各个MySQL服务器上的Group Replication插件通过这个端口连接在一起,两两之间可以直接通信。

Binlog Event的传输并不像异步复制那样是简单的点到点之间的传输。MGR在传输数据时,使用了Paxos协议。Paxos协议保证了数据传输的一致性和原子性。MGR基于Paxos协议构建了一个分布式的状态机复制机制,这是实现多主复制的核心技术。

三个主要优点:

1. 避免脑裂:MGR中不会出现脑裂的现象(但要注意可能出现网络分区的情况,MGR根据参数group_replication_unreachable_majority_timeout=0/N设置的不同,行为稍有不同)。

2. 数据一致性保障:MGR的冗余能力很好,能够保证Binlog Event至少被复制到超过一半的成员上,只要同时宕机的成员不超过半数便不会导致数据丢失。MGR还保证只要Binlog Event没有被传输到半数以上的成员,本地成员不会将事务的Binlog Event写入Binlog文件和提交事务,从而保证宕机的服务器上不会有组内在线成员上不存在的数据。因此,宕机的服务器重启后,不再需要特殊的处理就可以加入组。

3. 多节点写入支持:多写模式下支持集群中的所有节点都可以写入。

以上就是MySQL MGR 有哪些优点的详细内容,更多关于MySQL MGR 的资料请关注脚本之家其它相关文章!

相关文章

  • mysql5.7.18版本免安装配置教程

    mysql5.7.18版本免安装配置教程

    这篇文章主要为大家详细介绍了mysql5.7.18版本免安装的配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • centos下安装mysql服务器的方法

    centos下安装mysql服务器的方法

    本篇文章是对在centos下安装mysql服务器的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySql CPU激增原因小结

    MySql CPU激增原因小结

    本文主要介绍了MySQL CPU激增的原因和解决方法,包括QPS激增、慢SQL和大量空闲连接导致的CPU升高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • 数据库中row_number()、rank() 和 dense_rank() 的区别

    数据库中row_number()、rank() 和 dense_rank() 的区别

    本文主要结合了SQL中的排名函数ROW_NUMBER()、RANK()和DENSE_RANK(),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Spring jdbc中数据库操作对象化模型的实例详解

    Spring jdbc中数据库操作对象化模型的实例详解

    这篇文章主要介绍了Spring jdbc中数据库操作对象化模型的实例详解的相关资料,希望通过本文大家能够了解掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • mysql binlog日志自动清理及手动删除

    mysql binlog日志自动清理及手动删除

    本文主要介绍了mysql binlog日志自动清理及手动删除,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Window下如何恢复被删除的Mysql8.0.17 Root账户及密码

    Window下如何恢复被删除的Mysql8.0.17 Root账户及密码

    这篇文章主要介绍了Window下如何恢复被删除的Mysql8.0.17 Root账户及密码,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • MySQL Router实现MySQL的读写分离的方法

    MySQL Router实现MySQL的读写分离的方法

    MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy。本文主要介绍了MySQL Router实现MySQL的读写分离的方法,感兴趣的可以了解一下
    2021-05-05
  • mysql的内连接,左连接和右链接查询详解

    mysql的内连接,左连接和右链接查询详解

    这篇文章主要为大家详细介绍了mysql的内连接,左连接和右链接查询,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • MySQL数据表损坏的正确修复方案

    MySQL数据表损坏的正确修复方案

    修复以损坏的MySQL数据表的实际操作在实际中是我们经常用到的,以下的文章主要是介绍正确修复以损坏的MySQL数据表的实际操作步骤,以下就是正文的介绍,希望会给你带来一些帮助在此方面。
    2011-01-01

最新评论