当前位置: 首页 > 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…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 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所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

轻量级Docker管理工具Docker Switchboard

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

【java面试】微服务篇

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