Linux-MGR单主集群部署

1.MGR 是什么?

它把多个独立的 MySQL 实例,组成了一个能够自动协调、强一致性、高可用的数据库集群。

2.MGR 的两种模式

|------|-------------------------------|-------------|
| 模式 | 特点 | 使用场景 |
| 单主模式 | 同一时间一个主节点可读写,其它为只读备用节点,自动故障转移 | 生产环境首选 |
| 多主模式 | 所有节点均可读写,且自动同步 | 需要多点写入的特定场景 |
[MGR模式]

3.MGR优点

|-----------|--------------|
| 1.强一致性 | 基本无数据丢失风险 |
| 2.高可用与自动化 | 自动故障检测与主节点选举 |
| 3.原生集成 | MySQL 官方插件 |
| 4.拓展灵活 | 动态调整集群规模 |
[MGR优点]

4.MGR使用的约束与要求

|----------|-----------------|
| 1.版本要求 | MySQL 5.7.17+版本 |
| 2.存储引擎 | 必须使用InnoDB |
| 3.网络要求 | 延迟低,稳定 |
| 4.配置要求 | 需启用GTID |
| 5.多主模式限制 | 不支持级联外键 |
[MGR 的约束与要求]

5.实验环境规划

|-------------|-----------------|--------------------|---------|---------|
| 主机名 | IP | 端口 | 系统 | MySQL版本 |
| mysql-node1 | 192.168.189.139 | 3306\33060\33061 | Centos9 | 8.0.44 |
| mysql-node2 | 192.168.189.142 | 3306\33060\33061 | Centos9 | 8.0.44 |
| mysql-node3 | 192.168.189.143 | 3306\33060\33061 | Centos9 | 8.0.44 |
[实验环境准备]

数据库默认端口3306

MySQL X Protoco默认端口33060

MySQL Group Replication组通信端口33061

6.实验前置准备(所有主机都执行)

6.1关闭防火墙

复制代码
systemctl disable --now firewalld

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

6.2本地DNS域名解析-/etc/hosts

复制代码
 vim /etc/hosts

6.3安装MySQL

Linux-安装MySQL-CSDN博客(选择Centos9 MySQL8.0.44)

复制代码
dnf install -y https://repo.mysql.com//mysql84-community-release-el9-2.noarch.rpm

dnf config-manager --disable mysql-8.4-lts-community
dnf config-manager --disable mysql-tools-8.4-lts-community
dnf config-manager --enable mysql80-community
dnf config-manager --enable mysql-tools-community

dnf install -y mysql-community-server
systemctl enable --now mysqld

6.4初始化MySQL

过滤初始密码

复制代码
grep 'password' /var/log/mysqld.log

修改MySQL密码

复制代码
mysqladmin -uroot -p"临时密码" password "新密码"

登录MySQL

复制代码
mysql -uroot -p"新密码"

7.创建第一个实例-mysql-node1

7.1配置参数-/etc/my.cnf(MySQL配置文件)

复制代码
vim /etc/my.cnf

#关闭其他存储引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
#启动GTID
server-id=1
gtid_mode=ON
enforce_gtid_consistency=ON
#配置MGR
plugin_load_add='group_replication.so' #加载MGR插件
group_replication_group_name="71397dad-e092-11f0-bb1f-000c29ba195e" #集群UUID
group_replication_start_on_boot=off #开机不自启
group_replication_local_address= "mysql-node1:33061" #本节点通信地址
group_replication_group_seeds= "mysql-node1:33061,mysql-node2:33061,mysql-node3:33061" #集群成员
group_replication_bootstrap_group=off #不自动引导集群
~                                                                                                          

7.2创建复制用户

7.2.0登录MySQL

复制代码
mysql -uroot -p'Root@123'

7.2.1删除所有binlog日志

复制代码
RESET MASTER;

7.2.2暂时关闭binlog日志

复制代码
SET SQL_LOG_BIN=0;

7.2.3创建配置用户-jack

复制代码
CREATE USER jack@'%' IDENTIFIED WITH mysql_native_password BY 'Jack@123';

7.2.4授予配置用户权限

|--------------------------|--------|
| REPLICATION SLAVE | 主从复制 |
| CONNECTION_ADMIN | 连接管理 |
| BACKUP_ADMIN | 备份管理 |
| GROUP_REPLICATION_STREAM | MGR流控制 |
[权限用途]

复制代码
GRANT REPLICATION SLAVE,CONNECTION_ADMIN,BACKUP_ADMIN,GROUP_REPLICATION_STREAM ON *.* TO jack@'%';

7.2.5刷新权限

复制代码
FLUSH PRIVILEGES;

7.2.6开启binlog日志

复制代码
SET SQL_LOG_BIN=1;

7.3配置用户凭证

当新节点加入集群时,它会通过一个名为'group_replication_recovery'的通道来从现有节点复制数据,以同步到最新状态。这个命令就是为这个恢复通道设置复制源的用户名和密码。(用于新节点加入后同步已有数据)

复制代码
CHANGE REPLICATION SOURCE TO SOURCE_USER='jack',SOURCE_PASSWORD='Jack@123' FOR CHANNEL 'group_replication_recovery';

7.4启动复制组

7.4.1开启创建新集群命令(只在创建MGR新集群时使用一次)

复制代码
SET GLOBAL group_replication_bootstrap_group=ON;

7.4.2使用指定用户启动复制组

启动组复制,并且在启动过程中,使用指定的用户(jack)和密码(Jack@123)来连接集群中的其他节点进行认证,以便进行状态恢复和数据同步

复制代码
START GROUP_REPLICATION USER='jack', PASSWORD='Jack@123';

7.4.3关闭创建新集群命令

复制代码
SET GLOBAL group_replication_bootstrap_group=OFF;

7.4.4查看集群成员状态-performance_schema库下replication_group_members表

复制代码
SELECT * FROM performance_schema.replication_group_members;

7.5测试

7.5.1显示binlog事件

复制代码
SHOW BINLOG EVENTS;

8.添加第二个实例-mysql-node2(只有8.1与8.4与上面不同)

8.1配置参数-/etc/my.cnf(MySQL配置文件)

复制代码
vim /etc/my.cnf

#关闭其他存储引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
#启动GTID
server-id=2
gtid_mode=ON
enforce_gtid_consistency=ON
#配置MRG
plugin_load_add='group_replication.so'
group_replication_group_name="71397dad-e092-11f0-bb1f-000c29ba195e" #集群UUID
group_replication_start_on_boot=off
group_replication_local_address= "mysql-node2:33061" #本节点通信地址
group_replication_group_seeds= "mysql-node1:33061,mysql-node2:33061,mysql-node3:33061"
group_replication_bootstrap_group=off

8.2创建复制用户

8.2.0登录MySQL

复制代码
mysql -uroot -p'Root@123'

8.2.1删除所有binlog日志

复制代码
RESET MASTER;

8.2.2暂时关闭binlog日志

复制代码
SET SQL_LOG_BIN=0;

8.2.3创建配置用户-jack

复制代码
CREATE USER jack@'%' IDENTIFIED WITH mysql_native_password BY 'Jack@123';

8.2.4授予配置用户权限

|--------------------------|--------|
| REPLICATION SLAVE | 主从复制 |
| CONNECTION_ADMIN | 连接管理 |
| BACKUP_ADMIN | 备份管理 |
| GROUP_REPLICATION_STREAM | MGR流控制 |
[权限用途]

复制代码
GRANT REPLICATION SLAVE,CONNECTION_ADMIN,BACKUP_ADMIN,GROUP_REPLICATION_STREAM ON *.* TO jack@'%';

8.2.5刷新权限

复制代码
FLUSH PRIVILEGES;

8.2.6开启binlog日志

复制代码
SET SQL_LOG_BIN=1;

8.3配置用户凭证

当新节点加入集群时,它会通过一个名为'group_replication_recovery'的通道来从现有节点复制数据,以同步到最新状态。这个命令就是为这个恢复通道设置复制源的用户名和密码。(用于新节点加入后同步已有数据)

复制代码
CHANGE REPLICATION SOURCE TO SOURCE_USER='jack',SOURCE_PASSWORD='Jack@123' FOR CHANNEL 'group_replication_recovery';

8.4启动复制组

8.4.1使用指定用户启动复制组

启动组复制,并且在启动过程中,使用指定的用户(jack)和密码(Jack@123)来连接集群中的其他节点进行认证,以便进行状态恢复和数据同步

复制代码
START GROUP_REPLICATION USER='jack', PASSWORD='Jack@123';

8.4.2查看集群成员状态-performance_schema库下replication_group_members表

复制代码
SELECT * FROM performance_schema.replication_group_members;

主机状态需要显示online才算成功

9.添加第三个实例-msyql-node3

9.1配置参数-/etc/my.cnf(MySQL配置文件)

复制代码
vim /etc/my.cnf

#关闭其他存储引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
#启动GTID
server-id=3
gtid_mode=ON
enforce_gtid_consistency=ON
#配置MRG
plugin_load_add='group_replication.so'
group_replication_group_name="71397dad-e092-11f0-bb1f-000c29ba195e" #集群UUID
group_replication_start_on_boot=off
group_replication_local_address= "mysql-node3:33061" #本节点通信地址
group_replication_group_seeds= "mysql-node1:33061,mysql-node2:33061,mysql-node3:33061"
group_replication_bootstrap_group=off

9.2创建复制用户

9.2.0登录MySQL

复制代码
mysql -uroot -p'Root@123'

9.2.1删除所有binlog日志

复制代码
RESET MASTER;

9.2.2暂时关闭binlog日志

复制代码
SET SQL_LOG_BIN=0;

9.2.3创建配置用户-jack

复制代码
CREATE USER jack@'%' IDENTIFIED WITH mysql_native_password BY 'Jack@123';

9.2.4授予配置用户权限

|--------------------------|--------|
| REPLICATION SLAVE | 主从复制 |
| CONNECTION_ADMIN | 连接管理 |
| BACKUP_ADMIN | 备份管理 |
| GROUP_REPLICATION_STREAM | MGR流控制 |
[权限用途]

复制代码
GRANT REPLICATION SLAVE,CONNECTION_ADMIN,BACKUP_ADMIN,GROUP_REPLICATION_STREAM ON *.* TO jack@'%';

9.2.5刷新权限

复制代码
FLUSH PRIVILEGES;

9.2.6开启binlog日志

复制代码
SET SQL_LOG_BIN=1;

9.3配置用户凭证

当新节点加入集群时,它会通过一个名为'group_replication_recovery'的通道来从现有节点复制数据,以同步到最新状态。这个命令就是为这个恢复通道设置复制源的用户名和密码。(用于新节点加入后同步已有数据)

复制代码
CHANGE REPLICATION SOURCE TO SOURCE_USER='jack',SOURCE_PASSWORD='Jack@123' FOR CHANNEL 'group_replication_recovery';

9.4启动复制组

9.4.1使用指定用户启动复制组

启动组复制,并且在启动过程中,使用指定的用户(jack)和密码(Jack@123)来连接集群中的其他节点进行认证,以便进行状态恢复和数据同步

复制代码
START GROUP_REPLICATION USER='jack', PASSWORD='Jack@123';

9.4.2查看集群成员状态-performance_schema库下replication_group_members表

复制代码
SELECT * FROM performance_schema.replication_group_members;

主机状态显示online才算成功

10验证与测试集群

10.1数据同步测试

10.2模拟mysql-node1停机

10.2.1在mysql-node1关闭MySQL服务

复制代码
systemctl stop mysqld

10.2.2在mysql-node2查看集群成员状态

10.2.3使用mysql-node2创建数据库test3后再将mysql-node1加入集群

10.2.3.1使用mysql-node2创建数据库test3
10.2.3.2将mysql-node1加入集群
复制代码
START GROUP_REPLICATION USER='jack', PASSWORD='Jack@123';
相关推荐
YuTaoShao2 小时前
【LeetCode 每日一题】3510. 移除最小数对使数组有序 II
linux·算法·leetcode
黄美美分享2 小时前
Windows自动化设置工具,无需编程让电脑自动工作!定时任务软件!打工人必备软件
运维·windows·自动化·电脑
zhangrelay2 小时前
如何更环保(更省钱)的使用各类电子耗材/消耗品/易损件~电池为例
linux·笔记·学习
独隅2 小时前
本地大模型训练与 API 服务部署全栈方案:基于 Ubuntu 22.04 LTS 的端到端实现指南
服务器·python·语言模型
dustcell.2 小时前
高级课前复习2--RHCSA
linux·运维·服务器
胖少年3 小时前
Ubuntu 24.04 LTS apt autoremove 误删依赖致程序崩溃 解决与预防笔记
linux·笔记·ubuntu
Anthony_2313 小时前
五、交换技术与VLAN
服务器·网络·网络协议·http·https·udp·信息与通信
fanruitian3 小时前
k8s 更新镜像
java·服务器·kubernetes
Controller-Inversion3 小时前
k8s服务部署相关问题
linux·容器·kubernetes