暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

主从架构在线升级为Innodb Cluster--二 主从架构改造成MGR

得塔江湖 2021-07-30
808

先看背景:

IP主从关系host
10.1.1.45db-1-45
10.1.1.46db-1-46
10.1.1.47db-1-47

上一篇已经把mysql实例全部升级为myql8.0.26了。


一、修改host

三台机器的host全部加上

#vi /etc/hosts
10.20.1.45     db-1-45
10.20.1.46     db-1-46
10.20.1.47     db-1-47
复制

二、配置增强半同步(普通复制改为增强半同步,如果已经是半同步则不用再操作了)

2.1 所有节点(3个实例):

root@localhost [(none)]>set global super_read_only=0;
Query OK, 0 rows affected (0.00 sec)


root@localhost [(none)]>install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.01 sec)


root@localhost [(none)]>install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.02 sec)
复制
  • master节点配置

root@localhost [(none)]>set global rpl_semi_sync_master_enabled=ON;
Query OK, 0 rows affected (0.01 sec)


root@localhost [(none)]>show global variables like '%semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
| rpl_semi_sync_slave_enabled | OFF |
| rpl_semi_sync_slave_trace_level | 32 |
+-------------------------------------------+------------+
8 rows in set (0.00 sec)


#root@localhost [(none)]>reset master;
#Query OK, 0 rows affected (0.04 sec)
复制

slave配置(2个节点)

root@localhost [(none)]>set global rpl_semi_sync_slave_enabled=ON;
Query OK, 0 rows affected (0.00 sec)
复制

检查

root@localhost:mysql_10120.sock [(none)]>show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 2 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
| Rpl_semi_sync_slave_status | OFF |
复制


三、配置MGR

3.1 master配置

root@localhost:mysql_10120.sock [(none)]>install plugin group_replication soname 'group_replication.so';
Query OK, 0 rows affected (0.01 sec)
复制

修正和增加一些参数(persist可以将参数的值持久化到mysqld-auto.cnf文件中):

root@localhost:mysql_10120.sock [(none)]>set persist binlog_checksum=NONE;
Query OK, 0 rows affected (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>set persist transaction_write_set_extraction=XXHASH64;
Query OK, 0 rows affected, 1 warning (0.01 sec)


root@localhost:mysql_10120.sock [(none)]>select uuid();
+--------------------------------------+
| uuid() |
+--------------------------------------+
| 0220ac35-f109-11eb-85ef-3448edf8dd99 |
+--------------------------------------+
1 row in set (0.00 sec)


#设置uuid和group_replication的参数
root@localhost:mysql_10120.sock [(none)]>set persist group_replication_group_name='0220ac35-f109-11eb-85ef-3448edf8dd99';
Query OK, 0 rows affected (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>set persist group_replication_local_address='10.20.1.45:30120';
Query OK, 0 rows affected (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>set persist group_replication_group_seeds='10.20.1.45:30120,10.20.1.46:30120,10.20.1.47:30120';
Query OK, 0 rows affected (0.00 sec)
复制

如果ssl开启就需要

SET persist group_replication_recovery_get_public_key = 1;

复制

开启参数:

root@localhost:mysql_10120.sock [(none)]>set persist group_replication_bootstrap_group=off;
Query OK, 0 rows affected (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>set persist group_replication_start_on_boot=off;
Query OK, 0 rows affected (0.00 sec)


#第一次启动设置,启动后需要关闭
root@localhost:mysql_10120.sock [(none)]>set global group_replication_bootstrap_group=on;
Query OK, 0 rows affected (0.00 sec)
复制

设置完成后,启动group replication

root@localhost:mysql_10120.sock [(none)]>start group_replication;
Query OK, 0 rows affected (2.10 sec)
#可以同步查看实例的日志情况 error
#关闭启动引导和查看开启的情况

root@localhost:mysql_10120.sock [(none)]>set global group_replication_bootstrap_group=off;
Query OK, 0 rows affected (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 60e6c8db-cf21-11eb-b529-3448edf8dd99 | db-23-45 | 10120 | ONLINE | PRIMARY | 8.0.26 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
1 row in set (0.00 sec)
复制

至此Master改造成功


3.2 slave改造

root@localhost:mysql_10120.sock [(none)]>install plugin group_replication soname 'group_replication.so';
Query OK, 0 rows affected (0.02 sec)
root@localhost:mysql_10120.sock [(none)]>set persist binlog_checksum=NONE;
Query OK, 0 rows affected (0.01 sec)


root@localhost:mysql_10120.sock [(none)]>set persist transaction_write_set_extraction=XXHASH64;
Query OK, 0 rows affected, 1 warning (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>
root@localhost:mysql_10120.sock [(none)]>set persist group_replication_group_name='0220ac35-f109-11eb-85ef-3448edf8dd99';
Query OK, 0 rows affected (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>
root@localhost:mysql_10120.sock [(none)]>set persist group_replication_local_address='10.20.146:30120';
Query OK, 0 rows affected (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>set persist group_replication_group_seeds='10.20.1.45:30120,10.20.1.46:30120,10.20.1.47:30120';
Query OK, 0 rows affected (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>set persist group_replication_bootstrap_group=off;
Query OK, 0 rows affected (0.01 sec)


root@localhost:mysql_10120.sock [(none)]>set persist group_replication_start_on_boot=off;
Query OK, 0 rows affected (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>start group_replication;
ERROR 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log.
复制

这里开启时候报错了,可以看看错误日志:

[ERROR] [MY-013117] [Repl] Slave I/O for channel 'group_replication_recovery': Fatal error: Invalid (empty) username when attempting to connect to the master server. Connection attempt terminated. Error_code: MY-013117

2021-07-30T15:58:58.097055+08:00 147328 [ERROR] [MY-011582] [Repl] Plugin group_replication reported: 'There was an error when connecting to the donor server. Please check that group_replication_recovery channel credentials and all MEMBER_HOST column values of performance_schema.replication_group_members table are correct and DNS resolvable.'

关闭原有的复制,重新设置复制模式

root@localhost:mysql_10120.sock [(none)]>stop slave;
Query OK, 0 rows affected, 2 warnings (0.00 sec)


root@localhost:mysql_10120.sock [(none)]>reset slave all;
Query OK, 0 rows affected, 1 warning (0.01 sec)


#设置复制模式
root@localhost:mysql_10120.sock [(none)]>change master to master_user='myrep',master_password='qAhUrjpseZ13C0q' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 5 warnings (0.00 sec)


#再开启
root@localhost:mysql_10120.sock [(none)]>start group_replication;
Query OK, 0 rows affected (3.24 sec)


#验证:
root@localhost:mysql_10120.sock [(none)]>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 60e6c8db-cf21-11eb-b529-3448edf8dd99 | db-23-45 | 10120 | ONLINE | PRIMARY | 8.0.26 |
| group_replication_applier | c0a622ac-cf63-11eb-9456-801844edbae5 | db-23-46 | 10120 | ONLINE | SECONDARY | 8.0.26 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)
复制

查看从库IO线程的连接状态信息

# 多线程和单线程主从复制时表中记录相同,如果是多主复制,则每个复制通道在表中个记录一行信息

root@localhost:mysql_10120.sock [(none)]>select * from  performance_schema.replication_connection_status\G
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_recovery
GROUP_NAME:
SOURCE_UUID:
THREAD_ID: NULL
SERVICE_STATE: OFF
COUNT_RECEIVED_HEARTBEATS: 0
LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000
RECEIVED_TRANSACTION_SET:
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000
LAST_QUEUED_TRANSACTION:
LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000
LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000
QUEUEING_TRANSACTION:
QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000
*************************** 2. row ***************************
CHANNEL_NAME: group_replication_applier
GROUP_NAME: 0220ac35-f109-11eb-85ef-3448edf8dd99
SOURCE_UUID: 0220ac35-f109-11eb-85ef-3448edf8dd99
THREAD_ID: NULL
SERVICE_STATE: ON
COUNT_RECEIVED_HEARTBEATS: 0
LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000
RECEIVED_TRANSACTION_SET: 00a1eca5-7946-11ea-a743-dcf401e6ca11:1-1085258803,
0220ac35-f109-11eb-85ef-3448edf8dd99:1-5,
60e6c8db-cf21-11eb-b529-3448edf8dd99:1
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000
LAST_QUEUED_TRANSACTION: 0220ac35-f109-11eb-85ef-3448edf8dd99:5
LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 2021-07-30 16:05:20.684393
LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 2021-07-30 16:05:20.684393
LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 2021-07-30 16:05:20.684436
LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 2021-07-30 16:05:20.684482
QUEUEING_TRANSACTION:
QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000
2 rows in set (0.02 sec)
复制


slave2也同理操作即可,验证结果如下:

root@localhost:mysql_10120.sock [(none)]>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 34aa11b3-cfce-11eb-9c06-b82a72db584a | db-23-47 | 10120 | ONLINE | SECONDARY | 8.0.26 |
| group_replication_applier | 60e6c8db-cf21-11eb-b529-3448edf8dd99 | db-23-45 | 10120 | ONLINE | PRIMARY | 8.0.26 |
| group_replication_applier | c0a622ac-cf63-11eb-9456-801844edbae5 | db-23-46 | 10120 | ONLINE | SECONDARY | 8.0.26 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)
复制

# 多线程和单线程主从复制时表中记录相同,如果是多主复制,则每个复制通道在表中个记录一行信息




四、节点全部关闭后再启动(冷启动)

需要注意的是,第一个主节点启动时候,仍然需要设置下

set global group_replication_bootstrap_group=on;启动start group_replication;再关闭set global group_replication_bootstrap_group=off;


其它几点启动则不需要,直接启动实例后,进行start group_replication;



参考:https://t.1yb.co/xodU

文章转载自得塔江湖,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论