【云原生】Mysql 集群技术

news2024/9/25 11:16:43

PS:MySQL的源码编译进行实验环境操作

1、MySQL安装及初始化

(1)生成启动脚本

(2) 修改环境变量

(3)生成配置文件

(4)数据库初始化建立mysql基本数据

(5)数据库安全初始化

(5)测试

2、组从复制

以下是配置mastesr(作者在 mysql-node1 上)

(1)编辑配置文件并重启数据库

(2)进入数据库配置用户权限

注意:做完这些配置不能将数据库退出,否则master的状态会变化。

以下是配置slave(作者在 mysql-node2 上)

(1)编辑配置文件并重启数据库

(2)进入数据库配置用户权限

(3)查看从服务是否配置成功

在主从服务器上的配置已经配置好了,现在进行测试:

(1)在 mysql-node1 上建立库表并添加数据

(2)在 mysql-node2 上进行查看数据是否能查看到

3、当有数据时添加slave2

注意:此时我们需要配置第二台 slave,第二台主机的环境要进行编译与初始化。(环境进行源码编译和此文第一个实验即可

主机名IP地址
mysql-node3172.25.254.30

(1)修改 mysql-node3 的配置文件并重启

(2)从 master 节点备份数据

(3)复制给 slave2

(4)利用 master 节点中备份出来的 moon.sql 在 slave2 中拉平数据

(5)配置 slave2 的 slave 功能

在 mysql-node1 上查看 master 状态:

进行 mysql-node3 的配置:

(6)测试

先在 mysql-node1 上写入:

再在是mysql-node3 上查看:

小知识点:

  • 写入大于读取 => 主多从少
  • 读取大于写入 => 主少从多

4、延迟复制

注意:此实验只用到 mysql-node1 和 mysql-node3

(1)查看 slave 状态

在这个命令下我们可以发现延迟效果参数为0:

(2)配置延迟效果

找到延迟效果参数,发现参数已经变化:

(3)测试

在 mysql-node1 上删除 user1 这条数据:

1分钟之内在 mysql-node3 上查看,此时发现 user1 这条数据还在:

一分钟之后在 mysql-node3 上查看,此时发现 user1 这条数据已经没有了:

5、慢查询日志

  • 慢查询,顾名思义,执行很慢的查询;
  • 当执行SQL超过long_query_time参数设定的时间阈值(默认10s)时,就被认为是慢查询,这个SQL语句就是需要优化的;
  • 慢查询被记录在慢查询日志里;
  • 慢查询日志默认是不开启的;
  • 如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。

注意:此实验在 matser 上进行,这样我们的 slave 上也会拥有

(1)查看慢查询状态

(2)开启慢查询日志

(3)测试

6、并行复制

注意:在 mysql-node2 上做此实验,因为我们刚刚在 mysql-node3 上做了延迟复制,所以在 mysql-node3 上做此实验无意义。

查看slave中的线程信息:

默认情况下slave中使用的是sql单线程回放,在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重。

开启MySQL的多线程回放可以解决上述问题

(1)修改配置文件并重启

(2)查看slave中的线程信息

7、gtid日志模式

(1)设置 gtid 并重启

在 mysql-node1 上:

在 mysql-node2 上:

在 mysql-node3 上:

(2)停止 slave 端

在 mysql-node2 和 mysql-node3 上:

(3)开启 slave 端的 gtid

(4)查看 mster 状态

发现 master 和 slave 的gtid是一致的!

8、半同步模式

在 master 端上(mysql-node1):

(1)配置启用半同步模式

(2)安装同步插件

(3)查看插件情况

(4)打开半同步功能

(5)查看半同步功能状态

在 slave 端上(mysql-node2 和 mysql-node3):
注意:mysql-node2 和 mysql-node3 在 mysql 上的步骤相同,配置文件有所不同点,作者将其在以下内容中标明解释。

(1)修改配置文件

  • 注释只读模块后要重启
  • 添加半同步模块不能重启,会报错

(2)进入 mysql 配置

(3)测试

在 master 端写入数据:

模拟故障:

停止从服务器上的复制 I/O 线程(mysql-node2 和 mysql-node3)

在master端插入数据

9、实现mysql组复制

注意:在做这个实验前一定要记得给三台主机(mysql-node1、mysql-node2和mysql-node1)做本地解析。

在 mysql-node1 上:

(1)关闭MySQL

(2)删除原先数据库数据

(3)修改配置文件

(4)初始化数据库’

(5)配置sql

(6)复制给 mysql-node2 和 mysql-node3

在 mysql-node2 和 mysql-node3 上:(操作相同,除了配置文件有两个地方需要改,作者已在图中注明,以 mysql-node2 为演示)

(1)停止数据库并删除数据

(2)修改配置文件

(3)初始化数据库

(4)配置sql

测试:

在 mysql-node1 中:

在 mysql-node2 中:

在 mysql-node3 中:

10、路由

注意:实验开始前请将作者放在文章顶部的资源包拖入 mysql-node1 上

(1)安装 mysql-router

(2)配置 mysql-router

编辑配置文件并开启路由服务:

vim /etc/mysqlrouter/mysqlrouter.conf

停止数据库:

(3)测试

查看调度效果:

11、mysql高可用集群MHA

注意:实验开始前请将作者放在文章顶部的资源包拖入 MHA 上

11.1 搭建一主两从架构

(1)修改配置文件并停止服务:

(2)数据库初始化

PS:mysql-node1、mysql-node2 和 mysql-node3配置都相同

(3)配置gtid 日志模式和半同步模式

在 master 端上(mysql-node1)

在 slave 端上(mysql-node2 和 mysql-node3配置都相同)

11.2 安装MHA所需要的软件

(1)解压 MHA 压缩包

(2)安装 MHA 包

(3)免密登录

mysql-node1:

mysql-node2:

mysql-node3:

免密文件复制给一主两从:

(4)复制给一主两从

(5)在一主两从中安装

三台都需要安装,这里以 mysql-node1 为演示:

11.3 配置 MHA 的管理环境

(1)配置本地解析

(2)生成配置文件

(3)编辑配置文件

11.4 检测配置

(1)检测网络及ssh免密

masterha_check_ssh --conf=/etc/masterha/app1.cnf

(2)检测数据主从复制情况

在数据节点 master 端允许 root 远程登陆:

执行检测:

masterha_check_repl --conf=/etc/masterha/app1.cnf

12 MHA的故障切换

MHA的故障切换过程:

  • 配置文件检查阶段,这个阶段会检查整个集群配置文件配置
  • 宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作
  • 复制dead master和最新slave相差的relay log,并保存到MHA Manger具体的目录下
  • 识别含有最新更新的slave
  • 应用从master保存的二进制日志事件(binlog events)
  • 提升一个slave为新的master进行复制 7.使其他的slave连接新的master进行复制

12.1 master 未出现故障手动切换

配置前查看 slave 状态,此时 master 在mysql-node1 上:

在master数据节点还在正常工作情况下

这里指定新的 master 节点不能为 mysql-node3,因为我们之前在配置文件中设定了 mysql-node3 不能为 master。

查看 slave 状态,此时 master 在mysql-node2 上

12.2 master故障手动切换

(1)模拟master故障

(2)在MHA-master中做故障切换

--ignore_last_failover => 表示忽略在/etc/masterha/目录中在切换过程中生成的锁文件

(3)查看 slave 状态

发现此时 mster 为 mysql-node1,切换成功

(4)恢复故障mysql节点

在 mysql-node2 上:

12.3 自动切换

(1)查看 slave 状态,此时 master 在 mysql-node1上

(2)删除防火墙策略与添加环回

当有防火墙策略时,自动切换实验会失败,mysql-node1、mysql-node2、mysql-node3 和 MHA四台主机上都需删除:

因为我们在之前的配置文件的 冗余检测上写入了 172.25.254.11 这个IP,我们要将它写入 mysql-node2 这个备用 master 上,否则日志报错显示为在一直进行网络检测,找不到 172.25.254.11 这个IP。

查看环回是否添加成功:

(3)删掉切换锁文件

(4)监控程序通过指定配置文件监控master状态,当 master 出问题后自动切换并退出避免重复做故障切换

此时会生成一个健康状态检测的文件,打开另一个 MHA 主机会话进行查看:

(5)打开实时监控日志

(6)停止 master 

此时发现监控日志下进行三遍 mysql-node1 为 master 的检测,当依旧检测不到 mysql-node1 后,开始自动切换 master 为 mysql-node2:

监控master状态切换故障节点后自动退出:

(7)恢复故障节点

开启 mysql :

配置现 master 的 slave 策略:

13、为MHA添加VIP功能

注意:两个资源包在文章顶部

(1)复制

(2)修改脚本在脚本中只需要修改下vip即可

(3)删除锁文件和日志

(4)开启脚本调用

(5)查看主从状态,发现现在 mysql-node2 为主

(6)在 master 上添加 vip

(7)启动监控程序

(8)模拟故障自动切换模式,自动切换后查看vip变化

关闭 master 节点服务:

此时 master 变为 mysql-node1 :

查看 vip 是否存在于 mysql-node1 上:

(9)恢复故障主机

(10)模拟故障手动切换模式,手动切换后查看vip变化

查看 vip 是否存在于 mysql-node2 上:

总结:当 VIP 开启后,无论手动或是自动,VIP都会跟随 master 的迁移而迁移!

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

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

相关文章

UnrealEngine学习(03):虚幻引擎术语

1. 项目 虚幻引擎5项目(Unreal Engine 5 Project) 中包含游戏的所有内容。项目中包含的大量文件夹都在磁盘上,例如 Blueprints 和 Materials 。你可以按照自己的意愿命名文件夹并将其整理到项目中。虚幻编辑器(Unreal Editor&…

云网络/云探测+零信任架构初阶知识扫盲

一、关键(边界)节点 1、边界 (1)CiscoASA Firepower 思科 Firepower NGFW(下一代防火墙)是专注于威胁防御的下一代防火墙,它将多种功能完全集于一身,采用统一管理,可在…

荣耀应用商城——被下架应用申诉指南

申诉背景 为了营造良好的荣耀应用市场生态环境,保障开发者权益及提升用户体验,此流程针对应用被下架后开发者后续的具体申诉操作流程及详细介绍。 该流程适用于开发者在荣耀应用市场提交的应用,且应用当前处于被下架状态。 申诉流程 申诉定义…

PHP概述-环境搭建-开发工具安装

老师建议注册使用百度文心一言;讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞;Kimi.ai - 帮你看更大的世界 等人工智能工具软件的一个到两个,也可下载文心一言、讯飞星火、kimi等APP软件使用,对于我们在读的大二学生来说有什么…

XR虚拟拍摄和VP有什么区别

XR 虚拟拍摄技术最早源于舞台屏当中,当前衍生出“VP 虚拟制片”、“XR 扩展现实"两大类: 扩展现实(xR)拍摄,扩展是指LED屏以外区域在画面中被虚拟图形所覆盖,扩展无限的虚拟空间;现实是指LED屏为导演和演员提供肉…

51、Python之模块和包:Python的包和文件夹有何区别

引言 大学有云:“苟日新,又日新,日日新”。 看到一些教材或者文章,介绍到包的时候,一定会提到一定要在文件夹中新建一个__init__.py的文件,哪怕空文件也可以…… 我只想说,有些人的知识真的是…

等保测评与企业风险管理:构建坚实的信息安全防线

随着信息技术的飞速发展,企业在数字化转型的道路上高歌猛进。然而,随之而来的信息安全威胁也日益严峻,成为制约企业发展的关键因素。为了确保信息系统安全,等保测评作为一种重要的风险管理手段,正逐渐成为企业构建信息…

Automatic Educational Question Generation with Difficulty Level Controls

文章目录 题目摘要简介相关工作问题表述实验用户研究结论 题目 具有难度级别控制的自动教育问题生成 论文地址:https://link.springer.com/chapter/10.1007/978-3-031-36272-9_39 摘要 我们考虑自动生成各种难度的数学应用题 (MWP),以满足教师在相应教育阶段教学和…

Java 使用 POI 导出Excel,实现单元格内容为下拉选项

在使用Apache POI的库生成Excel导入模板的时候,有时候需要设置某些列只能选择下拉选项中的内容,该如何实现这个特性呢?下面是一个示例代码,演示如何实现单元格只能从下拉中选择内容。 代码 import org.apache.poi.ss.usermodel.*…

使用Vue创建cesium项目模版该如何选择?

目录 问题描述模版说明及选用建议小结 问题描述 刚入手这个项目,什么都是一知半解。使用Vue,创建Cesium项目的时候,提示需要选择一个模版(如下图所示),该如何选择项目模版选,总结如下: 模版说明…

共源级PMOS反向串联电路分析

一、共源级PMOS反向串联结构如下图: 二、具体分析 1、当VBUS_EN拉低,三极管Q5截止: 如果V-BUS>GEN_5V, T3体二极管阴极电压大于阳极电压,T3体二极管截止。由于上拉电阻R24将S端电压向G端极间电容充电,使得VgVs&…

【机器学习】探秘图像处理与分类:运用C++结合OpenCV实现智能视觉识别技术

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 在计算机视觉领域,图像处理与分类是核心任务之一。OpenCV作为一个功能强大的开源计算机视觉库,提供…

【搜索引擎】ElasticSearch 7.x版本

1 Elasticsearch概述 1.1 Elasticsearch是什么 1.2 全文搜索引擎 1.3 Elasticsearch And Solr 1.4 Elasticsearch Or Solr 1.5 Elasticsearch应用案例 2 Elassticsearch入门 2.1 Elasticsearch 安装 2.1.1 下载软件 2.1.2 安装软件 2.1.3 问题解决 2.2 Elasticsearch基本操…

【网络基础】DNS协议详解:从背景到解析过程及`dig`工具的使用

文章目录 DNS 协议① 前言 - 背景② 域名③ DNS解析过程④ Linux下用dig工具 分析DNS过程⑤ 浏览器中输入URL后,会有哪些过程 DNS 协议 DNS(域名系统,Domain Name System)是互联网的一个核心协议,用于将域名转换为 IP…

有一种“穷人性格”,大事拎不清,小事算太精

在生活的舞台上,人们各自演绎着不同的人生故事。而有一种性格特征,常常被视为与经济困境紧密相连,那就是“大事拎不清,小事算太精”的所谓“穷人性格”。这种性格不仅在个体层面影响着人们的生活轨迹,也在一定程度上反映了社会现象背后的深层次问题。 一、“穷人性格”的表…

读软件开发安全之道:概念、设计与实施10安全设计审查

1. 安全设计审查 1.1. Security Design Review,SDR 1.2. 将安全性融入软件设计的最佳方法之一是戴上“安全帽”进行单独的设计审查 1.3. 安全审查员是熟悉软件运行的系统和环境,以及知道如何使用它的人,但他们不参与设计工作,这…

【SpringCloud】(一文通) 统一服务入口-Gateway

目 录 一. 网关介绍1.1 问题1.2 什么是 API 网关1.3 常见网关实现 二. Spring Cloud Gateway2.1 快速上手2.1.1 创建网关项目2.1.2 引入网关依赖2.1.3 编写启动类2.1.4 添加Gateway的路由配置2.1.5 测试 2.2 Route Predicate Factories2.2.1 Predicate2.2.2 Route Predicate Fa…

<数据集>脑肿瘤识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:5249张 标注数量(xml文件个数):5249 标注数量(txt文件个数):5249 标注类别数:4 标注类别名称:[Glioma, Meningioma, No Tumor, Pituitary] 序号类别名称图片数框数1…

【RabbitMQ】概述

目 录 一. RabbitMQ 概述什么是 MQMQ的作用为什么选择 RabbitMQRabbitMQ 介绍 一. RabbitMQ 概述 前言 Rabbit, 兔子的意思 互联网行业很多公司, 都喜欢用动物命名产品, 或者作为公司的logo, 吉祥物. 比如: 腾讯的企鹅, 京东的狗, 美团的袋鼠, 携程的海豚,阿里就更多了, 蚂蚁…

原生JS实现下滑到当前模块时左右滑动到位

效果图&#xff1a; ​​​​​​​ 源码&#xff1a; <div style"height: 1500px;"></div><div class"software-box"><div class"software-container" style"display: flex;"><div class"software-…