openEuler学习——部署MGR集群

本文介绍如何利用GreatSQL 8.0.25构建一个三节点的MGR集群。

1.安装准备

IP端口角色
192.168.20.1103306mgr1
192.168.20.1113306mgr2
192.168.20.1123306mgr3

配置hosts解析

[root@MGR1 ~]# cat >> /etc/hosts << EOF
> 192.168.20.110 MGR1
> 192.168.20.111 MGR2
> 192.168.20.112 MGR3
> EOF

安装MySQL8

[root@MGR1 ~]# yum install mysql-server -y
[root@MGR2 ~]# yum install mysql-server -y
[root@MGR3 ~]# yum install mysql-server -y

2.启动MySQL服务 

首先修改 /etc/my.cnf.d/mysql-server.cnf 配置文件,增加:

#/etc/my.cnf*.d/mysql-server.cnf
[mysqld]
...
#开启GTID,必须开启
gtid_mode = ON
#强制GTID的一致性
enforce_gtid_consistency = ON
#binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用
binlog_format = row
#server-id必须是唯一的
server-id = 1
#MGR使用乐观锁,所以官网建议隔离级别是RC,减少锁粒度
transaction_isolation = READ-COMMITTED
#因为集群会在故障恢复时互相检查binlog的数据,
#所以需要记录下集群内其他服务器发过来已经执行过的binlog,按GTID来区分是否执行过.
log-slave-updates = 1
#binlog校验规则,5.6之后的高版本是CRC32,低版本都是NONE,但是MGR要求使用NONE
binlog_checksum = NONE
#基于安全的考虑,MGR集群要求复制模式要改成slave记录记录到表中,不然就报错
master_info_repository = TABLE
#同上配套
relay_log_info_repository = TABLE
#组复制设置#记录事务的算法,官网建议设置该参数使用 XXHASH64 算法
transaction_write_set_extraction = XXHASH64
#相当于此GROUP的名字,是UUID值,不能和集群内其他GTID值的UUID混用,可用uuidgen来生成一个新的,
#主要是用来区分整个内网里边的各个不同的GROUP,而且也是这个group内的GTID值的UUID
loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'
#IP地址白名单,默认只添加127.0.0.1,不会允许来自外部主机的连接,按需安全设置
loose-group_replication_ip_whitelist = '127.0.0.1/8,192.168.6.0/24'
#是否随服务器启动而自动启动组复制,不建议直接启动,怕故障恢复时有扰乱数据准确性的特殊情况
loose-group_replication_start_on_boot = OFF
#本地MGR的IP地址和端口,host:port,是MGR的端口,不是数据库的端口
loose-group_replication_local_address = '192.168.6.151:33081'
#需要接受本MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口
loose-group_replication_group_seeds = '192.168.6.151:33081,192.168.6.152:33081,192.168.6.153:33081'
#开启引导模式,添加组成员,用于第一次搭建MGR或重建MGR的时候使用,只需要在集群内的其中一台开启,
loose-group_replication_bootstrap_group = OFF
#是否启动单主模式,如果启动,则本实例是主库,提供读写,其他实例仅提供读,如果为off就是多主模式了
loose-group_replication_single_primary_mode = ON
#多主模式下,强制检查每一个实例是否允许该操作,如果不是多主,可以关闭  
loose-group_replication_enforce_update_everywhere_checks = on  #单主模式不需要

启动服务 

 systemctl restart mysqld

3.安装插件

利用这份配置文件,重启MySQL Server,之后就应该能看到已经成功加载 group_replicaiton 插件了:

[root@MGR1 ~]# mysql -e "show plugins;" | grep "group_replication"

如果输入没有输出结果,也可以手动添加

[root@MGR1 ~]# mysql -e "install plugin group_replication soname 'group_replication.so'"
[root@MGR1 ~]# mysql -e "show plugins;" | grep "group_replication"
group_replication	ACTIVE	GROUP REPLICATION	group_replication.so	GPL
#这样就有了

注意:每个模拟机都需要,也就是要配置三次

4.配置账号

接下来,创建MGR服务专用账户,并准备配置MGR服务通道:

注意:每个节点都要单独创建用户,因此这个操作没必要记录binlog并复制到其他节点

mysql> set session sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)

mysql> create user repl@'%' identified with mysql_native_password by 'repl';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT BACKUP_ADMIN, REPLICATION SLAVE ON *.* TO `repl`@`%`;
Query OK, 0 rows affected (0.00 sec)

 #配置MGR服务通道
#通道名字 group_replication_recovery 是固定的,不能修改

mysql> set session sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 5 warnings (0.03 sec)

5.启动MGR单主模式

在MGR1主节点输入:

SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;
SELECT * FROM performance_schema.replication_group_members;

 在mgr2\mgr3节点,进入mysql服务端:

START GROUP_REPLICATION;
SELECT * FROM performance_schema.replication_group_members;

再次查看MGR主节点状态:

看到上面这个集群共有3个节点处于ONLINE状态,其中 192.168.20.110PRIMARY 节点,其余两个都是 SECONDARY 节点,也就是说当前这个集群采用 单主 模式。如果采用多主模式,则所有节点的角色都是 PRIMARY。  

6. 向MGR集群中写入数据

在MGR1中创建一个表生成一个随机数

mysql> use mgr;
Database changed
mysql> create table t1(c1 int unsigned not null primary key);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t1 select rand()*10240;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------+
| c1   |
+------+
| 3506 |
+------+
1 row in set (0.00 sec)

 再连接到其中一个 SECONDARY 节点,查看刚刚在 PRIMARY 写入的数据是否可以看到:

MGR2:

mysql> select * from mgr.t1;
+------+
| c1   |
+------+
| 3506 |
+------+
1 row in set (0.00 sec)

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| MGR2       |
+------------+
1 row in set (0.00 sec)

MGR3:

mysql> select * from mgr.t1;
+------+
| c1   |
+------+
| 3506 |
+------+
1 row in set (0.00 sec)

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| MGR3       |
+------------+
1 row in set (0.00 sec)

确认可以读取到该数据。

到这里,就完成了三节点MGR集群的安装部署。

5. MGR管理维护

介绍MGR集群的日常管理维护操作:包括主节点切换单主&多主模式切换等。

 现在有个三节点的MGR集群:

1. 切换主节点

当主节点需要进行维护时,或者执行滚动升级时,就可以对其进行切换,将主节点切换到其他节点。

在命令行模式下,可以使用 group_replication_set_as_primary() 这个udf实现切换,例如:

注意:MEMBER_ID唯一,注意替换需要切换的主节点

mysql> select group_replication_set_as_primary('6a0bb115-db9c-11ee-b5da-000c2959975e');
+--------------------------------------------------------------------------+
| group_replication_set_as_primary('6a0bb115-db9c-11ee-b5da-000c2959975e') |
+--------------------------------------------------------------------------+
| Primary server switched to: 6a0bb115-db9c-11ee-b5da-000c2959975e         |
+--------------------------------------------------------------------------+
1 row in set (0.01 sec)

顺便提一下,在MySQL 5.7版本中,只能通过重启以实现主节点的自动切换,不能手动切换。从这个角度来说,如果想要使用MGR,最好是选择MySQL 8.0版本,而不要使用5.7版本。  

2. 切换单主/多主模式

在命令行模式下,可以调用 group_replication_switch_to_single_primary_mode()group_replication_switch_to_multi_primary_mode() 来切换单主/多主模式。

mysql> select group_replication_switch_to_multi_primary_mode();
+--------------------------------------------------+
| group_replication_switch_to_multi_primary_mode() |
+--------------------------------------------------+
| Mode switched to multi-primary successfully.     |
+--------------------------------------------------+
1 row in set (0.01 sec)

 切换成单主模式时可以指定某个节点的 server_uuid,如果不指定则会根据规则自动选择一个新的主节点

mysql> select group_replication_switch_to_single_primary_mode('6b6045a3-db9c-11ee-acfc-000c29f05133');
+-----------------------------------------------------------------------------------------+
| group_replication_switch_to_single_primary_mode('6b6045a3-db9c-11ee-acfc-000c29f05133') |
+-----------------------------------------------------------------------------------------+
| Mode switched to single-primary successfully.                                           |
+-----------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

 注意,在已经是单主模式时,无论group_replication_switch_to_single_primary_mode() 还是 switchToSinglePrimaryMode() 函数中指定另一个节点时是不会发生切换的,但也不会报错,只有提示。

3. 添加新节点

首先,要先完成MySQL Server初始化,创建好MGR专用账户、设置好MGR服务通道等前置工作。

接下来,直接执行命令 start group_replication 启动MGR服务即可,新增的节点会进入分布式恢复这个步骤,它会从已有节点中自动选择一个作为捐献者(donor),并自行决定是直接读取binlog进行恢复,还是利用Clone进行全量恢复。

如果是已经在线运行一段时间的MGR集群,有一定存量数据,这时候新节点加入可能会比较慢,建议手动利用Clone进行一次全量复制。还记得前面创建MGR专用账户时,给加上了 BACKUP_ADMIN 授权吗,这时候就排上用场了,Clone需要用到这个权限。

IP端口角色
192.168.20.1123306MGR4

 

接下来我们演示如何向MGR集群中添加一个新节点。

首先,要先完成MySQL Server初始化,创建好MGR专用账户、设置好MGR服务通道等前置工作。

接下来,直接执行命令 start group_replication 启动MGR服务即可,新增的节点会进入分布式恢复这个步骤,它会从已有节点中自动选择一个作为捐献者(donor),并自行决定是直接读取binlog进行恢复,还是利用Clone进行全量恢复。

 

4. 删除节点

在命令行模式下,一个节点想退出MGR集群,直接执行 stop group_replication 即可,如果这个节点只是临时退出集群,后面还想加回集群,则执行 start group_replication 即可自动再加入。而如果是想彻底退出集群,则停止MGR服务后,执行 reset master; reset slave all; 重置所有复制(包含MGR)相关的信息就可以了。

5. 重启MGR集群

正常情况下,MGR集群中的Primary节点退出时,剩下的节点会自动选出新的Primary节点。当最后一个节点也退出时,相当于整个MGR集群都关闭了。这时候任何一个节点启动MGR服务后,都不会自动成为Primary节点,需要在启动MGR服务前,先设置 group_replication_bootstrap_group=ON,使其成为引导节点,再启动MGR服务,它才会成为Primary节点,后续启动的其他节点也才能正常加入集群。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt QtCreator打开pro项目时出现假死现象

在Windows系统下&#xff0c;QtCreator打开pro项目时出现假死现象&#xff0c;左侧项目树形图无法展开&#xff0c;项目根节点一直在转圈。尝试关掉所有QtCreator进程&#xff0c;重新打开pro也是无济于事。 解决方案&#xff1a; 打开“运行”窗口&#xff08;快捷键&#x…

overleaf latex 笔记

overleaf: www.overleaf.com 导入.tex文件 1.代码空一行&#xff0c;代表文字另起一段 2. 1 2 3 排序 \begin{enumerate} \item \item \item \end{enumerate} 3.插入图片 上传图片并命名 \usepackage{float}导包\begin{figure}[H]&#xff1a;表示将图…

鸿蒙开发报错解决方案: cannot be smaller than version 10 declared in library [:library]

由于报错信息不详&#xff0c;即使给hvigor.js 提供--stacktrace 级别的日志也无法定位具体模块。 解决方案&#xff1a;修改编译源码js。 1、定位具体js&#xff1a;我的定位是&#xff1a;/Users/xdg/.hvigor/project_caches/489b334bc29a5a8428674c766cdae532/workspace…

智能边缘计算网关实现工业自动化与数据处理的融合-天拓四方

随着物联网&#xff08;IoT&#xff09;技术的迅速发展和普及&#xff0c;越来越多的设备被连接到互联网上&#xff0c;产生了海量的数据。如何有效地处理和分析这些数据&#xff0c;同时确保数据的安全性和实时性&#xff0c;成为了摆在企业面前的一大挑战。智能边缘计算网关作…

图像处理与视觉感知---期末复习重点(1)

文章目录 一、概述二、图像处理基础2.1 视觉感知要素2.2 像素间的一些基本关系2.2.1 相邻像素2.2.2 连通性2.2.3 距离度量 2.3 基本坐标变换2.4 空间变换与灰度值 一、概述 1. 图像的概念及分类。  图像是用各种观测系统以不同形式和手段观测客观世界而获得的、可以直接或间接…

百度AI已经实现盈利,普通人如何通过AI短视频直播拿到结果?

从百度最新的财报数据来看&#xff0c;百度AI为广告业务、智能云业务带来了增长动力。除了直接带来商业收入&#xff0c;AI还为百度带来了新增长。2023年&#xff0c;百度用户总数、用户时长及用户粘性、付费率等都有所增加。数据显示&#xff0c;2023年12月&#xff0c;百度Ap…

刚刚,OpenAI官方发文驳斥马斯克,自曝8年间邮件往来截图

文章开篇表示&#xff1a;「OpenAI 的使命是确保 AGI 惠及全人类&#xff0c;这意味着既要构建安全、有益的 AGI&#xff0c;又要帮助创造广泛的利益。我们正在分享我们在实现使命方面所学到的知识&#xff0c;以及有关我们与马斯克关系的一些事实。我们打算驳回马斯克的所有主…

Spring事务管理与模板对象

1.事务管理 1.事务回顾 事务指数据库中多个操作合并在一起形成的操作序列 事务的作用 当数据库操作序列中个别操作失败时&#xff0c;提供一种方式使数据库状态恢复到正常状态&#xff08;A&#xff09;&#xff0c;保障数据库即使在异常状态下仍能保持数据一致性&#xff…

Netty权威指南——基础篇5 IO基础 备份

1 什么是I/O 在UNIX世界里一切皆是文件&#xff0c;而文件是什么&#xff1f;文件就是一串二进制流而已&#xff0c;其实不管是Socket&#xff0c;还是FIFO&#xff08;先进先出队列&#xff09;、管道、终端。对计算机来说&#xff0c;一切都是文件&#xff0c;一切都是流。在…

JSP实现数据传递与保存

1.HTML页面转换JSP页面 直接再HTML页面最顶端添加page指令&#xff0c;修改文件后缀名&#xff1b;反之&#xff1b; 2.JSP内置对象 对象 描述 request 每当客户端请求JSP页面时&#xff0c;JSP引擎会制造一个新的request对象来代表这个请求。 response 当服务器创建req…

内存溢出(OOM)-汇总指南

目录 java.lang.OutOfMemoryError:Java heap space 原因分析 示例 解决方案 java.lang.OutOfMemoryError:GC overhead limit exceeded 原因分析 示例 解决方案 java.lang.OutOfMemoryError:Permgen space 原因分析 示例 解决方案 java.lang.OutOfMemoryError:Metas…

Learn C the hard way :一些简单问题处理

Preface&#xff1a;本次学习主要是以复习态度而来&#xff0c;意在加强C语言的理解&#xff0c;本文主要针对于网站中出现的一些问题 我的简单Makefile&#xff1a; CFLAGS-Wall cc gcc cflag -Wall -g allfiles ex1.c ex2.c ex3.c ex4.c ex5.c ex4-1.c objs $(allfiles:.c…

Claude 3击败GPT-4,地表最强AI易主,坐等翻车

北京时间3月4日晚22点00分&#xff0c;Claude 3发布了&#xff0c;一举超越了GPT-4&#xff01; 震惊&#xff0c;居然有人能超越霸主地位&#xff0c;赶紧进官网详细的看一下&#xff1a; https://www.anthropic.com/news/claude-3-family 刷到第一的成绩单 Claude3 Opus的…

MyBatis操作数据库(SQL注入)

本文主要来讲解6大标签&#xff0c;以便更好的MyBatis操作数据库&#xff01; <if>标签<trim>标签<where>标签<set>标签<foreach>标签<include>标签 前提需求&#xff1a; MyBatis是一个持久层框架&#xff0c;和Spring没有任何关系&…

java VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

Nodejs 第五十章(lua的基本使用)

lua基本使用 全局变量局部变量 全局变量是在全局作用域中定义的变量&#xff0c;可以在脚本的任何地方访问。全局变量在定义时不需要使用关键字&#xff0c;直接赋值即可。 xiaoman xmzsprint(xiaoman)局部变量是在特定作用域内定义的变量&#xff0c;只能在其所属的作用域…

腾讯云4核8G12M轻量服务器优惠价格446元一年,646元15个月

腾讯云4核8G12M轻量服务器优惠价格446元一年&#xff0c;646元15个月&#xff0c;180GB SSD云硬盘&#xff0c;2000GB月流量。 一张表看懂腾讯云服务器租用优惠价格表&#xff0c;一目了然&#xff0c;腾讯云服务器分为轻量应用服务器和云服务器CVM&#xff0c;CPU内存配置从2核…

【笔记】Android ServiceStateTracker 网络状态变化逻辑及SPN更新影响

业务简介 在网络状态变化的时候&#xff08;数据或WiFi&#xff09;&#xff0c;会更新SPN。 基于Android U的代码分析。 分类&#xff1a;SPN Data_Dic-的博客-CSDN博客 功能逻辑 状态说明 飞行模式下注册上WFC的话&#xff0c;注册状态MD上报 regState: NOT_REG_MT_NOT…

SpringBoot 自定义映射规则resultMap collection一对多

介绍 collection是封装一对多关系的&#xff0c;通常情况下是一个列表&#xff0c;association是一对一&#xff0c;通常情况是一个对象。例如&#xff1a;查询班级下所有的学生&#xff0c;一个班级可以有多个学生&#xff0c;这就是一对多。 案例 有一个学生表&#xff0c…

NineData云原生智能数据管理平台新功能发布|2024年2月版

SQL开发&#xff1a;全功能支持百度云 GaiaDB 介绍&#xff1a;支持通过 SQL 开发所有能力管理 GaiaDB 实例。更多信息&#xff0c;请参见&#xff1a;真香&#xff01;NineData SQL 开发全面适配 GaiaDB 场景&#xff1a;企业使用 GaiaDB 管理企业数据&#xff0c;需要一个一…