1. MGR简介 深入浅出MGR
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1. MGR简介 深入浅出MGR相关的知识,希望对你有一定的参考价值。
参考技术AMGR是mysql Group Replication的缩写,即MySQL组复制。
在以往,我们一般是利用MySQL的主从复制或半同步复制来提供高可用解决方案,但这存在以下几个比较严重的问题:
因为上述几个明显的缺点,因此MySQL推出了全新的高可用解决方案 -- 组复制,这是本系列文章要着重介绍的新特性。
MGR是MySQL 5.7.17开始引入的,但随着5.7版本逐渐退出历史舞台(MySQL 5.7已于2020年10月起不再做大的功能更新,只有修修补补以及针对安全更新),更多MGR相关特性都只在MySQL 8.0上才有。
因此,如果线上还有基于MySQL 5.7版本的MGR环境的话,建议尽快升级、迁移到MySQL 8.0版本。进一步提醒,推荐MySQL 8.0.22及之后的版本,整体会更稳定可靠,也有些很不错的新功能(不只是MGR方面的)。
MGR具备以下几个特点:
MGR可以选择单主(Single-Primary)模式
如上图所示,一开始S1节点是Primary角色,提供读写服务。当它发生故障时,剩下的S2-S5节点会再投票选举出S2作为新的Primary角色提供读写服务,而S1节点再达到一定超时阈值后,就会被踢出。
亦可选择多主(Multi-Primary)模式(再次 强烈建议选用单主模式 )
如上图所示,一开始S1-S5所有节点都是Primary角色,都可以提供读写服务,任何一个节点发生故障时,只需要把指向这个节点的流量切换下就行。
上述两种架构模式下,应用端通过MySQL Router连接后端在MGR服务,当后端节点发生切换时,Router会自动感知,对应用端来说几乎是透明的,影响很小,架构上也更灵活。
首先来个MGR的技术架构图:
MGR是以Plugin方式嵌入MySQL,部署更灵活方便。
事务从Server层通过钩子(hook)进入MGR API接口层,再分发到各组件层,在组件层完成事务Capture/Apply/Recover,通过复制协议层(Replication Protocol Logics)传输事务,最后经由GCS协调事务在各节点的最终一致性。
MGR节点间由组通信系统(GCS)提供支持,它提供了故障检测机制、组成员角色管理,以及安全且有序的消息传递,这些机制可确保在各节点间一致地复制数据。这项技术的核心是Paxos算法的实现,在MySQL里称之为XCom,由它充当MGR的通信引擎。
对于要提交的事务,组中的多数派节点必须就全局事务序列中给定的事务顺序达成一致。各节点做出决定提交或中止事务的选择,但所有节点都要做出相同的决定。如果发生网络分区,导致节点间无法达成一致决定,则在网络恢复前,MGR无法工作。
MGR支持单主和多主两种模式,在单主模式下,各节点会自动选定主节点,只有该主节点能同时读写,而其他(从)节点只能只读。在多主模式下,所有节点都可以进行读写。
相对于MariaDB Galera Cluster(以及基于此技术的Percona XtraDB Cluster,下面为了书写方便,都统称为PXC),个人认为MGR具备以下几个优势:
相对于传统主从复制(Replication),我认为MGR的优势有以下几点:
以上是我根据MySQL、MariaDB、Percona的资料整理得到的观点,不一定准确和全面,有不完善的地方还请留言指正。
本节主要介绍了什么是MGR,MGR的技术架构概要,以及MGR相对PXC的几个技术优势。
MGR是MySQL四部战略走的关键一环,依靠MGR和MySQL Shell、MySQL Router已实现了读节点扩展,以及写节点扩展(MGR多主模式),下一步预计实现sharding,让我们拭目以待。
相信MGR也是MySQL未来几年的重头戏,建议跟紧方向,不要错过这班列车。
因个人水平有限,专栏中难免存在错漏之处,请勿直接复制文档中的命令、方法直接应用于线上生产环境。请读者们务必先充分理解并在测试环境验证通过后方可正式实施,避免造成生产环境的破坏或损害。
Enjoy GreatSQL :)
Docker深入浅出系列教程——Docker简介
Docker给PaaS世界带来的“降维打击”,其实是提供了一种非常便利的打包机制。该机制打包了应用运行所需要的整个操作系统,从而保证了本地环境和云端环境的高度一致,避免了用户通过“试错”来匹配不同运行环境间差异的痛苦。
本节属于入门简介,从三个小方面进行简单介绍Docker。
Docker介绍:
- docker是一种内核级别的,新型的虚拟化技术,是运维人员的福音,相对传统虚拟化有本质的差别。
- docker介绍官网 www.docker.com
- github https://github.com/docker/dockergithub.io
- 开源的容器引擎,可以让开发者打包应用以及依赖的库,然后发布到任何流行的inux发行版上,移植很方便。
- 由go语言编写,基于 apache2.0协议发布。
- 基于 linux kernel,要想在win下运行需要借助一个vm(虚拟机)来实现
- docker从1.13X开始,版本分为社区版ce和企业版ee,并且基于年月的时可线
- 形式,当前最新稳定版为17.09参考
Docker优势
- 启动非常快,秒级实现。
- 资源利用率高,一台高配置服务器可以跑上干个 docker容器
- 更快的交付和部署,一次创建和配置后可以在任意地方运行
- 内核级别的虚拟化,不需要额外的hypervisor支持,会有更高的性能和效率
- 易迁移,平台依赖性不强
Docker核心概念
- 镜像,是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。
- 容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删刑除等操作,每个容器都是相互隔隔离的。
- 仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。最大的公开仓库是(hub. docker.com),国内公开仓库(阿里源,网页蜂巢)。
如果对Docker有更深的洞察,欢迎补充和讨论,感谢您的捧场。
以上是关于1. MGR简介 深入浅出MGR的主要内容,如果未能解决你的问题,请参考以下文章