Mysql—高可用集群MHA
1:什么是MHA?
MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
2:MHA 的组成
MHA由两部分组成:MHAManager (管理节点) MHA Node (数据库节点)
MHA Manager 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave 节点上。
MHA Manager 会定时探测集群中的 master 节点。
当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。
3:MHA 的特点
自动故障切换过程中,MHA从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日 志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数 据一致性
目前MHA支持一主多从架构,最少三台服务,即一主两从
4.MHA工作原理
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群必须最少有3台数据库服务器, 一主二从,即一台充当Master,台充当备用Master,另一台充当从库。
MHA Node 运行在每台 MySQL 服务器上
MHAManager 会定时探测集群中的master 节点 当master 出现故障时,它可以自动将最新数据的slave 提升为新的master
然后将所有其他的slave 重新指向新的master,VIP自动漂移到新的master。
整个故障转移过程对应用程序完全透明。
5.MHA部署实施
5.1:搭建主两从架构
准备虚拟机:四台虚拟机:172.25.254.10,172.25.254.20,172.25.254.30,172.25.254.50
准备安装包MHA
172.25.254.50上与172.25.254.10,172.25.254.20,172.25.254.30做免密验证
[root@node4 ~]# ssh-keygen
172.25.254.50上与172.25.254.10做免密验证
[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.10
输入密码172.25.254.10主机解析创建成功
172.25.254.50上与172.25.254.20做免密验证
[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.20
输入密码172.25.254.20主机解析创建成功
172.25.254.50上与172.25.254.30做免密验证
[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.30
输入密码172.25.254.30主机解析创建成功
确定本地解析是否存在
[root@node4 ~]# vim /etc/hosts
5.2:创建半同步模式
还原10,20,30主机的配置文件信息
172.25.254.10与172.25.254.20和172.25.254.30主机创建半同步模式
[root@node1 ~]# vim /etc/my.cnf
停止数据库
[root@node1 ~]# /etc/init.d/mysqld stop
清除mysql数据
[root@node1 ~]# rm -fr /data/mysql/*
对数据库进行初始化
[root@node1 ~]# mysqld --user=mysql --initialize
启动数据库
[root@node1 ~]# /etc/init.d/mysqld start
登录数据库,输入自己的密码
[root@node1 ~]# mysql -uroot -p'LEfu9_uS*B<h'
修改密码'lee'
mysql> alter user root@localhost identified by 'lee';
建立同步用户'lee'
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';
同意远程授权
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
开启半同步模式
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
打开半同步功能
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SHOW MASTER STATUS;
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
同理172.25.254.20也进行相应的配置
[root@node2 ~]# vim /etc/my.cnf
停止数据库
[root@node2 ~]# /etc/init.d/mysqld stop
清除mysql数据
[root@node2 ~]# rm -fr /data/mysql/*
对数据库进行初始化
[root@node2 ~]# mysqld --user=mysql --initialize
[root@node2 ~]# /etc/init.d/mysqld start
[root@node2 ~]# mysql -uroot -p'kird_l5Pkg#0'
修改密码
mysql> alter user root@localhost identified by 'lee';
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl', MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;
开启slave模式
mysql> start slave;
加载半同步模块
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
打开半同步功能
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
mysql> SHOW SLAVE STATUS\G
172.25.254.20与172.25.254.10主机建立半同步模式成功
172.25.254.30
[root@node3 ~]# vim /etc/my.cnf
停止数据库
[root@node2 ~]# /etc/init.d/mysqld stop
清除mysql数据
[root@node2 ~]# rm -fr /data/mysql/*
[root@node3 ~]# mysql -uroot -p'1;o0/rSwpg2L'
mysql> alter user root@localhost identified by 'lee';
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl', MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> start slave;
mysql> SHOW SLAVE STATUS\G
172.25.254.30与172.25.254.10建立半同步模式成功
5.3:安装MHA所需要的软件
[root@node4 ~]# cd MHA-7/
[root@node4 MHA-7]# yum install *.rpm
在172.25.254.50传递软件包到172.25.254.10,172.25.254.20和172.25.254.30主机上
[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.10:/root
[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.20:/root
[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.30:/root
172.25.254.10,172.25.254.20和172.25.254.30主机上对传递的包进行安装
[root@node1 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@node2 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@node3 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
172.25.254.50上生成配置文件并解压压缩包
[root@node4 MHA-7]# mkdir /etc/masterha
[root@node4 MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz
将底下的文件app1.conf进行拷贝
[root@node4 MHA-7]# cd mha4mysql-manager-0.58/
[root@node4 mha4mysql-manager-0.58]# ls[root@node4 mha4mysql-manager-0.58]# cd samples/conf
[root@node4 conf]# cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf
进入新拷贝的文件中修改配置文件
[root@node4 conf]# vim /etc/masterha/app1.cnf
由于172.25.254.10,172.25.254.20,172.25.254.30主机不允许建立远程连接
由于创建主从复制,172.25.254.10上建立远程连接就可以全部建立成功
mysql> CREATE USER root@'%' identified by 'lee';
mysql> grant ALL ON *.* to root@'%';
在172.25.254.50主机上进行检测将其底下文件传递到10,20和30主机上
[root@node4 ~]# cd .ssh/
[root@node4 .ssh]# ls
[root@node4 ~]#scp id_rsa root@172.25.254.10:/root/.ssh/
[root@node4 ~]#scp id_rsa root@172.25.254.20:/root/.ssh/
[root@node4 ~]#scp id_rsa root@172.25.254.30:/root/.ssh/
检测网络及SSH免密验证
[root@node4 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
保证了连接完整性
检测数据主从复制情况
[root@node4 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
数据主从复制没有问题
至此MHA的部署完成!!!
相关文章:

Mysql—高可用集群MHA
1:什么是MHA? MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切…...
MeshGS: Adaptive Mesh-Aligned GaussianSplatting for High-Quality Rendering 论文解读
目录 一、概述 二、相关工作 1、神经渲染 2、基于Mesh的渲染 3、基于点的渲染和高斯溅射 三、前置知识 1、SDF 2、Marching Cubes算法 四、MeshGS 1、初始化Mesh网格 2、基于Mesh的GS溅射 3、损失函数 一、概述 提出一种基于距离的高斯splatting,并且将高…...

JDK-23与JavaFX的安装
一、JDK-23的安装 1.下载 JDK-23 官网直接下载,页面下如图: 2.安装 JDK-23 2.1、解压下载的文件 找到下载的 ZIP 文件,右键点击并选择“解压到指定文件夹”,将其解压缩到您希望的目录,例如 C:\Program Files\Java\…...

LeetCode讲解篇之2266. 统计打字方案数
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们使用逆向思维发现如果连续按存在三个字母的按键,最后一个按键表示的字母可以是某个字母连续出现一次、两次、三次这三种情况的方案数之和 我们发现连续按存在三个字母的按键,当连续按…...

2025推荐选题|基于MVC的农业病虫害防治平台的设计与实现
作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,…...
Vue 3 的不同版本总结
Vue 3 的不同版本(例如 3.x 系列的多个次版本)在语法和特性上有一些变化和改进。以下是 Vue 3 中随着版本迭代的一些语法变化和新特性的总结。 1. Vue 3.0: 初始发布 主要特性: 组合式 API (Composition API):引入 setup 函数&…...
在wpf 中 用mvvm 的方式 绑定 鼠标事件
在 wpf中, 如果遇到控件的 MouseEnter MouseLeave 属性时, 往往会因为有参数object sender, System.Windows.Input.MouseEventArgs e 很多人选择直接生成属性在后台, 破坏了MVVM, 这其实是不必要的. 我们完全可以用 xmlns:i“http://schemas.microsoft.com/xaml/behaviors” 完…...

TELEDYNE DALSA相机连接编码器
文章目录 对于线阵相机,欲令扫描拍照出来的图像不失真变形,则需要保证横向像素精度纵向像素精度,因此有下列等式成立: 现场的横向视野是650mm,横向实际像素是7663pixel,产线运动线速度为416.667mm/S,则可以计算出行频应…...
每天一个数据分析题(五百零八)- 机器学习模型
逻辑回归和支持向量机(SVM)都是经典的机器学习模型,逻辑回归和SVM的联系与区别,不正确的是? A. 二者都可以处理分类问题 B. 二者都可以增加不同的正则化项 C. 二者都是参数模型 D. SVM的处理方法是只考虑support v…...
leetcode栈与队列(一)-有效的括号
题目 . - 力扣(LeetCode) 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的…...

鸿蒙NEXT开发-知乎评论小案例(基于最新api12稳定版)
注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…...

重学SpringBoot3-集成Redis(十一)之地理位置数据存储
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(十一)之地理位置数据存储 1. GEO 命令简介2. 项目环境配置2.1. 依赖引入2.2. Redis 配置 3. GEO 数据存储和查询实现3…...

Docker-compose 单节点管理、consul 注册中心、registrator、template
consul是一个基于分布式的服务发现和配置管理工具。它具有快速构建分布式架构,提供服务发现和服务注册功能。consul职能:1、自动发现、注册;2、自动配置;3、自动更新 服务发现:自动检查网络中的服务(如数据…...

制药企业MES与TMS的数据库改造如何兼顾安全与效率双提升
*本图由AI生成 在全球制造业加速数字化转型的浪潮中,一家来自中国的、年营业额超过200亿元的制药企业以其前瞻性的视角和果断的行动,成为该行业里进行国产化改造的先锋。通过实施数据库改造试点项目,该企业实现了其关键业务系统MES࿰…...
Spring Boot比Spring多哪些注解
Spring Boot 是 Spring 框架的扩展,它旨在简化 Spring 应用程序的初始搭建以及开发过程。与 Spring 相比,Spring Boot 提供了许多额外的注解来进一步简化配置和开发工作。以下是 Spring Boot 特有的一些核心注解,这些注解在 Spring 中不可用&…...
985研一学习日记 - 2024.10.17
一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。 日常 1、起床6:00√ 2、健身1个多小时 今天练了二头和背部,明天练胸和三头 3、LeetCode刷了3题 旋转图像:…...

牛客SQL29详解 计算用户的平均次日留存率
牛客SQL29详解 计算用户的平均次日留存率 牛客SQL29详解 计算用户的平均次日留存率 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧! 牛客SQL29详解 计算用户的平均次日留存率 题目&#x…...

Redis --- 第四讲 --- 常用数据结构 --- 其他类型stream、bitmap……。补充内容scan命令。
通过前面的学习,我们已经学习了Redis最关键的五个数据结构:String、List、Hash、Set、ZSet。这五个数据结构应用广泛,频繁使用。 redis中包含的所有类型,下面将要介绍不常用的类型。 一、streams类型介绍 事件、epoll/IO多路复…...

Java多线程--实现跑马小游戏
线程的实现方式 继承Thread类:void run()方法没有返回值,无法抛异常实现Runnable接口:void run()方法没有返回值,无法抛异常实现Callable接口:V call() throws Exception 返回结果,能够抛异常 实现Callab…...

扫雷(C 语言)
目录 一、游戏设计分析二、各个步骤的代码实现1. 游戏菜单界面的实现2. 游戏初始化3. 开始扫雷 三、完整代码四、总结 一、游戏设计分析 本次设计的扫雷游戏是展示一个 9 * 9 的棋盘,然后输入坐标进行判断,若是雷,则游戏结束,否则…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...