首页 > 数据库 >MySQL-MGR实战指南:打造企业级高可用数据库集群

MySQL-MGR实战指南:打造企业级高可用数据库集群

时间:2024-08-20 17:55:46浏览次数:14  
标签:GPL INFORMATION group 企业级 MGR MySQL ACTIVE NULL SCHEMA

文章目录

前言

在数字化时代,企业的数据安全和业务连续性至关重要。想象一下,当关键业务数据存储在数据库中,而数据库突然出现故障,或者面临硬件故障、网络中断、自然灾害等不可预知的灾难性事件时,企业如何确保数据的完整性和业务的正常运行?这就是为什么构建企业级高可用数据库集群变得至关重要。
MySQL-MGR(MySQL Group Replication)正是解决这一问题的强有力工具。它不仅能够提供数据的一致性和高可用性,还能在故障发生时自动进行故障转移,确保业务的连续性和数据的完整性。
本文将帮助您构建一个高效、可靠的数据库集群,应对各种挑战。

MGR的介绍

MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供,实现了分布式下数据的最终一致性,总结MGR特点如下:
高一致性:基于分布式paxos协议实现组复制.集群是多个MySQL Server节点共同组成的分布式集群,每个Server都有完整的副本,它是基于ROW格式的二进制日志文件和GTID特性,保证数据一致性;
高容错性:自动故障检测机制,只要不是大多数节点都宕机就可以继续工作,内置防脑裂保护机制,在主节点故障时,MGR能够自动选举新的主节点继续处理事务,保持服务的连续性;
高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据,直到与其他节点数据一致;
高灵活性:提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主节点进行,多主模式支持多节点写入。工作中优先使用单主模式。
优点:
基本无延迟,延迟比异步的小很多
支持多写模式,但是目前还不是很成熟
数据的强一致性,可以保证数据事务不丢失

事务处理流程:

事务发起:客户端向任意MGR组内节点提交事务。
事务验证:节点通过内置的事务一致性检查机制(如冲突检测、全局唯一事务ID(GTID)校验等)确保事务符合组复制的要求。
事务传播:通过复制协议模块,节点将待提交的事务以消息的形式广播到组内其他节点。每个节点接收到消息后,将其暂存到本地队列中。
共识达成:借助Paxos协议(或其变体),组内节点对事务的提交顺序进行协商并达成一致。只有当大多数节点(法定数量)同意某个事务的提交顺序时,该事务才能被确认为可执行。
事务执行:各节点按照达成一致的顺序执行事务。即使在网络分区或节点故障的情况下,只要还有足够数量的节点存活且能够相互通信,就能继续进行共识决策和事务执行,保证数据一致性。
状态报告:节点定期或在事件触发时向组内其他节点报告自己的状态,包括事务执行进度、健康状况等,以便其他节点了解整个组的全局状态

实验测试环境:

单主模式,主节点可读写,备节点只可读
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=htt!%5B%E5%9C%A8%E8%BF%99%E9%87%8C%E6%8F%92%E5%85%A5%E5%9B%BE%E7%89%87%E6%8F%8F%E8%BF%B0%5D(https%3A%2F%2Fi-blog.csdnimg.cn%2Fdirect%2F739e2a9498a24bf7b7e99c61cd6fddd5.png&pos_id=img-WMbkb8LP-1724147356825)
ps://img-home.csdnimg.cn/images/20220524100510.png)
1.下载安装mysql9,主节点修改配置文件如下

[mysqld]
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
##MGR配置
server_id=1 #备节点依次为2,3
gtid_mode=ON
enforce_gtid_consistency=ON
plugin_load_add='group_replication.so'
group_replication_group_name="bc946766-0c46-11ef-a8e2-0242ac110002" 
group_replication_start_on_boot=off
group_replication_local_address= "172.20.0.1:33061" #备节点按备节点的ip修改
group_replication_group_seeds= "172.20.0.1:33061,172.20.0.2:33061,172.20.0.3:33061"
group_replication_bootstrap_group=off

2.初始化mysql,启动mysql

创建一个repl用户,并赋予replication slave 权限
在每个节点上执行
    SET SQL_LOG_BIN=0;
    CREATE USER IF NOT EXISTS 'repl'@'%' IDENTIFIED BY '$PASSWORD';
    GRANT REPLICATION SLAVE, CONNECTION_ADMIN, BACKUP_ADMIN ON *.* TO 'repl'@'%';
    GRANT GROUP_REPLICATION_STREAM ON *.* TO 'repl'@'%';
    FLUSH PRIVILEGES;
    SET SQL_LOG_BIN=1;   
    CHANGE REPLICATION SOURCE TO SOURCE_USER='repl',
    SOURCE_PASSWORD='$PASSWORD' FOR CHANNEL 'group_replication_recovery';

3.在3个节点安装MGR模块组件

root@opseye:[(none)]> install plugin group_replication soname 'group_replication.so';
Query OK, 0 rows affected (0.02 sec)
root@opseye:[(none)]> show plugins;

+----------------------------------+----------+--------------------+----------------------+---------+
| Name                             | Status   | Type               | Library              | License |
+----------------------------------+----------+--------------------+----------------------+---------+
| binlog                           | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| sha256_password                  | ACTIVE   | AUTHENTICATION     | NULL                 | GPL     |
| caching_sha2_password            | ACTIVE   | AUTHENTICATION     | NULL                 | GPL     |
| sha2_cache_cleaner               | ACTIVE   | AUDIT              | NULL                 | GPL     |
| daemon_keyring_proxy_plugin      | ACTIVE   | DAEMON             | 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     |
| ndbcluster                       | DISABLED | STORAGE ENGINE     | NULL                 | GPL     |
| ndbinfo                          | DISABLED | STORAGE ENGINE     | NULL                 | GPL     |
| ndb_transid_mysql_connection_map | DISABLED | INFORMATION SCHEMA | 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     |
+----------------------------------+----------+--------------------+----------------------+---------+
set persist group_replication_single_primary_mode=on; ##多主模式设置off,单主模式设置为on
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
SET GLOBAL group_replication_bootstrap_group=ON;
start group_replication;
SET GLOBAL group_replication_bootstrap_group=OFF;

4.备节点执行如下命令

CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
set persist group_replication_single_primary_mode=on;
START GROUP_REPLICATION;

5.在主节点查看MGR加入情况

[root@opseye scripts]# mysql -uroot -p"PASSWORD" -e "
      SELECT * FROM performance_schema.replication_group_members;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST  | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | e346e7e5-5a24-11ef-9764-0242ac14000b | ba660f83ad88 |        3306 | ONLINE       | PRIMARY     | 9.0.1          | XCom                       |
| group_replication_applier | e38f497b-5a24-11ef-977a-0242ac14000c | 26061266b3c6 |        3306 | ONLINE       | SECONDARY   | 9.0.1          | XCom                       |
| group_replication_applier | e3be9da0-5a24-11ef-96ff-0242ac14000d | f5c6138f30f3 |        3306 | ONLINE       | SECONDARY   | 9.0.1          | XCom                       |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+

6.可自行测试主节点的数据同步和主机点损坏切换。

模拟主节点挂掉,查看集群情况。
[root@opseye scripts]#  mysql -uroot -p"123456" -e "
      SELECT * FROM performance_schema.replication_group_members;
    "
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST  | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | e38f497b-5a24-11ef-977a-0242ac14000c | 26061266b3c6 |        3306 | ONLINE       | PRIMARY     | 9.0.1          | XCom                       |
| group_replication_applier | e3be9da0-5a24-11ef-96ff-0242ac14000d | f5c6138f30f3 |        3306 | ONLINE       | SECONDARY   | 9.0.1          | XCom                       |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+

结束语

在构建和维护数据库集群的过程中,无论是配置、监控、故障恢复,还是性能优化,都需要专业的知识和经验。为了帮助您在这一旅程中更加顺利,我们诚挚推荐专业的IT监控运维服务。
江苏立维成立于2015年,核心团队来自一线互联网企业,有着十多年丰富的运维管理经验,专注于企业业务故障的发现和管理,是国内早批专注于企业业务安全稳定运行服务保障的公司。

点击链接进入我们的官网,了解更多详情:https://www.live400.com/

标签:GPL,INFORMATION,group,企业级,MGR,MySQL,ACTIVE,NULL,SCHEMA
From: https://blog.csdn.net/OpsEye/article/details/141363715

相关文章

  • 企业级Scrum敏捷赋能课程:为企业量身定制的敏捷开发培训,旨在提升团队协作与项目交付能
    ​​课程简介:Scrum是一种广泛应用的敏捷开发方法,用于项目管理和产品研发。该课程为期两天,专为研发管理者、项目经理、产品经理和研发团队设计。通过案例讲解和沙盘演练,学员将深入理解Scrum的核心理念,如产品价值驱动、以用户为中心、快速迭代和增量交付,掌握自管理团队的构建及......
  • Linux(CentOS7)安装MySQL8全过程
    下载官方地址:https://dev.mysql.com/downloads/mysql/选择版本前需先看一下服务器的glibc版本ldd--version  上传将下载好的tar包上传到服务器上,这里演示上传到了/usr/local/文件夹下 解压tar -Jxvfmysql-8.0.36-linux-glibc2.17-x86_64.tar.xz ......
  • mysql错误-The server quit without updating PID file
    说明:尽量不要用root用户安装和启动mysql问题示例原因:一般是root用户执行导致,如果MySQL是root以外用户安装的,则用安装的用户执行不会出差固执:这里就是要用root执行。[root@hadoop01mysql]#servicemysqlstartStartingMySQL.Loggingto'/opt/mysql/data/hadoop01.err'.......
  • 【原创】java+swing+mysql网吧管理系统设计与实现
    个人主页:程序员杨工个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战文末有本人名片,希望和大家一起共同努力,一起进步,顶峰相见。开发背景:随着互联网技术的飞速发展和普及,网络已成为人......
  • MySQL主从同步如何保证数据一致性?
    MySQL主从同步是MySQL集群方案中的一种,也是实现难度最低的一种。然而,现在的面试都不问MySQL主从同步原理了,而是开始问主从同步怎么保证数据一致性问题了。所以,今天就给大家安排上了。1.什么是数据一致性?数据一致性是指在一个系统中,数据在不同的部分、不同的时间点,以及不......
  • mysql - 根据某经纬度 从区域列表内筛选符合条件的区域. 地图经纬度 坐标筛选
    作者原创.转载请注明来源我有一个区域列表.每个区域都有一堆经纬度坐标集合它们组成一个不规则图形.然后我有个经纬度坐标想筛选出这个坐标属于那个区域.mysql适合做这样的筛选吗?//创建区域坐标表CREATETABLEregions( idINTAUTO_INCREMENTPRIMARYKEY,......
  • 如何删除数据库下的所有表(mysql)
    要在MySQL中删除数据库下的所有表,你有两个主要选项:一个是删除整个数据库然后重新创建它,另一个是查询所有表的名称并逐一删除它们。下面是这两种方法的步骤:方法1:删除并重新创建数据库这种方法是最简单和最快的,但请注意,它会删除整个数据库,包括其中的所有表、视图、存储过程等。......
  • mysql.user表的数据准确性问题
    mysql.user这个系统表中有些字段的数据是不准确的(或者说是不一定准确,这样表达更严谨一点)。这是一个让人头疼的问题,下面简单述说一下问题,主要是mysql.user表中的password_lifetime,password_reuse_history,password_reuse_time这几个字段的数据都不一定准确。下面简单演示一下,当......
  • 在Python中使用MySQL:保姆级指南
    Python是一种广泛使用的高级编程语言,因其简洁易读以及强大的库支持而受到开发者的青睐。当需要在Python程序中处理数据库时,MySQL是一个流行的选择。MySQL是一个开源的关系数据库管理系统,广泛用于Web应用程序的开发。目录第一步:安装MySQL数据库第二步:安装MySQLConnector第......
  • Centos 7.9系统 源码安装MySQL5.7版本
    mysql5.7安装详细一、MySQL5.7源码安装部署1.1安装环境准备相关依赖包的作用:cmake:由于从MySQL5.5版本开始弃用了常规的configure编译方法,所以需要CMake编译器,用于设置mysql的编译参数,如:安装目录、数据存放目录、字符编码、排序规则等。boost库:从MySQL5.7.5开......