mysql mgr

1、MGR组复制原理

本章将会介绍MySQL官方推荐的一款高可用集群方案MySQL Group Replication,简称:MGR(组复制)。它是官方推出的一种基于Paxos协议的状态机复制,彻底解决了基于传统的异步复制和半同步复制中数据一致性问题无法保证的情况,也让MySQL数据库涉及的领域更广,打开互联网金融行业的大门。

2016年12月 MySQL Group Replication推出了第一个GA版本发布在MySQL5.7.17中。但目前将其直接投入到生产环境中使用的风险还是比较大,建议等其成熟之后再真正投入使用。

如今,MySQL8.0版本即将与我们见面,再加上官方逐渐成熟的高可用集群 Group Replication方案,到时候谁还是我们MySQL的对手?全都不在了!MySQL数据库就是作者的信仰,爱你无怨无悔。

首先我们来谈谈什么叫做组复制。

组复制是一种可用于实现容错系统的技术。复制组是一个通过消息传递相互交互的Server集群。复制组由多个Server成员组成,如下图的Master1、Master2、Master3,所有成员独立完成各自的事务。

mysql mgr_第1张图片
image.png

当客户端发起一个更新事务时,该事务先在本地执行,执行完成之后就要发起对事务的提交操作。在还没有真正提交之前,需要将产生的复制写集广播出去,复制到其它成员。如果冲突检测成功,组内决定该事务可以提交,其它成员可以应用,否则就回滚。

最终,所有组内成员以相同的顺序接收同一组事务。因此组内成员以相同的顺序应用相同的修改,保证组内数据强一致性。

二、MGR组复制模式

组复制可以在两种模式下运行:

  • 单主模式下,组复制具有自动选主功能,每次只有一个 Server成员接受更新,其它成员只提供读服务。
  • 多主模式下,所有的Server 成员都可以同时接受更新,没有主从之分,成员角色是完全对等的。

组复制默认情况下是单主模式,我们可以通过设置参数,让其变成多主模式。

group_replication_single_primary_mode=off

本章的实战部分就是以多主模式进行MGR复制的搭建。

三、MGR特性介绍

MGR的特性在于:

  • 完成了真正的多节点读写的集群方案;
  • 基于原生复制及Paxos协议的组复制技术,并以插件的方式提供,实现了数据的强一致性;
  • 由于是多节点读写,Failover切换变得更加简单;
  • 增加删除节点,自动完成同步数据和更新组内信息的操作,扩展性增强。

虽然在MGR的多主模式下有不能支持串行隔离级别和不支持外键级联操作的限制条件,且目前MySQL版本中存在由于对DDL语句操作无法实现回滚,导致MGR无法对DDL语句做数据冲突检验,以致DDL语句在MGR中并发执行存在隐患的情况。但这些都不能阻挡MGR的发布所带来的开创新时代的意义。

四、MGR搭建实战演练

环境介绍:

这里我们准备三个节点,数据库版本使用MySQL5.7.27。

数据库IP地址 数据库版本信息 主机名 Server-id
192.168.56.100 5.7.27 mgr1 1003306
192.168.56.101 5.7.27 mgr2 1013306
192.168.56.102 5.7.27 mgr3 1023306

实战第1步:

在三个节点上执行安装MySQL5.7操作。

  • 1.下载二进制包
    下面mysql-5.7.27-linux-glibc2.12-x86_64.tar链接是官网
    https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
    使用IDA_Portable下载http://download.westbyte.com/ida/IDA_Portable.zip
  • 2.解压,改名
cd /usr/local/src/
tar -zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.27-linux-glibc2.12-x86_64 /usr/local/mysql
  • 3.创建用户和目录
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
mkdir -p /usr/local/mysql/data/mysql 
chown mysql:mysql /usr/local/mysql/data/mysql
  • 4.初始化数据库
[root@mgr1 mysql]# ./bin/mysqld  --initialize --user=mysql --datadir=/usr/local/mysql/data/mysql
2019-09-27T08:18:03.241116Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-09-27T08:18:03.748576Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-09-27T08:18:03.830317Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-09-27T08:18:03.904286Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 53d1aae6-e0ff-11e9-98fa-080027b2e4b2.
2019-09-27T08:18:03.910754Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-09-27T08:18:03.916763Z 1 [Note] A temporary password is generated for root@localhost: O*HELel:J3hY  --这个是密码
  • 5配置加密连接
[root@mgr1 mysql]# ./bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data/mysql
Generating a 2048 bit RSA private key
..............................................+++
..........................................................................................................................................................................................................................................+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key
............................................................+++
.................................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key
......................+++
........................+++
writing new private key to 'client-key.pem'
-----
  • 6 拷贝配置文件和启动脚本
vim /etc/my.cnf

实战第2步:

在三个节点上分别设置hostname和IP地址的映射关系。

192.168.56.100 mgr1
192.168.56.101 mgr2
192.168.56.102 mgr3

你可能感兴趣的:(mysql mgr)