Docker之MySQL_GROUP_REPLICATION组复制(MGR)、宕机节点恢复和Spirngboot整合

news2024/12/26 21:04:11

三台服务器修改hosts文件

vim /etc/hosts

追加内容

192.168.1.11   node1
192.168.1.12   node2
192.168.1.13   node3

修改hostname

vim /etc/hostname

重启网络使配置文件生效

systemctl restart network

三台服务器拉取MySQL镜像

docker pull mysql:8.0.23

创建配置文件夹

mkdir -p /docker_data/mysql/conf/
vim /docker_data/mysql/conf/my.cnf

内容如下

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password

三台服务器开放3306和33061端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=33061/tcp --permanent
firewall-cmd --reload

三台服务器启动MySQL容器

必须使用连通宿主机ip的网络

docker run -d --network=host --name mysql --privileged=true --restart=always -v /docker_data/mysql/data:/var/lib/mysql -v /docker_data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql-8.0.23 mysql:8.0.23

启动以后进入mysql容器,安装插件

docker exec -it mysql-8.0.23 bash
#容器执行:mysql -uroot -p
#输入mysql密码
#安装插件
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
#退出mysql容器,回到宿主机,修改配置文件

修改配置文件

vim /docker_data/mysql/conf/my.cnf

追加内容
三台服务器除了server_id和group_replication_local_address不同其它全部相同

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
port=3306
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password

#MGR
#其他存储引擎,包括临时MEMORY存储引擎,可能会导致组复制中出现错误。
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
#服务唯一ID
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE

log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
#添加MGR插件(如果是docker则在容器里安装后再写入以下配置,否则启动会报错,因为你没有安装插件)
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=OFF
#根据当前服务器的别名配置,如:你当前服务器是node2那就改成node2,然后server_id改成2或者其它不重复的,node1~3都是自定义的
group_replication_local_address= "node1:33061"
group_replication_group_seeds= "node1:33061,node2:33061,node3:33061"
group_replication_bootstrap_group=OFF

保存配置文件,重启mysql容器

docker restart mysql-8.0.23

三台服务器执行SQL

#先禁用二进制日志
SET SQL_LOG_BIN=0;
CREATE USER copy@'%' IDENTIFIED BY 'copy';
GRANT REPLICATION SLAVE ON *.* TO copy@'%';
GRANT CONNECTION_ADMIN ON *.* TO copy@'%';
GRANT BACKUP_ADMIN ON *.* TO copy@'%';
#GRANT GROUP_REPLICATION_STREAM ON *.* TO copy@'%';
FLUSH PRIVILEGES;
#重新启用二进制日志
SET SQL_LOG_BIN=1;
#启动单主模式主从复制
CHANGE MASTER TO MASTER_USER='copy', MASTER_PASSWORD='copy' FOR CHANNEL 'group_replication_recovery';

主库执行SQL

我的是node1

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
#查看组复制情况
SELECT * FROM performance_schema.replication_group_members;

成功则查询出如下所示内容:

+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | ec4f4975-7480-11ed-a4eb-000c29993f4c | node1       |        3306 | ONLINE       | PRIMARY     | 8.0.23         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

从库执行SQL

即node1和2

START GROUP_REPLICATION;
# 从库查看MGR组信息
SELECT * FROM performance_schema.replication_group_members;

3096错误:启动GROUP_REPLICATION命令失败,因为有初始化组通信层时出错。

  1. 修改hosts文件,然后使hosts文件生效
  2. docker启动时没有使用宿主机的网络–network=host --name mysql

主节点宕机,MGR自动选主测试

手动停止主节点node1,模拟宕机

docker stop mysql-8.0.23

任一从节点执行SQL,发现从节点node2变成了主节点(PRIMARY)

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 | c40efe0e-7480-11ed-aeda-00505629a57a | node2       |        3306 | ONLINE       | PRIMARY     | 8.0.23         |
| group_replication_applier | ce0f8f45-7480-11ed-b616-0050562dbd10 | node3       |        3306 | ONLINE       | SECONDARY   | 8.0.23         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

重启node1节点,加入组

docker start mysql-8.0.23

node1执行SQL

#重启后必须执行START GROUP_REPLICATION;重新加入组,否则节点不会自动加入组
START GROUP_REPLICATION;
#任一节点执行查询节点信息SQL
SELECT * FROM performance_schema.replication_group_members;

node1变成从节点

+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | c40efe0e-7480-11ed-aeda-00505629a57a | node2       |        3306 | ONLINE       | PRIMARY     | 8.0.23         |
| group_replication_applier | ce0f8f45-7480-11ed-b616-0050562dbd10 | node3       |        3306 | ONLINE       | SECONDARY   | 8.0.23         |
| group_replication_applier | ec4f4975-7480-11ed-a4eb-000c29993f4c | node1       |        3306 | ONLINE       | SECONDARY   | 8.0.23         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

常见问题

组中 MySQL 服务器的最大数量是多少?

一个组最多可以包含 9 台服务器。正在尝试添加 具有 9 个成员的组的另一个服务器导致请求 加入被拒绝。此限制已从测试中确定 并将基准测试作为小组执行的安全边界 在稳定的局域网上可靠运行。

如何和springboot整合?

可以通过Apache ShardingSphere-JDBC实现高可用。
《Shardingsphere官网》
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDF文档转TXT怎么转?你不知道的几种方法

PDF文档转TXT怎么转?我们经常需要处理PDF文件,根据不同的要求,我们经常需要将PDF文件进行转换,虽然PDF文件相对于其他大多数文件来说体积已经很小了,但是TXT文件会比PDF文件体积更小一些,这样我们不仅可以节…

Python工程师Java之路(w)数据库连接池Druid

概述 初阶数据库访问的步骤是【创建连接>执行SQL>关闭连接】,有如下不足: 1、创建数据库连接会浪费时间 2、大量访问时,频繁 GC 会导致CPU负载过高 3、如果改为不关闭连接,则会长期占用内存对此,引入“缓冲池”…

物联网各类数据如何轻松获取?秘诀就在定制文件推送服务

当前,数字经济已成为我国经济发展的重要驱动力。随着物联网的蓬勃发展,海量数据伴随着终端联网在各行各业涌现,越来越多的企业已然察觉隐藏在数字中的金矿,加入到数字化转型行列中,通过数据挖掘实现精细化运营&#xf…

高蛋白过敏我们该如何缓解?教你几招远离过敏吃喝无忌

许多朋友回应说,吃海鲜.牛肉、羊肉等高蛋白食物会发生过敏反应,要么脸红肿,要么长痘痘。看着他们贪婪的食物,他们只能避免吃真的很痛苦。为什么现在人们的生活条件越来越好,生活环境也显著改善,但过敏性疾病…

USB插座外壳接地的处理和emi,esd考虑

外壳是否接地,从理想电路环境(没有干扰,也不释放干扰)和电路原理来说,接和不接没有任何差异,也不会影响正常功能。 但是实际的电子产品的工作环境,是一个处于被各种干扰包围的复杂的电磁场环境&…

[附源码]JAVA毕业设计人才库构建研究(系统+LW)

[附源码]JAVA毕业设计人才库构建研究(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&a…

使用icacls命令设置目录及其子目录、文件的所有权限

以前一直使用cacls命令来设置权限,前两天输入这个命令的时候,却发现了一行提示: “注意: 不推荐使用 Cacls,请使用 Icacls。” 如图: 于是研究了一下 Icacls 这个命令。。 先放上微软官方文档: https:/…

单场直播销售额破7亿,11月的抖音带货风向是什么?

双11走过14年,今年的双11有些特别。我们发现,各个平台在交易额战报的发布上都变得更加保守,而无论是天猫还是京东,均首次未公布具体的交易额。在消费市场出现波动的当下,双11正在经历转变,从重视成交额&…

基于遗传算法的二进制图像重建(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 💥1 概述 图像分辨率是评价图像成像系统的---项重要技术指标.图像分辨率又分为图像的空间分辨率、灰度分辨率和频谱分辨率等.在实际应用中,受到各种因素的限制,通过现有条件要达到所需…

JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK9特性讲解】

JDK各个版本特性讲解-JDK9特性 lecture:波哥 一、JDK版本特性 JAVA8 及之前,版本都是特性驱动的版本更新,就是有重大的特性产生,然后进行更新 JAVA9开始,JDK开始以时间为驱动进行更新,以半年为周期,到时即更新,三年出一个长期支持版,其他都是短暂的版本 目前的长期支…

非常好用的C# .Net开源高性能跨平台内网穿透工具FastTunnel 香橙派orangepi

特别适合在家里做个web或者文件服务器之类,还可以用在树莓派,香橙派搭建个服务器,很好用 FastTunnel是什么? FastTunnel是一款高性能跨平台内网穿透工具,使用它可以实现将内网服务暴露到公网供自己或任何人访问。与其…

【linux】进程的概念与控制

目录 冯诺依曼体系结构 操作系统(Operator System) 进程 基本概念 组织进程 查看进程 进程状态 僵尸进程危害 环境变量 程序地址空间 挂起 进程创建 写时拷贝 进程终止 _exit函数 exit函数 参数: 冯诺依曼体系结构 我们常见的计算机,如…

分享10大自动化测试框架,你用过几个?

软件行业正迈向自主、快速、高效的未来。为了跟上这个高速前进的生态系统的步伐,必须加快应用程序的交付时间,但不能以牺牲质量为代价。快速实现质量是必要的,因此质量保证得到了很多关注。为了满足卓越的质量和更快的上市时间的需求&#xf…

Java基于JSP实验室预约管理系统

科技水平一直是体现一个国家强弱的重要标志,而科技的一点诞生地是实验室,如果能够更好的对实验室进行管理是很多实验室管理人员一直研究的一个问题。只有更加科学和合理化的利用实验室才能够更好的让科技水平有所提高和发展。 本项目利用软件工…

毕设项目 - SSM考研信息查询管理系统(含源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 系统开发流程3.2.2 操作流程3.3 系统结构设计4 项目获取1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品…

MAX3072EESA+T RS-485/RS-422半双工收发器

MAX3072EESAT 3.3V15kV具有ESD保护、失效保护、热插拔、RS-485/RS-422收发器具备一个驱动器和一个接收器。包含失效保护电路,当接收器输入开路或短路时保证接收器输出逻辑高。当端接总线上的所有发送器被禁止(高阻抗)时,接收器输出逻辑高。MAX3072EESAT具…

springboot基于Java的电影院售票与管理系统毕业设计源码011449

电影院售票与管理系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对电影院售…

自动驾驶:2022 apollo day 观后感(二)

自动驾驶:2022 apollo day 观后感(二)TOPIC TWO:自动驾驶地图:Apollo的实践和思考(黄际洲)地图需求升级自动驾驶规划方向轻成本,重体验轻成本重体验安全:舒适度出行效率新…

终于有人把Java面试高分Guide总结得如此系统,堪称傻瓜式笔记总结

纵观今年的技术招聘市场, Java依旧是当仁不让的霸主 !即便遭受 Go等新兴语言不断冲击,依旧岿然不动。究其原因: Java有着极其成熟的生态,这个不用我多说;Java在 运维、可观测性、可监 控性方面都有着非常优…

LeetCode简单题之温度转换

题目 给你一个四舍五入到两位小数的非负浮点数 celsius 来表示温度,以 摄氏度(Celsius)为单位。 你需要将摄氏度转换为 开氏度(Kelvin)和 华氏度(Fahrenheit),并以数组 ans [kelv…