MGR 实战

对一个企业级系统来说,数据库是非常核心的组成部分,数据库的可用性尤为重要。因此,数据库架构在设计时必须考虑足够的高可用,才可以确保业务的连续性,不会因为故障而导致业务中断。在高可用这一章,我们一起来学习一套时髦的 MySQL 高可用架构:3节点 MGR+3节点 ProxySQL+3节点 Consul

1. 一套时髦的高可用架构

提起 MySQL的高可用,大家都会想到 MHA、MMM、PXC、MGR,特别是 MGR,近几年成为新一代网红,也是 MySQL 官方主推的一套高可用方案。在 MGR 的基础上,结合一些成熟的开源软件,可以组合出几乎满足所有业务场景的高可用方案。

在这里介绍一套时髦的高可用架构:3节点 MGR+3节点 ProxySQL+3节点 Consul

该架构主要分为三层:

  1. Consul:dns解析、服务发现、健康检查;
  2. ProxySQL:负载均衡、读写分离、故障发现;
  3. MGR:单主模式、故障转移、强一致性。

图片描述

2. MGR

下面从实战的角度一步步搭建 MGR 环境。

2.1 基本环境

MySQL-1 MySQL-2 MySQL-3
MySQL版本 MySQL 5.7.30 MySQL 5.7.30 MySQL 5.7.30
操作系统 CentOS 7.8 CentOS 7.8 CentOS 7.8
服务器IP 192.168.0.1 192.168.0.2 192.168.0.3
端口 对外服务端口-3066
MGR通讯端口-33061
对外服务端口-3066
MGR通讯端口-33061
对外服务端口-3066
MGR通讯端口-33061
服务器配置 2c4g 2c4g 2c4g

2.2 安装配置

1. 安装插件:

--安装mgr插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
--检查
show plugins

2. 配置 hosts:

vi /etc/hosts
192.168.0.1 mysql-1
192.168.0.2 mysql-2
192.168.0.3 mysql-3

3. 修改 auto.cnf:

如果三台 MySQL 目录的 server-uuid 一致,需进行修改

vi /mysql/data/auto.cnf
--主库的server-uuid的末尾建议设置成0001,依次类推,这样方便识别
[auto]
server-uuid=c734397b-3b0a-11e8-add1-fa163e8e0001

4. 配置 my.cnf:

#Group Replication
binlog_checksum = NONE
transaction_write_set_extraction = XXHASH64
slave_preserve_commit_order = true
loose-group_replication_group_name = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
loose-group_replication_start_on_boot = off
loose-group_replication_local_address = '192.168.0.1:33061'
loose-group_replication_group_seeds ='192.168.0.2:33061, 192.168.0.3:33061, 192.168.0.1:33061'
loose-group_replication_bootstrap_group = off
# single primary
loose-group_replication_single_primary_mode = on
# multi primary
#loose-group_replication_single_primary_mode = off
#loose-group_replication_enforce_update_everywhere_checks=true

5. 启动MGR-主库

--配置复制用户
set sql_log_bin=off;
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY '123456';
set sql_log_bin=on;
 
--建立channel
CHANGE MASTER TO MASTER_USER='repl_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';

--第一个节点启动时,需要设置bootstrap_group
SET GLOBAL group_replication_bootstrap_group = ON;

--启动MGR
START GROUP_REPLICATION;

--取消bootstrap_group
SET GLOBAL group_replication_bootstrap_group = OFF;

--查看当前MGR成员信息
SELECT * FROM performance_schema.replication_group_members;

6. 启动MGR-从库

--配置复制用户
set sql_log_bin=off;
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY '123456';
set sql_log_bin=on;
 
--建立channel
CHANGE MASTER TO MASTER_USER='repl_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';

--启动MGR
START GROUP_REPLICATION;

7. 查看MGR

--查看当前MGR成员信息
SELECT * FROM performance_schema.replication_group_members;
--查看只读参数
show variables like '%read_only%';

2.3 基础维护

1. 启动MGR

START GROUP_REPLICATION;

2. 停止MGR

STOP GROUP_REPLICATION;

3. 小结

本小节主要介绍了当前主流的高可用架构:3节点 MGR+3节点 ProxySQL+3节点 Consul,以及从实战角度介绍如何搭建 MGR 环境。

MGR 在 MySQL 高可用领域,属于新一代网红,也是 MySQL 官方主推的高可用方案,掌握 MGR 这门技术已经变得越来越重要。