MySQL 主从复制中 MHA 工具的研究与实践
MySQL 主从复制中 MHA 工具的研究与实践
- 一、MHA 工具简介
- 二、MHA 的工作原理
- 三、MHA 配置步骤
- 环境准备
- 1. 在主服务器上配置主从复制
- 2. 在从服务器上配置复制
- 安装 MHA 工具
- 1. 安装必要的依赖包
- 2. 下载并安装 MHA
- 配置 MHA
- 1. 创建 MHA 配置文件
- 2. 配置 SSH 免密登录
- 测试 MHA
- 1. 检查配置
- 2. 启动 MHA 管理器
- 3. 模拟主服务器故障
- 四、实现高可用性的关键要点
- 五、实际应用中的注意事项
在 MySQL 主从复制架构中,MHA (Master High Availability) 工具提供了高效的主从切换方案,从而大大提高了数据库的高可用性。以下是关于 MHA 工具的详细介绍和实践步骤,包括具体操作命令和源代码示例。
在此之前需要配置Mysql主从复制的环境,推荐文章:Mysql的主从复制-您数据库安全的保障
一、MHA 工具简介
MHA 是一套用于管理 MySQL 主从复制的开源工具,主要用于在主服务器故障时,自动进行故障转移和主从切换,以确保数据库服务的持续可用。
二、MHA 的工作原理
MHA 会监控主服务器的状态,当检测到主服务器故障时,它会按照以下步骤进行操作:
- 从众多从服务器中选择一个最新的作为新的主服务器。
- 应用从故障主服务器上保存的二进制日志到新的主服务器,以保证数据的一致性。
- 更新其他从服务器的配置,使其指向新的主服务器。
三、MHA 配置步骤
环境准备
至少需要三台 MySQL 服务器(1 主 2 从或更多)。
- 安装 MySQL
- 配置主从复制
1. 在主服务器上配置主从复制
编辑 MySQL 配置文件 (my.cnf):
[mysqld]
server-id=1
log-bin=mysql-bin
重启 MySQL 服务:
sudo systemctl restart mysql
在 MySQL 中创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
2. 在从服务器上配置复制
编辑 MySQL 配置文件 (my.cnf):
[mysqld]
server-id=2
relay-log=relay-bin
重启 MySQL 服务:
sudo systemctl restart mysql
配置从服务器指向主服务器:
CHANGE MASTER TOMASTER_HOST='master_host',MASTER_USER='repl',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=4;
START SLAVE;
安装 MHA 工具
1. 安装必要的依赖包
sudo apt-get update
sudo apt-get install -y perl libdbi-perl libdbd-mysql-perl libio-socket-ssl-perl libconfig-tiny-perl
2. 下载并安装 MHA
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-node_0.58-0_all.deb
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager_0.58-0_all.deb
sudo dpkg -i mha4mysql-node_0.58-0_all.deb
sudo dpkg -i mha4mysql-manager_0.58-0_all.deb
配置 MHA
1. 创建 MHA 配置文件
在 MHA 管理节点上创建配置文件 (/etc/mha.cnf):
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
user=root
password=yourpassword
ssh_user=root
repl_user=repl
repl_password=password
ping_interval=1[server1]
hostname=master_host[server2]
hostname=slave1_host[server3]
hostname=slave2_host
2. 配置 SSH 免密登录
在管理节点生成 SSH 密钥:
ssh-keygen -t rsa
将公钥复制到各 MySQL 服务器:
ssh-copy-id root@master_host
ssh-copy-id root@slave1_host
ssh-copy-id root@slave2_host
测试 MHA
1. 检查配置
masterha_check_ssh --conf=/etc/mha.cnf
masterha_check_repl --conf=/etc/mha.cnf
2. 启动 MHA 管理器
masterha_manager --conf=/etc/mha.cnf
3. 模拟主服务器故障
停止主服务器 MySQL 服务:
sudo systemctl stop mysql
检查 MHA 切换:
tail -f /var/log/masterha/app1/manager.log
四、实现高可用性的关键要点
- 监控的准确性: 确保对主服务器状态的监控准确及时,避免误判。
- 从服务器的同步状态: 选择最新的从服务器作为新主,以减少数据丢失。
- 配置的合理性: 包括网络配置、服务器资源配置等,以保证切换过程的顺畅。
五、实际应用中的注意事项
- 网络延迟: 低延迟的网络环境有助于提高切换的效率和准确性。
- 数据一致性: 在切换后,需要进一步检查数据的一致性,以确保业务的正常运行。
- 定期测试: 定期模拟故障进行切换测试,以验证 MHA 的有效性和稳定性。
通过合理配置和运用 MHA 工具,我们能够在 MySQL 主从复制架构中实现高效的主从切换,大大提高数据库的高可用性,为业务的稳定运行提供坚实的保障。
相关文章:
MySQL 主从复制中 MHA 工具的研究与实践
MySQL 主从复制中 MHA 工具的研究与实践 一、MHA 工具简介二、MHA 的工作原理三、MHA 配置步骤环境准备1. 在主服务器上配置主从复制2. 在从服务器上配置复制 安装 MHA 工具1. 安装必要的依赖包2. 下载并安装 MHA 配置 MHA1. 创建 MHA 配置文件2. 配置 SSH 免密登录 测试 MHA1.…...
Hi3861 OpenHarmony嵌入式应用入门--TCP Server
本篇使用的是lwip编写tcp服务端。需要提前准备好一个PARAM_HOTSPOT_SSID宏定义的热点,并且密码为PARAM_HOTSPOT_PSK LwIP简介 LwIP是什么? A Lightweight TCP/IP stack 一个轻量级的TCP/IP协议栈 详细介绍请参考LwIP项目官网:lwIP - A Li…...
Poker Game, Run Fast
Poker Game, Run Fast 扑克:跑得快 分门别类: 单张从小到大默认 A < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K 跑得快:单张从小到大 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 &…...
订单折扣金额分摊算法|代金券分摊|收银系统|积分分摊|分摊|精度问题|按比例分配|钱分摊|钱分配
一个金额分摊的算法,将折扣分摊按比例(细单实收在总体的占比)到各个细单中。 此算法需要达到以下要求: 折扣金额接近细单总额,甚至折扣金额等于细单金额,某些时候甚至超过细单总额,要保证实收不…...
Matlab中collectPlaneWave函数的应用
查看文档如下: 可以看出最多5个参数,分别是阵列对象,信号幅度,入射角度,信号频率,光速。 在下面的代码中,我们先创建一个3阵元的阵列,位置为:(-1,0,0&#x…...
Linux系统的基础知识和常用命令
1、什么是Linux? 是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行…...
三相异步电动机的起动方法
1. 引言 2. 三相笼型异步电动机德起动方法 3. 三相绕线型异步电动机的起动方法 4. 软起动器起动 5. 参考文献 1 引言 三相异步电动机结构简单﹑价格低廉﹑运行可靠﹑维护方便,在工农业生产中得到了广泛应用。为使电动机能够转动起来,并很快达到工作转…...
【LinuxC语言】手撕Http协议之accept_request函数实现(一)
文章目录 前言accept_request函数作用accept_request实现解析方法根据不同方法进行不同操作http服务器响应格式unimplemented函数实现总结前言 在计算机网络中,HTTP协议是一种常见的应用层协议,它定义了客户端和服务器之间如何进行数据交换。在这篇文章中,我们将深入探讨Li…...
Redis Cluster 模式 的具体实施细节是什么样的?
概述 参考:What are Redis Cluster and How to setup Redis Cluster locally ? | by Rajat Pachauri | Medium Redis Cluster 的工作原理是将数据分布在多个节点上,同时确保高可用性和容错能力。以下是 Redis Cluster 运行方式的简要概述: …...
基于大模型的机器人控制
基于大模型的机器人控制是指利用深度学习中的大型神经网络模型来实现对机器人的精确控制。这种方法结合了深度学习的强大表征学习能力和机器人控制的实际需求,旨在提高机器人的自主性、灵活性和智能性。 基本原理 数据收集:首先,需要收集大量…...
在 PostgreSQL 中,如何处理数据的版本控制?
文章目录 一、使用时间戳字段进行版本控制二、使用版本号字段进行版本控制三、使用历史表进行版本控制四、使用 RETURNING 子句获取更新前后的版本五、使用数据库触发器进行版本控制 在 PostgreSQL 中,处理数据的版本控制可以通过多种方式实现,每种方式都…...
Rust 组织管理
Rust 组织管理 Rust 是一种系统编程语言,以其内存安全性、速度和并发性而闻名。它由 Mozilla 开发,并得到了一个庞大而活跃的社区的支持。Rust 的组织管理涉及多个方面,包括项目管理、社区参与、工具和库的维护,以及生态系统的整…...
vb.netcad二开自学笔记1:万里长征第一步Hello CAD!
已入门的朋友请绕行! 今天开启自学vb.net 开发autocad,网上相关资料太少了、太老了。花钱买课吧,穷!又舍不得,咬牙从小白开始摸索自学吧,虽然注定是踏上了一条艰苦之路,顺便作个自学笔记备忘!积…...
Vue的学习之数据与方法
前段期间,由于入职原因没有学习,现在已经正式入职啦,接下来继续加油学习。 一、数据与方法 文字备注已经在代码中,方便自己学习和理解 <!DOCTYPE html> <html><head><meta charset"utf-8">&l…...
刷题——在二叉树中找到最近公共祖先
在二叉树中找到两个节点的最近公共祖先_牛客题霸_牛客网 int lowestCommonAncestor(TreeNode* root, int o1, int o2) {if(root NULL) return -1;if((root->val o1) || (root->val o2)) return root->val;int left lowestCommonAncestor(root->left, o1, o2);i…...
nginx(三)—从Nginx配置熟悉Nginx功能
一、 Nginx配置文件结构 ... #全局块events { #events块... }http #http块 {... #http全局块server #server块{ ... #server全局块location [PATTERN] #location块{...}location [PATTERN] {...}}server{...}... #http全局块 …...
Python轮子:文件比较器——filecmp
原文链接:http://www.juzicode.com/python-module-filecmp filecmp模块可以用来比较文件或者目录。 安装和导入 filecmp是Python自带的模块,不需要额外安装,直接导入即可: import filecmp as fc #或者 import filecmp cmp()比较…...
uni-app组件 子组件onLoad、onReady事件无效
文章目录 导文解决方法 导文 突然发现在项目中,组件 子组件的onLoad、onReady事件无效 打印也出不来值 怎么处理呢? 解决方法 mounted() {console.log(onLoad, this.dateList);//有效// this.checkinDetails()},onReady() {console.log(onReady, this.da…...
leetcode力扣_排序问题
215.数组中的第K个最大元素 鉴于已经将之前学的排序算法忘得差不多了,只会一个冒泡排序法了,就写了一个冒牌排序法,将给的数组按照降序排列,然后取nums[k-1]就是题目要求的,但是提交之后对于有的示例显示”超出时间限制…...
在 .NET 8 Web API 中实现弹性
在现代 Web 开发中,构建弹性 API 对于确保可靠性和性能至关重要。本文将指导您使用 Microsoft.Extensions.Http.Resilience 库在 .NET 8 Web API 中实现弹性。我们将介绍如何设置重试策略和超时,以使您的 API 更能抵御瞬时故障。 步骤 1.创建一个新的 .…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
