当前位置: 首页 > news >正文

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 组件

  1. 安装MySQL 数据库
  2. 配置MySQL 一主两从
  3. 安装MHA 软件
  4. 配置无密码认证
  5. 配置 MySQL MHA 高可用
  6. 模拟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&#xff1a;所有服务器关闭防火墙 2&#xff1a;设置hosts文件 3&#xff1a;安装 MySQL 数据库 4&#xff1a;修改参数 5&#xff1a;安装 MHA 软件 6&#xff1a;配置无密码认证 7&#xff1a;配置 MHA 8&#xff1a;模拟 master 故障 MHA(MasterHi…...

Sentinel 滑动时间窗口源码分析

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

猎码安卓APP开发IDE,amix STUDIO中文java,HTML5开发工具

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

【Deep-ML系列】Linear Regression Using Gradient Descent(手写梯度下降)

题目链接&#xff1a;Deep-ML 这道题主要是要考虑矩阵乘法的维度&#xff0c;保证维度正确&#xff0c;就可以获得最终的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各种架构代号&#xff1a; NVIDIA GPU 有多个代号和架构&#xff0c;这些架构对应不同的世代和硬件特性。以下是 NVIDIA 主要 GPU 架构及其计算能力&#xff08;Compute Capability&#xff09;代号的简要概述&#xff1a; Tesla 架构 G80、GT200 Compute Capabi…...

企业研发设计协同解决方案

新迪三维设计&#xff0c;20年深耕三维CAD 全球工业软件研发不可小觑的中国力量 2003-2014 年 新迪数字先后成为达 索SolidWorks、 ANSYS Spaceclaim、MSC等三维CAD/CAE 软件厂商的中国研发中心&#xff0c;深度参与国际 一流工业软件的研发过程&#xff0c;积累了丰富的 技术经…...

iOS 18(macOS 15)Vision 中新增的任意图片智能评分功能试玩

概述 在 WWDC 24 中库克“大厨”除了为 iOS 18 等平台重磅新增了 Apple Intelligence 以外&#xff0c;苹果也利用愈发成熟的机器学习引擎扩展了诸多内置框架&#xff0c;其中就包括 Vision。 想用本机人工智能自动为我们心仪的图片打一个“观赏分”吗&#xff1f;“如意如意&…...

如何实现若干子任务一损俱损--浅谈errgroup

errgroup 是 Go 语言官方扩展库 x/sync 中的一个包&#xff0c;它提供了一种方式来并行运行多个 goroutine&#xff0c;并在所有 goroutine 都完成时返回第一个发生的错误&#xff08;如果有的话&#xff09;。这对于需要并行处理多个任务并等待它们全部完成&#xff0c;同时需…...

并查集的基础题

## 洛谷p1196 绿 35m 点到祖先的距离 代码&#xff1a; #include<bits/stdc.h> using namespace std; const int N3e510; int f[N],dist[N],num[N];//num计算祖先有多少儿子 &#xff0c;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 摘要&#xff1a; Android 应用程序已成为黑客攻击的主要目标。安卓恶意软件检测是一项关键技术&#xff0c;对保障网络安全和阻止异常情况至关重要。…...

HTTPS链接建立的过程

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;建立链接的过程主要是通过TLS&#xff08;Transport Layer Security&#xff09;协议来实现的。HTTPS的链接建立过程可以分为以下几个步骤&#xff1a; 1. **客户端发起请求** - 客户端向服务器发送一个请求&…...

文档控件DevExpress Office File API v24.1 - 支持基于Unix系统的打印

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

IP地址封装类(InetAddress类)

文章目录 前言一、IP地址是什么&#xff1f;二、IP地址封装类 1.常用方法2.实操展示总结 前言 当我们想要获取到通信对方的IP地址、主机地址等信息时&#xff0c;我们可以使用InetAddress类。InetAddress类在java的net包中。 一、IP地址是什么&#xff1f; IP地址 (Internet Pr…...

数据库设计规范化

在数据库设计中&#xff0c;尤其是在关系型数据库管理系统中&#xff0c;规范化&#xff08;Normalization&#xff09;是一种通过减少数据冗余和依赖关系来优化数据库表结构的过程。规范化可以确保数据的完整性和减少数据更新时的问题。规范化的过程通常遵循一系列标准或范式&…...

预约咨询小程序搭建教程,源码获取,从0到1完成开发并部署上线

目录 一、明确需求与规划功能 二、选择开发工具与模板 三、编辑小程序内容 四、发布与运营 五、部分代码展示 制作一个预约咨询小程序&#xff0c;主要可以分为以下几个步骤&#xff1a; 一、明确需求与规划功能 明确需求&#xff1a; 1.确定小程序的服务对象&#xf…...

leetcode217. 存在重复元素,哈希表秒解

leetcode217. 存在重复元素 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;true 示例 2&#x…...

QT:QString 支持 UTF-8 编码吗?

在 Qt 中&#xff0c;字符串的处理主要依赖于 QString 类。QString 内部并不是直接使用 UTF-8 编码来存储数据的。相反&#xff0c;QString 使用 Unicode&#xff08;特别是 UTF-16&#xff09;来存储文本&#xff0c;以支持多语言环境的国际化应用。这种设计使得 QString 能够…...

我主编的电子技术实验手册(13)——电磁元件之继电器

本专栏是笔者主编教材&#xff08;图0所示&#xff09;的电子版&#xff0c;依托简易的元器件和仪表安排了30多个实验&#xff0c;主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】&#xff0c;精心设计的【实验步骤】&#xff0c;全面丰富的【思考习…...

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数据库中主要分为以下几种类型&#xff1a; 范围分区&#xff08;Range Partitioning&#xff09;列表分区&#xff08;List Partitioning&#xff09;哈希分区&#xff08;Hash Partitioning&#xff09;组合分区&#xff08;Composite Partitioning&#xff0…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...

ffmpeg(三):处理原始数据命令

FFmpeg 可以直接处理原始音频和视频数据&#xff08;Raw PCM、YUV 等&#xff09;&#xff0c;常见场景包括&#xff1a; 将原始 YUV 图像编码为 H.264 视频将 PCM 音频编码为 AAC 或 MP3对原始音视频数据进行封装&#xff08;如封装为 MP4、TS&#xff09; 处理原始 YUV 视频…...

IP选择注意事项

IP选择注意事项 MTP、FTP、EFUSE、EMEMORY选择时&#xff0c;需要考虑以下参数&#xff0c;然后确定后选择IP。 容量工作电压范围温度范围擦除、烧写速度/耗时读取所有bit的时间待机功耗擦写、烧写功耗面积所需要的mask layer...