技术博客 技术博客
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • mysql

    • MySQL 问题汇总
    • MySQL 索引介绍
    • MySQL 锁介绍
    • MySQL 索引优化工具 explain
    • MySQL 主从复制(GTID)
    • MySQL 8安装
    • MySQL 8.x新特性总结
    • MySQL UDF以及新类型JSON
    • MySQL 高可用MGR(一) 理论
    • MySQL 高可用MGR(二) 搭建
      • 数据库环境
      • 所有节点配置HOST
      • 修改My.cnf配置文件
      • 端口防火墙
      • 登录mysql并配置
      • 启动MGR单主模式
      • 主主复制
        • 101主启动设置
        • 102主启动设置
        • 查询状态
    • MySQL 高可用MGR(三) 测试
  • Elasticsearch

    • ES 7.8.0(一) 入门介绍
    • ES 7.8.0(二) 读、写和写索引流程以及文档分析过程
    • ES 7.8.0(三) 文档冲突
  • mongodb

    • mongodb
  • hadoop

    • Hadoop 伪分布式及集群
    • Hadoop 指令
    • Hadoop 读写流程详解
    • Hadoop SpringBoot集成
    • Hadoop MapReduce机制
    • Hadoop YARN
    • Hadoop MapReduce配置和编写job及数据倾斜的解决
    • Hadoop MapReduce自定义格式输入输出
  • clickhouse

    • ClickHouse 介绍及安装
    • ClickHouse 数据类型
    • ClickHouse 表引擎
    • ClickHouse SQL操作
    • ClickHouse 副本配置
    • ClickHouse 分片与集群部署
    • ClickHouse Explain及建表优化
    • ClickHouse 语法优化规则
    • ClickHouse 查询优化
    • ClickHouse 数据一致性
    • ClickHouse 物化视图
    • ClickHouse MaterializeMySQL引擎
    • ClickHouse 监控及备份
  • hbase

    • Hbase 介绍及安装
    • Hbase 优化
    • Hbase phoenix安装及使用
    • Hbase LSM-TREE
  • hive

    • Hive 介绍及安装
    • Hive 内外部表、分区表、分桶表概念及hiveSQL命令
    • Hive 数据类型
    • Hive 函数 MySQL联合
    • Hive 数据倾斜和优化
    • Hive Sqoop安装及指令
  • flink

    • Flink 介绍及安装
    • Flink 配置介绍及Demo
    • Flink API讲解
    • Flink 运行架构
    • Flink 时间语义及Watermark
    • Flink 状态管理
    • Flink 容错,检查点,保存点
    • Flink 状态一致性
    • Flink Table API 和 Flink SQL
    • Flink CEP编程
    • Flink Joining编程
    • Flink CDC
  • flume

    • Flume 日志收集系统介绍及安装
    • Flume Source支持的类型
    • Flume Sink支持的类型
    • Flume Channel支持的类型
    • Flume Selector
    • Flume Interceptor拦截器类型
    • Flume Process
  • sqlite

    • SQLite介绍
目录

MySQL 高可用MGR(二) 搭建

关于 MySQL 的安装和初始化这里就说了,可以借鉴 mysql8 安装 (opens new window),官网教程 (opens new window)。这里只阐述 MGR 的配置,高可用使用的是 keepalived,安装可查阅我这篇博客。 (opens new window)

# 数据库环境

官方说至少三个 mysql 实例,但我测试两个也可以。

ip 节点名称 server-id UUID
10.240.30.101 node101 101 7dc79cb4-e0a3-4561-955c-fe374dc59a16
10.240.30.102 node102 102 7dc79cb4-e0a3-4561-955c-fe374dc59a16
10.240.30.103 node103 103 7dc79cb4-e0a3-4561-955c-fe374dc59a16

节点名称可以使用:hostname 命令查看,可以再 /etc/hostname 里改,然后重启
server-id:可以随便设置但要唯一
UUID:这个 ID 必须一致

重要提示: 主机名不可以相同

# 所有节点配置 HOST

vim /etc/hosts
1

加入如下:

10.240.30.101 node101
10.240.30.102 node102 
10.240.30.103 node103
1
2
3

# 修改 My.cnf 配置文件

在 101 节点,/etc/my.cnf 修改

[mysqld]


#######################################################################  组复制基础要求  #########################################################
# 禁用引擎引擎,mgr只允许使用innodb,为了防止错误提前设置
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
# 开启GTID,必须开启
gtid_mode=ON
# 强制GTID的一致性
enforce_gtid_consistency=ON
# server-id必须是唯一的
server-id = 102
# 加密方式
default_authentication_plugin=mysql_native_password

########################################################################  binlog 配置  #######################################################

# binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用row
binlog_format=row
# binlog校验规则,5.6之后的高版本是CRC32(包括8.0.20),低版本都是NONE,但是MGR要求使用NONE
binlog_checksum=NONE
log_bin=binlog
# 因为集群会在故障恢复时互相检查binlog的数据,
## 所以需要记录下集群内其他服务器发过来已经执行过的binlog,按GTID来区分是否执行过.默认关闭。
## 如果从下还有从,建议打开。
log-slave-updates=1
# 基于安全的考虑,MGR集群要求复制模式要改成slave记录到表中,不然就报错
master_info_repository=TABLE
# 同上配套
relay_log_info_repository=TABLE
# 记录事务的算法,官网建议设置该参数使用 XXHASH64 算法
transaction_write_set_extraction = XXHASH64
# MGR使用乐观锁,所以官网建议隔离级别是RC,减少锁粒度
# transaction_isolation=READ-COMMITTED

#######################################################################   组复制设置   ########################################################

# 将组复制插件添加到服务器在启动时加载的插件列表中。在生产部署中,这比手动安装插件更好
plugin_load_add='group_replication.so'
# 告诉插件将其加入或创建的组命名为“ aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaaaa”
# 必须是有效的UUID。在二进制日志中为组复制事件设置GTID时在内部使用此UUID。您可以SELECT UUID()用来生成UUID
group_replication_group_name='7dc79cb4-e0a3-4561-955c-fe374dc59a16'
# 变量以off指示插件在服务器启动时不自动启动操作。这在设置组复制时很重要,因为它可确保您可以在手动启动插件之前配置服务器。
## 配置成员后,您可以设置 group_replication_start_on_boot 为,on以便在服务器启动时自动启动组复制
group_replication_start_on_boot=off
#本地MGR的IP地址和端口,host:port,是MGR的端口,不是数据库的端口
group_replication_local_address='node101:33081'
#需要接受本MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口
group_replication_group_seeds='node101:33081,node102:33081,node103:33081'
#开启引导模式,添加组成员,用于第一次搭建MGR或重建MGR的时候使用,只需要在集群内的其中一台开启,
group_replication_bootstrap_group=OFF


# IP地址白名单,默认只添加127.0.0.1,不会允许来自外部主机的连接,按需安全设置
#group_replication_ip_whitelist = '127.0.0.1/8,10.240.30.100,10.240.30.102,192.168.200.89'
# 是否启动单主模式,如果启动,则本实例是主库,提供读写,其他实例仅提供读,如果为off就是多主模式了
#group_replication_single_primary_mode=off
# 多主模式下,强制检查每一个实例是否允许该操作,如果单主,可以关闭
#group_replication_enforce_update_everywhere_checks=off
# 兼容加入组
#group_replication_allow_local_disjoint_gtids_join=ON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

其他节点只需要修改 server-id 、group_replication_local_address 的值。

重要提示: group_replication_group_name 一样会报错,所以要修改 member_id。可以在主和从里用如下语句查到 member_id 是一样的:
SELECT * FROM performance_schema.replication_group_members
只需要修改 datadir 下的 auto.cnf 文件里的 uuid。把各 uuid 改成不一样就可以正常加入组,并正常的复制。

# 端口防火墙

所有节点允许此端口进行访问

/sbin/iptables -I INPUT -p tcp --dport 33081 -j ACCEPT
1
setenforce 0
1

# 登录 mysql 并配置

登录成功之后,安装插件,如果配置使声明如下

plugin_load_add='group_replication.so'
1

则可以跳过 install 步骤。

mysql> install PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.08 sec)
1
2

查看所有插件,并查找我们的插件是否正确安装。

mysql> show plugins;
+---------------------------------+----------+--------------------+----------------------+---------+
| Name                            | Status   | Type               | Library              | License |
+---------------------------------+----------+--------------------+----------------------+---------+
| group_replication               | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL     |
+---------------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)

1
2
3
4
5
6
7
8

配置账号,每个节点都要进行配置。

# 关闭binlog,使得创建用户不记录到binlog中
SET SQL_LOG_BIN=0;
# 创建复制用户
CREATE USER repl@'%' IDENTIFIED BY 'repl';
# 授权
GRANT REPLICATION SLAVE ON *.* TO repl@'%';
GRANT BACKUP_ADMIN ON *.* TO repl@'%';
# 更新
FLUSH PRIVILEGES;
# 开启binlog
SET SQL_LOG_BIN=1;
# 授权 使用 group_replication_recovery 复制通道的给定凭证。
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
1
2
3
4
5
6
7
8
9
10
11
12
13

# 启动 MGR 单主模式

主操作

mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
1
2
3

从操作
清除可能不必要的一些日志

mysql> RESET MASTER;
1
mysql> START GROUP_REPLICATION;
1

查询状态

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 | 751841e9-143d-11eb-8e6a-000c29a85d54 | node102     |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
| group_replication_applier | 751841e9-143d-11eb-8e6a-000c29a85d55 | node101     |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)

1
2
3
4
5
6
7
8
9

set global read_only=0,在关闭从得时候所有操作都是 只读的,使用该语句可以关闭只读。所有从库只能做为只读库存在。

如果说出现了密码问题,可以使用如下步骤操作,该方式是在当初没有指定密码插件的时候,而已经生成的复制用户。
# 关闭日志
SET SQL_LOG_BIN=0;
# 关闭只读模式
SET GLOBAL READ_ONLY=0;
# 指定修改密码的加密方式并修改
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl';
# 更新
FLUSH PRIVILEGES;
# 开启日志
SET SQL_LOG_BIN=1;

# 主主复制

先停止主和从,先停从后停主

mysql> stop GROUP_REPLICATION;
Query OK, 0 rows affected (4.36 sec)
1
2

# 101 主启动设置

设置单主模式参数为 off

mysql> set GLOBAL group_replication_single_primary_mode=off;
Query OK, 0 rows affected (0.00 sec)
1
2

该参数设置为 ON,则禁用了在多主模式下一些可能产生未知数据冲突的操作

mysql> set GLOBAL group_replication_enforce_update_everywhere_checks=ON;
Query OK, 0 rows affected (0.00 sec)
1
2

设置为第一个准备启动 MGR(bootstrap)的节点

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

启动复制

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.37 sec)
1
2

为了防止后续由于意外再启动另外一个复制组,关闭 bootstrap 参数

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

# 102 主启动设置

mysql> set GLOBAL group_replication_single_primary_mode=off;
Query OK, 0 rows affected (0.00 sec)
1
2
mysql> set GLOBAL group_replication_enforce_update_everywhere_checks=ON;
Query OK, 0 rows affected (0.00 sec)
1
2
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (3.55 sec)
1
2

# 查询状态

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 | 751841e9-143d-11eb-8e6a-000c29a85d54 | node102     |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
| group_replication_applier | 751841e9-143d-11eb-8e6a-000c29a85d55 | node101     |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)
1
2
3
4
5
6
7
8

102 如果重启,需要再次使用 sql 语句,加入到组。
关于 mysql 高可用看下一篇文章

上次更新: 8/28/2025, 10:05:36 AM
MySQL 高可用MGR(一) 理论
MySQL 高可用MGR(三) 测试

← MySQL 高可用MGR(一) 理论 MySQL 高可用MGR(三) 测试→

Theme by Vdoing | Copyright © 2023-2025
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式