MySQL集群mgr

news/2024/12/28 19:46:32/文章来源:https://www.cnblogs.com/cloudwangsa/p/18637858

MySQL集群mgr

MySQL集群MGR和MHA的区别

MySQL Manager(mysqlmgr)

适用场景:

  • 用于需要高可用性、自动化管理和负载均衡的 MySQL 集群环境。
  • 适合部署基于 Group Replication 的 InnoDB 集群。

MHA (MySQL High Availability)

适用场景:

  • 适用于传统的基于主从复制的 MySQL 环境。
  • 需要自动故障转移且希望降低手动干预的系统。
  • 对于已有的 MySQL 环境,可以用 MHA 实现高可用性,而不需要过多改变现有架构。
特性 MySQL Manager (mysqlmgr) MHA
架构类型 基于 MySQL Group Replication 基于 MySQL 主从复制
自动故障转移 自动故障转移,并自动修复 自动故障转移
高可用性实现 集群内所有节点互为主备,通过 Group Replication 保证高可用 通过选举健康的从节点提升为主节点
配置复杂度 相对简单,内建自动化工具和管理界面 配置复杂,需要手动配置主从复制架构
数据一致性 保证数据一致性,通过 Group Replication 实现 尽量保证一致性,但可能存在短暂的数据丢失
适用场景 MySQL InnoDB 集群环境,自动化管理 传统 MySQL 主从复制环境,高可用需求

MGR的核心特性

1.1 数据一致性与复制

  • 强一致性:MGR 使用一种叫做 分布式协议 的方式来保证集群中的所有节点的数据一致性。所有节点都能保持数据同步,并确保没有数据丢失。
  • 基于 Group Replication:通过 Group Replication,集群中的节点自动同步事务。数据一致性通过 Paxos 协议保证,确保集群中的每个节点都达成一致,避免数据冲突。

1.2 自动故障转移

  • 自动主节点选举:当集群中某个节点出现故障或掉线时,MGR 会自动选择一个新的主节点来接管事务处理。这样即使某个节点出现故障,集群仍然可以正常工作,不会影响服务。
  • 节点恢复:MGR 还能够自动修复节点,只要故障节点重新加入集群,它将与集群中的其他节点自动同步数据。

1.3 事务复制与集群管理

  • 事务性复制:所有数据更改都是事务性的,即使在故障恢复的过程中,也能保证数据不会丢失。
  • 单个事务:集群中的所有节点都能处理相同的事务,不存在主从复制中的延迟问题。

1.4 高可用性和负载均衡

  • 多主复制:所有节点都可以处理读写操作,这样可以实现负载均衡,提高集群的性能。
  • 无缝扩展:随着节点的增加,MGR 可以无缝地扩展数据库集群的规模,而不影响服务的可用性。

MGR的架构

MySQL Group Replication 采用 "组内复制"(Group Replication)的模型,其中包含了多个节点,每个节点都可以是读写节点,集群内的每个节点都有一个完整的数据库副本

Primary Node:集群中的主节点,负责处理写请求。

Secondary Node:集群中的从节点,负责处理读请求。在发生故障转移时,Secondary Node 会被提升为 Primary Node。

Member Node:指的是集群中任意一个节点,它可能是 Primary Node,也可能是 Secondary Node。MGR 集群的核心思想就是通过这些节点来共同保持数据一致性和高可用性。

MGR组复制模式

组复制可以在两种模式下运行:

  • 单主模式下,组复制具有自动选主功能,所有更新操作都在主上进行,其它成员只提供读服务。
  • 多主模式下,所有的Server都可以同时处理更新操作,没有主从之分,成员角色是完全对等的。

MGR使用限制

  • 仅支持InnoDB表,为什么需要使用innodb引擎呢?在MySQL Group Replication中,事务以乐观形式执行,但是在提交时检查冲突,如果存在冲突,则会在某些实例上回滚事务,保持各个实例的数据一致性。
  • 每个需要复制的表都必须定义一个显式主键,用于做write set的冲突检测,即在进行事务冲突检测时需要利用主键值对比。
  • 必须开启binlog且二进制日志格式必须设置为ROW。
  • 必须打开GTID特性,且主从状态信息存于表中(--master-info-repository=TABLE 、--relay-log-info-repository=TABLE),--log-slave-updates打开。
  • 目前一个MGR集群最多支持9个节点。
  • 不支持外键:多主不支持,单主模式不存在此问题。
  • 二进制日志不支持binlog event checksum,需设置--binlog-checksum=none

搭建mgr集群(单主节点)

配置主机间hosts文件

[root@server1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.5.101 server1
192.168.5.102 server2
192.168.5.103 server3
[root@server1 ~]# for i in 1 2 3 ; do  scp /etc/hosts root@192.168.5.10$i:/etc/hosts ;done

修改数据库配置文件

[root@server2 ~]# cat /etc/my.cnf 
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql/data
port=3306
socket=/usr/local/mysql/mysql.sock
symbolic-links=0
character-set-server=utf8
log-error=/data/mysql/log/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid
server_id=2 ------- #每台不一样
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856'
loose-group_replication_start_on_boot=off
loose-group_replication_local_address='server2:33061' ------# 每台不一样
loose-group_replication_group_seeds='server1:33061,server2:33061,server3:33061'
loose-group_replication_bootstrap_group=off
#loose-group_replication_single_primary_mode = off
#loose-group_replication_enforce_update_everywhere_checks = on

主节点数据库配置

mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)mysql>  CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.01 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)mysql> CHANGE master  TO master_user='rpl_user', master_password='password' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.01 sec)mysql> SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%group_replication%';
+-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+---------------+---------------------------+----------------+-------------+
| PLUGIN_NAME       | PLUGIN_VERSION | PLUGIN_STATUS | PLUGIN_TYPE       | PLUGIN_TYPE_VERSION | PLUGIN_LIBRARY       | PLUGIN_LIBRARY_VERSION | PLUGIN_AUTHOR | PLUGIN_DESCRIPTION        | PLUGIN_LICENSE | LOAD_OPTION |
+-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+---------------+---------------------------+----------------+-------------+
| group_replication | 1.0            | ACTIVE        | GROUP REPLICATION | 1.1                 | group_replication.so | 1.7                    | ORACLE        | Group Replication (1.0.0) | GPL            | 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> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.02 sec)mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)SET GLOBAL group_replication_bootstrap_group=ON;
启用该选项,表示当前 MySQL 实例是 Group Replication 集群的引导节点。
通常在 第一个节点启动 Group Replication 时使用。
START GROUP_REPLICATION;:
启动 Group Replication,将当前节点加入到 Group Replication 群组中。
SET GLOBAL group_replication_bootstrap_group=OFF;:
启动成功后,将引导标志设为 OFF,防止后续节点也被误标为集群的引导节点。

从节点数据库配置

mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)mysql>  FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)mysql> CHANGE master TO master_USER='rpl_user', master_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.03 sec)mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (3.04 sec)mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 3fa7b9b6-b6dd-11ef-9364-08000726c0a6 | server2     |        3306 | ONLINE       |
| group_replication_applier | a696cf2e-b6ca-11ef-a1ba-000c29c0da00 | server1     |        3306 | ONLINE       |
| group_replication_applier | e76692bc-c065-11ef-b6ac-08000726c0a7 | server3     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

查看状态

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 3fa7b9b6-b6dd-11ef-9364-08000726c0a6 | server2     |        3306 | ONLINE       |
| group_replication_applier | a696cf2e-b6ca-11ef-a1ba-000c29c0da00 | server1     |        3306 | ONLINE       |
| group_replication_applier | e76692bc-c065-11ef-b6ac-08000726c0a7 | server3     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)#查看主节点
mysql> select b.member_host the_master,a.variable_value master_uuidfrom performance_schema.global_status ajoin performance_schema.replication_group_members bon a.variable_value = b.member_idwhere variable_name='group_replication_primary_member';
+------------+--------------------------------------+
| the_master | master_uuid                          |
+------------+--------------------------------------+
| server1    | a696cf2e-b6ca-11ef-a1ba-000c29c0da00 |
+------------+--------------------------------------+
1 row in set (0.00 sec)

从节点测试写入数据

mysql> insert into student values(2,"zz");
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

搭建mgr集群(多主节点)

多主模式(Multi-Master Mode) 是指多个数据库节点(通常是 MySQL 或兼容数据库)作为主节点运行,它们可以同时处理读写请求,并且支持数据同步。这种模式通常用于提高数据库的 高可用性负载均衡,尤其是在需要高性能和高可用性的场景中,能够有效避免单点故障。

1.修改mysql的配置文件

[root@server1 ~]# cat /etc/my.cnf 
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql/data
port=3306
socket=/usr/local/mysql/mysql.sock
symbolic-links=0
character-set-server=utf8
log-error=/data/mysql/log/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856'
loose-group_replication_start_on_boot=off
loose-group_replication_local_address='server1:33061'
loose-group_replication_group_seeds='server1:33061,server2:33061,server3:33061'
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode = off
loose-group_replication_enforce_update_everywhere_checks = on

核心配置文件

loose-group_replication_single_primary_mode = off
loose-group_replication_enforce_update_everywhere_checks = on
#loose-group_replication_single_primary_mode = off  #指定复制模式,是否启动单主模式,默认值为ON,即单主模式。如果启动,则本实例是主库,提供读写,其他实例仅提供读,如果为off就是多主模式了。#loose-group_replication_enforce_update_everywhere_checks = on  #多主模式下,强制检查每一个实例是否允许该操作,如果不是多主,可以关闭。

重新启动mgr集群

在第一台启动节点上执行

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.02 sec)SET GLOBAL group_replication_bootstrap_group=OFF;:

后续节点执行

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

测试多主节点是否搭建成功

mysql>  select b.member_host the_master,a.variable_value master_uuid->           from performance_schema.global_status a->           join performance_schema.replication_group_members b->           on a.variable_value = b.member_id->           where variable_name='group_replication_primary_member';
Empty set (0.00 sec)
1.查询不到主节点Database changed
mysql> insert into student values(2,"asd") ;
Query OK, 1 row affected (0.00 sec)mysql> select * from student;
+----+------+
| id | name |
+----+------+
|  1 | ax   |
|  2 | asd  |
+----+------+
2 rows in set (0.00 sec)2.server2上可以插入数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860516.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件工程我依然爱你

用一个词总结软工实践课程——Never forget!!!😚😚😚 前言现在是2024年12月27号下午4点,是我考完软件工程课程的四小时,也是我软工实践结束的第27天。我竟莫名对软件工程有点不舍,特别是我们倾注大量心血的项目——福小研,我愿称之为我心里最好的项目之一,或许它…

2024省选联测1

2024省选联测1题目来源: 2024省选联测1 \(T1\) HZTG5808. interval \(40pts\)原题: QOJ 1173. Knowledge Is..考虑按照左端点升序排序后反悔贪心。分别维护已经匹配的区间对和未被匹配的区间,若当前区间 \(a\) 可以和前面剩余的未被匹配的区间匹配则直接匹配;否则尝试找到一…

2024-2025-1 20241407《计算机基础与程序设计》第十四周学习总结

作业信息这个作业属于哪个课程 2024-2025-1计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十四周作业这个作业的目标 学习二进制文件和文本文件,文件的打开和关闭,顺序读写与随机读写,标准输入和输出及其重定向作业正文 本博客教材学习内容总结…

GraphMAE2(解码增强型掩码自监督图学习器)

GraphMAE2: A Decoding-Enhanced Masked Self-Supervised Graph Learner 解码增强型掩码自监督图学习器 背景 ​ 近年来,自监督学习(Self-supervised Learning,SSL)得到了广泛的探索,特别是生成式自监督学习在自然语言处理以及其他人工智能领域已经取得了新兴的成功,像…

PTA第7~8次大作业分析及总结

一、前言 本次Blog为第七~八次大作业的总结。两次大作业主要考察抽象类及继承方面的相关内容,是在第六次大作业基础上的进一步升级,难度大幅提升,由于前面的作业我没有很好地完成,这两次大作业也没有拿到好成绩,这也算是提醒我:在进行一个设计时要提前为后续更加预留空间…

python3网络爬虫开发实战-第2版PDF免费下载

本书介绍了如何利用 Python 3 开发网络爬虫。本书为第 2 版,相比于第 1 版,为每个知识点的实战项目配备了针对性的练习平台,避免了案例过期的问题。另外,主要增加了异步爬虫、JavaScript 逆向、App 逆向、页面智能解析、深度学习识别验证码、Kubernetes 运维及部署等知识点…

Java大作业总结

Java大作业总结 目录Java大作业总结一.前言第七次大作业1.设计与分析2.踩坑心得(一)电阻值处理(二)设备状态更新顺序3.改进建议(一)错误处理与异常机制(二)性能优化(三)代码结构调整第八次大作业1.设计与分析2.踩坑心得3.改进建议期末总结 一.前言 这2次大作业都是前…

题目集 7 - 8 总结性 Blog

一、前言 在本学期的学习旅程中,题目集 7 和题目集 8 犹如两座重要的里程碑,引领我们在编程的道路上不断探索与前行。这两个题目集总计包含了2道题目,它们犹如一把把钥匙,开启了面向对象编程世界的大门,引领我们逐步深入其中,领略其复杂与精妙之处。题目集 7 宛如基石,着…

PHP_network

PHP PHP基础教程 语法PHP 脚本以<? php 开头 ,以?>结尾php语句以 ;结尾,php代码块的关闭标签也会自动标名 ;php支持的三种注释 //单行注释 单行注释 /* 多行注释 */php中,所有用户定义的函数、类和关键词都对大小写不敏感; 但所有变量都对大小写敏感变量 变量规则…

Python读取栅格图像并对像元数据处理后导出到表格文件中

本文介绍基于Python语言中的gdal模块,读取一景.tif格式的栅格遥感影像文件,提取其中每一个像元的像素数值,对像素值加以计算(辐射定标)后,再以一列数据的形式将计算后的各像元像素数据保存在一个.csv格式文件中的方法~本文介绍基于Python语言中的gdal模块,读取一景.tif格…

22207321-王郅坚-第三次BLOG

前言 这两次电器控制系统的开发迭代,涵盖了不同的编程知识点、设计思路与系统逻辑。第一次迭代实现了一个基础的电器控制系统,通过简单的电器类型和基本操作设置,实现了电器状态的管理与切换。这一阶段主要考察基本数据结构的使用、输入输出处理、以及简单的判断与循环逻辑。…