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 的棋盘,然后输入坐标进行判断,若是雷,则游戏结束,否则…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...