MySQL Group Replication(一)部署篇

文若1年前技术文章428


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 实时关注错误日志。


相关文章

大数据即席查询-Kylin

大数据即席查询-Kylin

一、Kylin 定义 Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop/Spark 之上的 SQL 查询接口 及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay I...

Hbase预分区

Hbase预分区

HBase 的数据物理存储格式为多维稀疏排序 Map, 由 key 及 value 组成:key 的构成: rowkey+column family+column qualifier+timestam...

开源大数据集群部署(十四)Ranger集成Hbase

开源大数据集群部署(十四)Ranger集成Hbase

在hd1.dtstack.com主机上执行在hmaster和back master上进行安装和执行Ø 解压ranger-2.3.0-hbase-plugin[root@hd1.dtstack.com ...

Hive压测之开源Hive基准测试工具(hive-testbench-hive14)

Hive压测之开源Hive基准测试工具(hive-testbench-hive14)

此文章禁止转载概述Hive基准测试工具工具,可用来造数测试Hive基本性能。TPC-DS:提供一个公平和诚实的业务和数据模型,99个案例TPC-H:面向商品零售业的决策支持系统测试基准,定义了8张表,...

Redis 持久化机制 RDB

Redis 持久化机制 RDB

前言Redis 有两种持久化机制,分别是 RDB 与 AOF 本篇文章将介绍 RDB 的执行过程与应用。1. RDB 简介RDB 持久化是把当前进程数据生成快照保存到硬盘的过程,触发 RDB 持久化过...

hdfs短路读

hdfs短路读

原理当客户端执行数据块副本短路读时,Client与DataNode的交互过程具体如下图:含义如下:(1)DFSClient通过requestShortCircuitShm()接口向DataNode请求...

发表评论    

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