MySQL-MHA高可用配置及故障切换
目录
案例搭建
1:所有服务器关闭防火墙
2:设置hosts文件
3:安装 MySQL 数据库
4:修改参数
5:安装 MHA 软件
6:配置无密码认证
7:配置 MHA
8:模拟 master 故障
MHA(MasterHigh Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,是一套优秀的MySQL 高可用环境下故障切换和主从复制的软件。在 MySQL 故障切换过程中,MHA 能做到在 0~30 秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用
- 该软件由两部分组成:MHAManager(管理节点)和MHANode(数据节点)
- MHAManager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上
- MHANode 运行在每台 MySQL服务器上,MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的master,然后将所有其他的slave 重新指向新的 master。整个故障转移过程对应用程序完全透明
- 自动故障切换过程,MHA试图从宕机的主服务器上保存二进制日志,最大程度保证数据不丢失
- 使用半同步复制,可以大大降低数据丢失的风险
- 目前 MHA 主要支持一主多从的架构,要搭建 MHA 要求一个复制集群中必须最少有三台数据库服务器,即一台充当 master,一台充当备用 master,另外一台充当从库
案例搭建
服务器 | 操作系统 | 主机名/IP 地址 | 角色 |
服务器 | CentOS7.9 | 192.168.10.101 | 管理节点,安装 manager 和node 组件 |
服务器 | CentOS7.9 | 192.168.10.102 | Master 节点,安装 node 组件 |
服务器 | CentOS7.9 | 192.168.10.103 | Slave 节点,安装 node 组件 |
服务器 | CentOS7.9 | 192.168.10.104 | Slave 节点,安装 node 组件 |
- 安装MySQL 数据库
- 配置MySQL 一主两从
- 安装MHA 软件
- 配置无密码认证
- 配置 MySQL MHA 高可用
- 模拟master 故障切换
1:所有服务器关闭防火墙
systemctl stop firewalld
setenforce 0
2:设置hosts文件
vim /etc/hosts
192.168.10.101 MHA-manager
192.168.10.102 Mysql1
192.168.10.103 Mysql2
192.168.10.104 Mysql3
3:安装 MySQL 数据库
4:修改参数
(1)修改主库参数
vim /etc/my.cnf
server-id=11
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0
log-slave-updates=true
//当relay_log_purge=1时,旧relay logs会在SQL线程执行完毕后被自动删除;当relay_log_purge=0 时,旧的 relaylog则会被保留(2)修改从库参数
vim /etc/my.cnf
server-id= 22
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0 ##不自动删除中继日志,以便宕机后恢复数据
log-slave-updates=true ##Slave可以是其他 Slave 的 Master,从而扩散 Master 的更新(3)在所有的mysql节点上配置权限
grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';
//第一条是做主从复制的;后四条是做MHA用的(4)在mysql1上查看master信息
mysql> show master status;(5)在mysql2和mysql3上设置为slave
mysql> change master to master_host='192.168.10.102',master_user='myslave',master_password='123456',
master_log_file='master-bin.000003',master_log_pos=689;mysql> start slave;
mysql> show slave status\G
5:安装 MHA 软件
(1)所有服务器上都安装 MHA 依赖的环境
设置阿里的yum基础源以及epel扩展源
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN//注释perl-DBD-MySQL //perl针对于mysql数据库perl-Config-Tiny //从配置文件中提拿其中的值perl-Log-Dispatch //log-日志perl-Parallel-ForkManager //多线程管理perl-ExtUtils-CBuilder //扩展工具perl-ExtUtils-MakeMaker perl-CPAN //cpan perl中的数据库(2)在所有节点安装node组件
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install
//备注node工具(这些工具通常由 MHAManager 的脚本触发,无需人为操作)save_binary_logs:保存和复制 master 的二进制日志apply_diff_relay_logs:识别差异的中继日志事件并将其差异的事件应用于其他的 slavefilter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具) purge_relay_logs:清除中继日志(不会阻塞 SQL 线程)(3)在 MHA-manager 上安装 manager 组件
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install
//备注:
manager工具masterha_check_ssh:检查 MHA 的 SSH 配置状况 masterha_check_repl:检查 MySQL 复制状况masterha_manger:启动 MHA masterha_check_status:检测当前 MHA 运行状态 masterha_master_monitor:检测 master 是否宕机masterha_master_switch:控制故障转移(自动或者手动)masterha_conf_host:添加或删除配置的 server 信息
6:配置无密码认证
(1)在 manager 上配置到所有节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.102
ssh-copy-id 192.168.10.103
ssh-copy-id 192.168.10.104(2)在 Mysql1 上配置到数据库节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.103
ssh-copy-id 192.168.10.104(3)在 Mysql2 上配置到数据库节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.102
ssh-copy-id 192.168.10.104(4)在 Mysql3 上配置到数据库节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.102
ssh-copy-id 192.168.10.103
7:配置 MHA
(1)在 manager 节点上复制相关脚本到/usr/local/bin 目录
ll /root/mha4mysql-manager-0.57/samples/scripts/
chmod +x /root/mha4mysql-manager-0.57/samples/scripts/*
cp /root/mha4mysql-manager-0.57/samples/scripts/* /usr/local/bin
//脚本具体作用master_ip_failover:自动切换时 VIP 管理的脚本 master_ip_online_change:在线切换时 vip 的管理 power_manager:故障发生后关闭主机的脚本 send_report:因故障切换后发送报警的脚本(2)使用文档内容完整替换 master_ip_failover 文件的内容,IP 部分更换为自己的IP地址(第9页)
复制“master_ip_failover”脚本到/usr/local/bin 目录,这里使用脚本管理 VIP
//备注:candidate_master=1:设置为候选 master,如果设置该参数以后,发生主从切换以后会将此从库提升为主库。check_repl_delay=0:默认情况下如果一个 slave 落后 master 100M 的 relay logs 的话,MHA 将不会选择该slave 作为一个新的 master。因为对于这个 slave 的恢复需要花费很长时间,通过设置 check_repl_delay=0,MHA 触发切换在选择一个新的 master 的时候将会忽略复制延时,这个参数对于设置了 candidate_master=1 的主机非常有用,因为这个候选主在切换的过程中一定是新的 master。//如果是yum安装的mariadb,master_binlog_dir=/var/lib/mysql(4)测试 ssh 无密码认证,如果正常最后会输出 successfully
masterha_check_ssh -conf=/etc/masterha/app1.cnf
(5)测试 mysq 主从连接情况,最后出现 MySQL Replication Health is OK 字样说明正常
masterha_check_repl -conf=/etc/masterha/app1.cnf
(6)首次配置 MHA 的 VIP 地址需要手动进行配置(在mysq1上)
ifconfig ens33:1 192.168.10.200
(7)启动 MHA(在mha-manager主机上)
nohup masterha_manager \ //nohup:英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
--conf=/etc/masterha/app1.cnf \
--remove_dead_master_conf \ //该参数代表当发生主从切换后,老的主库的 IP 地址将会从配置文件中移除该参数代表当发生主从切换后,老的主库的 IP 地址将会从配置文件中移除
--ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 & //该参数代表忽略上次 MHA 触发切换产生的文件
//2>&1表示标准错误输出和标准输出都定向到log中;2>&1 & 最后一个&表示把这条命令放到后台执行
//< /dev/null >/var/log/masterha/app1/manager.log 2>&1
表示先将标准输出重定向到manager.log,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了manager.log,因此标准错误也会重定向到manager.log在Linux系统中,代码“0”、“1”、“2”都是文件描述符,0代表标准输入,1代表标准输出,2代表错误输出(8)查看 MHA 状态,可以看到当前的 master 是 Mysql1 节点
masterha_check_status --conf=/etc/masterha/app1.cnf
(9)查看 MHA 日志
cat /var/log/masterha/app1/manager.log
8:模拟 master 故障
(1)用客户端链接群集
mysql -u mha -pmanager -h 192.168.10.200(2)关闭当前的 master
systemctl stop mysqld(3)观察 MHA 日志,如果自动切换成功,最后会输出 successfully 字样
tailf /var/log/masterha/app1/manager.log
相关文章:

MySQL-MHA高可用配置及故障切换
目录 案例搭建 1:所有服务器关闭防火墙 2:设置hosts文件 3:安装 MySQL 数据库 4:修改参数 5:安装 MHA 软件 6:配置无密码认证 7:配置 MHA 8:模拟 master 故障 MHA(MasterHi…...

Sentinel 滑动时间窗口源码分析
前言: Sentinel 的一个重要功能就是限流,对于限流来说有多种的限流算法,比如滑动时间窗口算法、漏桶算法、令牌桶算法等,Sentinel 对这几种算法都有具体的实现,如果我们对某一个资源设置了一个流控规则,并…...

猎码安卓APP开发IDE,amix STUDIO中文java,HTML5开发工具
【无爱也能发电】Xili 2024/8/2 10:41:20 猎码安卓APP开发IDE,amix java开发工具 我研发这些只有一小部分理由是为了赚钱,更多是想成就牛逼的技术产品。 目前的产品就够我赚钱的,我持续更新就好了,没必要继续研究。 IDE不赚钱,谁…...

【Deep-ML系列】Linear Regression Using Gradient Descent(手写梯度下降)
题目链接:Deep-ML 这道题主要是要考虑矩阵乘法的维度,保证维度正确,就可以获得最终的theata import numpy as np def linear_regression_gradient_descent(X: np.ndarray, y: np.ndarray, alpha: float, iterations: int) -> np.ndarray:…...

NVIDIA A100 和 H100 硬件架构学习
目前位置NV各种架构代号: NVIDIA GPU 有多个代号和架构,这些架构对应不同的世代和硬件特性。以下是 NVIDIA 主要 GPU 架构及其计算能力(Compute Capability)代号的简要概述: Tesla 架构 G80、GT200 Compute Capabi…...
企业研发设计协同解决方案
新迪三维设计,20年深耕三维CAD 全球工业软件研发不可小觑的中国力量 2003-2014 年 新迪数字先后成为达 索SolidWorks、 ANSYS Spaceclaim、MSC等三维CAD/CAE 软件厂商的中国研发中心,深度参与国际 一流工业软件的研发过程,积累了丰富的 技术经…...

iOS 18(macOS 15)Vision 中新增的任意图片智能评分功能试玩
概述 在 WWDC 24 中库克“大厨”除了为 iOS 18 等平台重磅新增了 Apple Intelligence 以外,苹果也利用愈发成熟的机器学习引擎扩展了诸多内置框架,其中就包括 Vision。 想用本机人工智能自动为我们心仪的图片打一个“观赏分”吗?“如意如意&…...
如何实现若干子任务一损俱损--浅谈errgroup
errgroup 是 Go 语言官方扩展库 x/sync 中的一个包,它提供了一种方式来并行运行多个 goroutine,并在所有 goroutine 都完成时返回第一个发生的错误(如果有的话)。这对于需要并行处理多个任务并等待它们全部完成,同时需…...
并查集的基础题
## 洛谷p1196 绿 35m 点到祖先的距离 代码: #include<bits/stdc.h> using namespace std; const int N3e510; int f[N],dist[N],num[N];//num计算祖先有多少儿子 ,dist计算距离祖先有几个 int zx(int x){ if(f[x]x)return x;//x没爸爸 e…...

[论文翻译] LTAChecker:利用注意力时态网络基于 Dalvik 操作码序列的轻量级安卓恶意软件检测
LTAChecker: Lightweight Android Malware Detection Based on Dalvik Opcode Sequences using Attention Temporal Networks 摘要: Android 应用程序已成为黑客攻击的主要目标。安卓恶意软件检测是一项关键技术,对保障网络安全和阻止异常情况至关重要。…...
HTTPS链接建立的过程
HTTPS(HyperText Transfer Protocol Secure)建立链接的过程主要是通过TLS(Transport Layer Security)协议来实现的。HTTPS的链接建立过程可以分为以下几个步骤: 1. **客户端发起请求** - 客户端向服务器发送一个请求&…...

文档控件DevExpress Office File API v24.1 - 支持基于Unix系统的打印
DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装Microsoft Office,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…...

IP地址封装类(InetAddress类)
文章目录 前言一、IP地址是什么?二、IP地址封装类 1.常用方法2.实操展示总结 前言 当我们想要获取到通信对方的IP地址、主机地址等信息时,我们可以使用InetAddress类。InetAddress类在java的net包中。 一、IP地址是什么? IP地址 (Internet Pr…...
数据库设计规范化
在数据库设计中,尤其是在关系型数据库管理系统中,规范化(Normalization)是一种通过减少数据冗余和依赖关系来优化数据库表结构的过程。规范化可以确保数据的完整性和减少数据更新时的问题。规范化的过程通常遵循一系列标准或范式&…...

预约咨询小程序搭建教程,源码获取,从0到1完成开发并部署上线
目录 一、明确需求与规划功能 二、选择开发工具与模板 三、编辑小程序内容 四、发布与运营 五、部分代码展示 制作一个预约咨询小程序,主要可以分为以下几个步骤: 一、明确需求与规划功能 明确需求: 1.确定小程序的服务对象…...

leetcode217. 存在重复元素,哈希表秒解
leetcode217. 存在重复元素 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例 1: 输入:nums [1,2,3,1] 输出:true 示例 2&#x…...
QT:QString 支持 UTF-8 编码吗?
在 Qt 中,字符串的处理主要依赖于 QString 类。QString 内部并不是直接使用 UTF-8 编码来存储数据的。相反,QString 使用 Unicode(特别是 UTF-16)来存储文本,以支持多语言环境的国际化应用。这种设计使得 QString 能够…...

我主编的电子技术实验手册(13)——电磁元件之继电器
本专栏是笔者主编教材(图0所示)的电子版,依托简易的元器件和仪表安排了30多个实验,主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】,精心设计的【实验步骤】,全面丰富的【思考习…...

odoo from样式更新
.xodoo_form {.o_form_sheet {padding-bottom: 0 !important;border-style: solid !important;border-color: white;}.o_inner_group {/* 线框的样式 *//*--line-box-border: 1px solid #666;*//*box-shadow: 0 1px 0 #e6e6e6;*/margin: 0;}.grid {display: grid;gap: 0;}.row …...
Oracle(52)分区表有哪些类型?
分区表在Oracle数据库中主要分为以下几种类型: 范围分区(Range Partitioning)列表分区(List Partitioning)哈希分区(Hash Partitioning)组合分区(Composite Partitioning࿰…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...

轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...

【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...