MySQL 8.0 MGR组复制集群搭建

1.MySQL各式同步方式说明

  • 异步复制:主库binlog落盘之后,即返回给客户端,事务已提交。
  • 全同步复制:所有从库均已接收到主库的binlog信息,并均已日志应用,才会返回客户端事务已提交,存在一定的性能问题,当主库长事务影响尤甚
  • 半同步复制:主库下游有一个从库接收到主库binlog,并写到relay-log,则可返回客户端事务已提交。如果从库出现异常,主库日志信息无法推送成功,超时时间由rpl_semi_sync_master_timeout参数控制,则会转为异步同步复制
  • MGR组复制:个人理解单主模式类似于mongodb的复制集架构,在2N+1个节点组成的单主模式组复制集群中,主库上一个事务提交时,会将事务修改记录相关的信息和事务产生的BINLOG事件打包生成一个写集(WRITE SET),将写集发送给所有节点,并通过至少N个节点投票通过才能事务提交成功。

2.MySQL MGR搭建前提要求

  1. inndb存储引擎;
  2. 每个表需要定义显式主键;
  3. 隔离级别:官网建议READ COMMITTED级别,不支持SERIALIZABLE隔离级别;
  4. 不建议使用级联外键;
  5. IPv4网络;
  6. auto_increment_increment和auto_increment_offset的配置;
  7. log-bin = ROW;
  8. log_slave_updates = ON;
  9. 开启GTID;
    10.安装引擎:group_replication.so;

3.搭建步骤

1.基础信息

IPportserver_uuid初始角色主机名
10.210.99.313308c2a0ff71-f2fd-11ea-b1e2-0050569700fdprimaryliupc1
10.210.99.3233086a5d656e-f30f-11ea-a1aa-00505697a7f6secondaryliupc2
10.210.99.333308bc8beb98-0067-11eb-a483-005056978a23secondaryliupc3

2.配置文件相关参数信息

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name=“05153196-c2ab-43ae-b355-b9832eacf0b2”
loose-group_replication_start_on_boot=off
loose-group_replication_local_address=“10.210.99.31:3306”
loose-group_replication_group_seeds=“10.210.99.31:3306,10.210.99.32:3306,10.210.99.33:3306”
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=FALSE
loose-group_replication_enforce_update_everywhere_checks= TRUE

注意点配置文件中MGR的端口(3306)需要设置成与数据库端口(3308)不一样

3.创建复制账号并安装插件(所有节点)

mysql> CREATE USER 'dbsync'@'%' IDENTIFIED WITH 'mysql_native_password' by 'XXXX';
mysql> GRANT REPLICATION SLAVE ON *.* TO `dbsync`@`%`;
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> show plugins;
+---------------------------------+----------+--------------------+----------------------+---------+
| Name                            | Status   | Type               | Library              | License |
+---------------------------------+----------+--------------------+----------------------+---------+
| binlog                          | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| mysql_native_password           | ACTIVE   | AUTHENTICATION     | NULL                 | GPL     |
| sha256_password                 | ACTIVE   | AUTHENTICATION     | NULL                 | GPL     |
| caching_sha2_password           | ACTIVE   | AUTHENTICATION     | NULL                 | GPL     |
| sha2_cache_cleaner              | ACTIVE   | AUDIT              | NULL                 | GPL     |
| CSV                             | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| MEMORY                          | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| InnoDB                          | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| INNODB_TRX                      | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_CMP                      | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_CMP_RESET                | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_CMPMEM                   | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_CMPMEM_RESET             | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_CMP_PER_INDEX            | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_CMP_PER_INDEX_RESET      | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_BUFFER_PAGE              | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_BUFFER_PAGE_LRU          | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_BUFFER_POOL_STATS        | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_TEMP_TABLE_INFO          | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_METRICS                  | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_FT_DEFAULT_STOPWORD      | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_FT_DELETED               | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_FT_BEING_DELETED         | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_FT_CONFIG                | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_FT_INDEX_CACHE           | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_FT_INDEX_TABLE           | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_TABLES                   | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_TABLESTATS               | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_INDEXES                  | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_TABLESPACES              | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_COLUMNS                  | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_VIRTUAL                  | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_CACHED_INDEXES           | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| INNODB_SESSION_TEMP_TABLESPACES | ACTIVE   | INFORMATION SCHEMA | NULL                 | GPL     |
| MyISAM                          | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| MRG_MYISAM                      | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| PERFORMANCE_SCHEMA              | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| TempTable                       | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| ARCHIVE                         | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| BLACKHOLE                       | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| FEDERATED                       | DISABLED | STORAGE ENGINE     | NULL                 | GPL     |
| ngram                           | ACTIVE   | FTPARSER           | NULL                 | GPL     |
| mysqlx_cache_cleaner            | ACTIVE   | AUDIT              | NULL                 | GPL     |
| mysqlx                          | ACTIVE   | DAEMON             | NULL                 | GPL     |
| group_replication               | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL     |
+---------------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)


4.单主模式

  1. 步骤一(执行节点:10.210.99.31)
mysql> set global group_replication_enforce_update_everywhere_checks=OFF;
Query OK, 0 rows affected (0.00 sec)

mysql> set global group_replication_single_primary_mode=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'group_replication_single_primary_mode';
+---------------------------------------+-------+
| Variable_name                         | Value |
+---------------------------------------+-------+
| group_replication_single_primary_mode | ON    |
+---------------------------------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%boot%';
+-----------------------------------+-------+
| Variable_name                     | Value |
+-----------------------------------+-------+
| group_replication_bootstrap_group | ON    |
| group_replication_start_on_boot   | OFF   |
+-----------------------------------+-------+
2 rows in set (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='dbsync', MASTER_PASSWORD='XXXXXX' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start group_replication;
Query OK, 0 rows affected (2.14 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | c2a0ff71-f2fd-11ea-b1e2-0050569700fd | liupc1      |        3308 | ONLINE       | PRIMARY     | 8.0.21         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
1 row in set (0.00 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)

命令汇总
1.set global group_replication_enforce_update_everywhere_checks=OFF;
2.set global group_replication_single_primary_mode=ON; ###设置该参数的前提是需要将第一步的参数group_replication_enforce_update_everywhere_checks设置为OFF,不然会set失败。
3.show variables like ‘group_replication_single_primary_mode’;
4.SET GLOBAL group_replication_bootstrap_group=ON;
5.show variables like ‘%boot%’;
6.CHANGE MASTER TO MASTER_USER=‘dbsync’, MASTER_PASSWORD=‘XXXXXX’ FOR CHANNEL ‘group_replication_recovery’;
7.start group_replication;
8.select * from performance_schema.replication_group_members;
9.SET GLOBAL group_replication_bootstrap_group=OFF;

  1. 步骤二(执行节点:10.210.99.32/33)
mysql> set global group_replication_enforce_update_everywhere_checks=OFF;
Query OK, 0 rows affected (0.00 sec)

mysql> set global group_replication_single_primary_mode=ON;
Query OK, 0 rows affected (0.00 sec)


mysql> CHANGE MASTER TO MASTER_USER='dbsync', MASTER_PASSWORD='Bnqc@2020' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start group_replication;
Query OK, 0 rows affected (3.17 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 6a5d656e-f30f-11ea-a1aa-00505697a7f6 | liupc2      |        3308 | ONLINE       | SECONDARY   | 8.0.21         |
| group_replication_applier | c2a0ff71-f2fd-11ea-b1e2-0050569700fd | liupc1      |        3308 | ONLINE       | PRIMARY     | 8.0.21         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)

####另外一个节点同时执行以上操作,可以通过读写模式验证主从角色情况,最终检测结果如下:
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 6a5d656e-f30f-11ea-a1aa-00505697a7f6 | liupc2      |        3308 | ONLINE       | SECONDARY   | 8.0.21         |
| group_replication_applier | bc8beb98-0067-11eb-a483-005056978a23 | liupc3      |        3308 | ONLINE       | SECONDARY   | 8.0.21         |
| group_replication_applier | c2a0ff71-f2fd-11ea-b1e2-0050569700fd | liupc1      |        3308 | ONLINE       | PRIMARY     | 8.0.21         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)

mysql> show variables like 'read_only';
#10.210.99.31:OFF
#10.210.99.32:ON
#10.210.99.33:ON

5.切换为多主模式

  1. 步骤一:停MGR(所有节点)
mysql> stop group_replication;
Query OK, 0 rows affected (4.35 sec)

  1. 步骤二:(所有节点)
mysql> set global group_replication_single_primary_mode=OFF;

mysql> set global group_replication_enforce_update_everywhere_checks=ON;

  1. 步骤三:(任意节点,暂选10.210.99.31)
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.10 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> 
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | c2a0ff71-f2fd-11ea-b1e2-0050569700fd | liupc1      |        3308 | ONLINE       | PRIMARY     | 8.0.21         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
1 row in set (0.00 sec)

  1. 步骤四:(剩余节点:10.210.99.32/33)
###节点二:10.210.99.32
mysql> start group_replication;
Query OK, 0 rows affected (3.25 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 6a5d656e-f30f-11ea-a1aa-00505697a7f6 | liupc2      |        3308 | ONLINE       | PRIMARY     | 8.0.21         |
| group_replication_applier | c2a0ff71-f2fd-11ea-b1e2-0050569700fd | liupc1      |        3308 | ONLINE       | PRIMARY     | 8.0.21         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)

#####节点3:10.210.99.33
mysql> start group_replication;
Query OK, 0 rows affected (3.08 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 6a5d656e-f30f-11ea-a1aa-00505697a7f6 | liupc2      |        3308 | ONLINE       | PRIMARY     | 8.0.21         |
| group_replication_applier | bc8beb98-0067-11eb-a483-005056978a23 | liupc3      |        3308 | ONLINE       | PRIMARY     | 8.0.21         |
| group_replication_applier | c2a0ff71-f2fd-11ea-b1e2-0050569700fd | liupc1      |        3308 | ONLINE       | PRIMARY     | 8.0.21         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)



过程所遇到的坑:

1.无法加入复制组:
报错信息如下:
2020-09-28T10:38:24.442060+08:00 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: ‘[GCS] The member was unable to join the group. Loc
al port: 3308’
2020-09-28T10:38:29.494219+08:00 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: ‘[GCS] Unable to bind to INADDR_ANY:3308 (socket=84
, errno=98)!’
2020-09-28T10:38:29.494286+08:00 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: ‘[GCS] Unable to announce tcp port 3308. Port alrea
dy in use?’
2020-09-28T10:38:29.494361+08:00 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: ‘[GCS] Error joining the group while waiting for th
e network layer to become ready.’
2020-09-28T10:38:29.541921+08:00 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: ‘[GCS] The member was unable to join the group. Loc
al port: 3308’
问题:MGR的监听端口不是MySQL服务端口,端口需要调整。

2.启动MGR时,除了第一个执行的节点外,其他节点不需要执行:SET GLOBAL group_replication_bootstrap_group=ON;直接启动start group_replication即可。

3.万一单主的情况下执行了SET GLOBAL group_replication_bootstrap_group=ON,start group_replication会发现该节点是单独的一个primary,需要stop group_replication之后再CHANGE MASTER TO MASTER_USER=‘dbsync’, MASTER_PASSWORD=‘XXXXXXX’ FOR CHANNEL ‘group_replication_recovery’;最后start group_replication;
处理过程:
stop group_replication;
SET GLOBAL group_replication_bootstrap_group=OFF;
CHANGE MASTER TO MASTER_USER=‘dbsync’, MASTER_PASSWORD=‘XXXXXXX’ FOR CHANNEL ‘group_replication_recovery’;
start group_replication;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值