MySQL Group Replication集群部署,基于官方文档

mysql 集群部署

修改/etc/hosts配置

10.10.21.11 cluster1

10.10.21.12 cluster2

10.10.21.13 cluster3

更改服务器hostname

hostnamectl set-hostname cluster1

配置mysql 配置文件 /etc/my.cnf

在[mysqld]下加入

server_id=12
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "10.10.21.12:33061"
group_replication_group_seeds= "10.10.21.12:33061,10.10.21.13:33061,10.10.21.14:33061"
group_replication_bootstrap_group=off

注意:

server_id 为主机标识;用来区分其他成员;

group_replication_group_name为集群名 格式为UUID;可以通过SELECT UUID()生成一个UUID作为组名

group_replication_local_address 为当前主机和其他集群成员通信地址(本机host地址:端口号);

group_replication_group_seeds 为当前集群成员地址列表,中间','隔开

以root用户或 管理员用户连接mysql ,授权普通用户(idss)为管理员
GRANT ALL PRIVILEGES ON *.* TO 'idss'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'idss'@'%' WITH GRANT OPTION;

注意: 'localhost' 为本地连接的权限, '%' 为所有任何主机连接权限

创建用于分布式恢复的复制用户

连接mysql后,执行

# 如果要禁用二进制日志记录以便在每个实例上分别创建复制用户

SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%' IDENTIFIED BY 'password';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';

FLUSH PRIVILEGES;

# 如果禁用了二进制日志记录,请在创建用户后立即通过发出以下语句再次启用它

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';

配置并启动服务器后,安装组复制插件

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

检查插件安装成功

SHOW PLUGINS;

自选举

首次启动组的过程称为引导。您可以使用 group_replication_bootstrap_group 系统变量来引导组。引导程序只能由一台服务器(启动该组的服务器)执行一次,并且只能执行一次。这就是为什么group_replication_bootstrap_group 选项值 未存储在实例的选项文件中的原因。如果将其保存在选项文件中,则服务器在重新启动时会自动引导另一个具有相同名称的组。这将导致两个不同的组具有相同的名称。相同的理由适用于在此选项设置为的情况下停止和重新启动插件ON。因此,为了安全地引导该组,请连接到s1并发出以下语句:

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

如果您要为START GROUP_REPLICATION语句提供分布式恢复的用户凭据(可以从MySQL 8.0.21开始),则发出以下语句:

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION USER='rpl_user', PASSWORD='password'; 

SET GLOBAL group_replication_bootstrap_group=OFF;

一旦START GROUP_REPLICATION 语句返回,该集团已启动。您可以检查是否已创建该组,并且其中有一个成员:

SELECT * FROM performance_schema.replication_group_members;
将其他实例添加到组中
server_id=13
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "10.10.21.13:33061"
group_replication_group_seeds= "10.10.21.12:33061,10.10.21.13:33061,10.10.21.14:33061"
group_replication_bootstrap_group=off

创建复制组用户

SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%' IDENTIFIED BY 'password'; 

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; 
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';

FLUSH PRIVILEGES; 

SET SQL_LOG_BIN=1;

如果要使用CHANGE MASTER TO语句提供用户凭据 ,请在此之后发出以下语句:

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';

启动组复制,并且s2启动加入组的过程。

START GROUP_REPLICATION;

或者,如果您要为START GROUP_REPLICATION语句提供分布式恢复的用户凭据(可以从MySQL 8.0.21开始):

START GROUP_REPLICATION USER='rpl_user', PASSWORD='password';

不像是同在S1上执行这些前面的步骤,这里有在你的差异 并不需要引导组,因为组已经存在。换句话说,s2 group_replication_bootstrap_group 上的设置为OFF,并且SET GLOBAL group_replication_bootstrap_group=ON;在开始组复制之前不会发出问题 ,因为该组已经由服务器s1创建并引导。此时,仅需要将服务器s2添加到已经存在的组中。

注意:

当组复制成功启动并且服务器加入该组时,它将检查该 super_read_only变量。通过super_read_only 在成员的配置文件中设置为ON,可以确保由于任何原因启动组复制而失败的服务器不接受事务。如果服务器应将该组作为读写实例加入该组,例如作为单主要组的主要实例或多主要组的成员,则在将该 super_read_only变量设置为ON时,将其设置为OFF加入小组。