MySQL Group Replication(一)部署篇

文若2年前技术文章715


MGR 简介

Group Replication 是 MySQL 在 2016 年 12 月以 GA 的形式发布,以插件的形式绑定在 MySQL 服务器上。

传统的 MySQL 复制功能是异步复制,而 MGR 实现了完全同步复制。因此,MGR 可以为用户提供更强的数据一致性。而且支持多点写入模式,可自动处理数据冲突。MGR 远远超出 MySQL 传统复制功能的限制,允许用户获得更高级别的可用性,是高可用数据库解决方案中的一个重要组件。

1. 部署要求

1.1 网络性能

网络的延迟与带宽会影响组复制的性能和稳定性。全部组成员之间必须始终保持双向通信。条件允许的情况下,用户可以配置双网卡及高质量的交换机,并尽可能使用高速网络。

1.2 存储引擎

为了保证组范围内的数据一致性,当成员出现冲突时,需要将一些事务回滚,组复制仅支持 innodb 事务引擎。

1.3 主键限制

组复制要求每张表必须有一个已定义的主键,主键是表中的唯一标识,使 MySQL 可以准确识别每个事务修改了那些行,以确定哪些事务发生冲突。

1.4 唯一 ID

组复制需要为每个组成员配置一个唯一 ID,用户可以使用 server_id 参数来设置。

设置规范:

-- 例如:
172.16.104.32

32 + 3306 (MySQL 端口号)= 323306

1.5 二进制日志

必须开启 mysql binlog 日志,且日志格式必须为 row 模式。

log_bin = ON
binlog_format = ROW

1.6 副本更新日志

加入组时,组成员需要记录从数据提供者那里接收的事务,并对其进行应用,还需要记录他们从组接收并应用的全部事务,组复制通过该方式进行分布式恢复。

log_slave_updates = ON

1.7 GTID 模式

组复制需要基于 GTID 复制,它使用全局事务标识来跟踪已提交到组中的每台服务器实例上的事务。

gtid_mode = ON
enforce_gtid_consistency = ON


2. 部署 MGR

部署前需要关闭防火墙,以及系统 HOSTS 配置。

IP 地址

系统版本

honstname

172.16.104.57

CentOS Linux release 7.8.2003 (Core)

172-16-104-57

172.16.104.56

CentOS Linux release 7.8.2003 (Core)

172-16-104-56

172.16.104.56

CentOS Linux release 7.8.2003 (Core)

172-16-104-55

2.1. 下载安装包

下载地址如下,无特殊要求的话,下载官方最新 GA 版即可。

MySQL 官方 8.0 GA 安装包下载地址

2.2. 安装 MySQL

安装部署 MySQL 步骤在此省略,可在官网内搜索单机部署的文章。

2.3. MGR 参数

下方是 MGR 相关的参数配置:

# MGR 插件
plugin_load_add='group_replication.so'

# 集群唯一标识,可使用 select uuid();
group_replication_group_name="a640da45-e4d1-11ed-a959-fa0e3cc40b00"

# 是否自动启动组复制,部署阶段设置为 OFF
group_replication_start_on_boot=off

# 当前实例的地址,用于提供给其它成员,用于 XCom 引擎通信
group_replication_local_address='172.16.104.57:33061'

# 组复制种子成员地址,用于与其它成员通信
group_replication_group_seeds='172.16.104.57:33061,172.16.104.56:33061,172.16.104.55:33061'

# replicationgroup_replication_bootstrap_group=off

需要注意 group_replication_local_address 官方推荐的端口是 33061 该端口不被应用于响应用户请求,用于组复制内部通信,及 XCom 引擎通信使用。

参数 group_replication_group_seeds 是组复制成员列表,配置规则为 IP:端口 端口是 XCom 引擎通信端口。

按照环境修改完成参数后,需要重启 MySQL 实例,使用下方 SQL 可查询 MGR 插件是否正常运行。

select * from PLUGINS where PLUGIN_NAME = 'group_replication'\G

2.4. 创建分布式用户

组复制需要使用一个用户执行分布式恢复,分布式恢复用于将组当前数据通过 group_replication_recovery 通道对新加入组的成员进行数据同步。创建用户的操作在主库执行即可,如果想要每个实例都有不同的分布式用户,创建前可以关闭 Binlog 写入。

CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;

2.5. 引导启动

当主库配置完成后,就可以启动组复制,初次启动组复制的操作叫引导启动,需要使用下方系统变量,而且该变量只能在一个组成员上启用,如果在多台组成员上启用,则会产生多个同名称的组,形成 “脑裂” 现象。

引导启动只能由单个实例完成,且只能执行一次。

select @@group_replication_bootstrap_group;

执行引导 SQL:

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

当 Start 命令执行成功后,表明组已创建,可通过下方 SQL 查询组信息,现在组初次创建,只有一名成员。

SELECT * FROM performance_schema.replication_group_members;

*************************** 1. row ***************************
              CHANNEL_NAME: group_replication_applier
                 MEMBER_ID: 9590bf9c-c302-11ed-8d53-faa7cd9c6a00
               MEMBER_HOST: 172-16-104-57
               MEMBER_PORT: 3306
              MEMBER_STATE: ONLINE
               MEMBER_ROLE: PRIMARY
            MEMBER_VERSION: 8.0.32
MEMBER_COMMUNICATION_STACK: XCom

2.6. 向组添加成员

配置通道:

CHANGE REPLICATION SOURCE TO SOURCE_USER = 'rpl_user', 
SOURCE_PASSWORD = 'password' FOR CHANNEL 'group_replication_recovery';

启动组复制:

START GROUP_REPLICATION;

如果启动失败,错误日志中有下方异常,执行 reset master 后重试即可。

[ERROR] [MY-011522] [Repl] Plugin group_replication reported: 'The member contains transactions not present in the group. The member will now exit the group.'

查询组内成员信息:

+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST   | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9590bf9c-c302-11ed-8d53-faa7cd9c6a00 | 172-16-104-57 |        3306 | ONLINE       | PRIMARY     | 8.0.32         | XCom                       |
| group_replication_applier | eccc6b43-b0fc-11ed-8e74-fa0e3cc40b00 | 172-16-104-56 |        3306 | ONLINE       | SECONDARY   | 8.0.32         | XCom                       |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+----------------------------+

此时可以看到组内有两个成员,主要成员和次要成员 PRIMARY 和 SECONDARY。

重复上方操作,将第三个成员也加入到组内。

2.7. 验证复制

create database test;

use test;

create table rep_test(
    id bigint auto_increment primary key ,
    cname varchar(10)
);

insert into rep_test(cname) values ('a'),('b'),('c');

3. 后记

安装过程中,可能会遇到各种报错,不过错误日志中的提醒非常详细,错误日志 + 官方文档可以解决 90% 的问题。建议搭建过程中 tail -f error.log 实时关注错误日志。


相关文章

CDP实操--集群配置Kerberos

CDP实操--集群配置Kerberos

1.1检查IPA设置以及配置Kerberos前提条件登录IPA Server在services页面里都是ipa自带的服务,集群配置完kereros后,这里会增加集群里各项hadoop服务。在host页...

记一次zkfc故障问题定位

记一次zkfc故障问题定位

问题现象:    zkfc进程频繁告警问题分析:    1.查看zkfc日志显示如下,大量的与zk连接超时的信息,达到一...

PostgreSQL 逻辑备份详解

前言当谈到关系型数据库的备份和恢复时,逻辑备份是一种备份方法,它备份数据库的逻辑结构和数据,而不是直接备份磁盘上的物理数据。这样做有许多好处,比如备份速度更快,可以选择性地备份数据库中的某些数据,以及...

MySQL运维实战之ProxySQL(9.10)proxysql监控

MySQL运维实战之ProxySQL(9.10)proxysql监控

stats数据库从stats数据库中可以查到proxysql一些内部组件的状态,如内存使用情况、连接池信息、会话信息、SQL执行状态等。mysql> show tables&...

oracle开启关闭归档

一、开启归档1.开启前准备:备份spfileCreate pfile='d:pfileSID.ora' from spfile;OS上创建归档目录:+DATA_DG/arch设置归档路径:alter...

CDH实操--hive高可用

CDH实操--hive高可用

前言在CDH中,hive metastore、hiveserver2若角色单实例部署,或者部署多个实例但是连接配置任选其一的话,均存在单点问题,一旦实例故障就会影响业务稳定;这时我们就好考虑高可用部署...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。