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

MHA实现mysql数据库高可用

目录

MHA原理

MHA工具包

MHA实现mysql高可用实战


MHA原理

①MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events)

②识别含有最新更新的slave

③应用差异的中继日志(relay log)到其他的slave

④应用从master保存的二进制日志事件(binlog events)

⑤提升一个slave为新的master

⑥使其他的slave连接新的master进行复制

MHA工具包

MHA软件由两部分组成,Manager工具包和Node工具包

①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信息
masterha_stop  --conf=app1.cnf 停止MHA
masterha_secondary_check 两个或多个网络线路检查MySQL主服务器的可用

②Node工具包:这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

save_binary_logs     #保存和复制master的二进制日志
apply_diff_relay_logs   #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog   #去除不必要的ROLLBACK事件(MHA已不再使用此工具)
purge_relay_logs #清除中继日志(不会阻塞SQL线程)

③MHA配置文件:

global配置,为各application提供默认配置,默认文件路径 /etc/masterha_default.cnf
application配置:为每个主从复制集群

MHA实现mysql高可用实战

①实验环境:

MHA服务器:192.168.30.14
master:   192.168.30.11
slave1:   192.168.30.12
slave2:   192.168.30.13

②首先将MHA客户端安装包(node包)、服务器安装包(manger包)及master_ip_failover脚本上传到主MHA服务器,master和slave服务器只需要上传客户端安装包(node包),上传到root用户家目录下。本人博客资源中(MHA高可用实战部署包)

③安装MHA

MHA:
yum install epel-release.noarch -y
#有依赖性用yum安装需要先安装epel源
yum -y install mha4mysql-*.rpm
#安装MHA
Master和2个slave:
yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
#安装MHA

④MHA配置免密登录建立mha 文件夹 和配置文件

ssh-keygen 
#生成秘钥,4个回车
ssh-copy-id 127.0.0.1
#自己和自己实现免密钥登录
rsync -a .ssh   192.168.30.11:/root/
rsync -a .ssh   192.168.30.12:/root/
rsync -a .ssh   192.168.30.13:/root/
#将秘钥传给所有服务器,-a表示保留权限,rsync可以理解为scp
mkdir /etc/mastermha
#创建mha文件夹
vim /etc/mastermha/app1.cnf
#配置app1.cnf文件,内容全部删除复制以下内容
[server default]
user=mhauser
password=Admin@123
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=test
repl_password=Admin@123
ping_interval=1
master_ip_failover_script=/usr/local/bin/master_ip_failover
#report_script=/usr/local/bin/sendmail.sh     可以不加
check_repl_delay=0
master_binlog_dir=/data/mysql/
[server1]
hostname=192.168.30.11
candidate_master=1
[server2]
hostname=192.168.30.12
candidate_master=1
[server3]
hostname=192.168.30.13
#注意将3个server改为自己的地址,1为主2位备用主,3为从。保存退出
vim   master_ip_failover 
#修改mha脚本,只需要将拷贝的脚本此2行修改即可,其他无须操作
my $vip = '192.168.30.188/24';    
#设置自己网段的Virtual IP  
my $gateway = '192.168.30.2';     
#自己网段的网关Gateway IP  保存退出
mv master_ip_failover  /usr/local/bin/
chmod +x /usr/local/bin/master_ip_failover 
#脚本文件文件剪切到/usr/local/bin/目录下并添加可执行权限使其可以执行
ifconfig ens33:1 192.168.91.188/24
#MHA配置虚拟ip,主挂掉后虚拟ip到备主上

⑤准备主从复制环境

Master执行:
vim  /etc/my.cnf
#[mysqld]此行下添加内容,开启主从复制和二进制日志
server_id=100
log-bin=/data/mysql/mysql-bin
skip_name_resolve=1
general_log 
#添加完毕保存退出
mkdir /data/mysql/   -p
chown mysql.mysql /data/ -R
systemctl restart mysqld
#创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
show master status;
#查看记录二进制日志位置,一会从配置使用
grant replication slave on *.* to test@'192.168.30.%' identified by 'Admin@123';
#建立复制用户
grant all on *.* to mhauser@'192.168.30.%' identified by 'Admin@123';
#建立mha管理账户2个slave执行:
vim  /etc/my.cnf
#[mysqld]此行下添加内容,开启主从复制和二进制日志
server_id=102
log-bin=/data/mysql/mysql-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
skip_name_resolve=1
general_log 
mkdir /data/mysql/   -p
chown mysql.mysql /data/ -R
systemctl restart mysqld
#创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
CHANGE MASTER TOMASTER_HOST='192.168.30.11',MASTER_USER='test',MASTER_PASSWORD='Admin@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;
#配置master信息
start slave
#开启主从复制
show slave status;
#查看配置是否成功

⑥MHA服务器上检查 mha 环境并启动mha

masterha_check_ssh --conf=/etc/mastermha/app1.cnf
#检查mha的ssh免密登录环境All SSH connection tests passed successfully
#结尾行出现此信息表示无问题
masterha_check_repl --conf=/etc/mastermha/app1.cnf
#检查mha主从环境
MySQL Replication Health is OK.
#结尾行出现此信息表示无问题
masterha_check_status --conf=/etc/mastermha/app1.cnf
#查看mha状态,默认是停止状态stop
masterha_manager --conf=/etc/mastermha/app1.cnf 
#开启mha,需要等待较长时间启动成功
masterha_check_status --conf=/etc/mastermha/app1.cnf 
#重新查看状态是running

⑦关闭master的mysql查看是否备1成为主且备2的slave信息变为备2的且备1的slave信息为空

master:
systemctl stop mysqld
#主关闭mysql
slave1:
mysql -uroot  -p'Admin@123'
#登录数据库
show  slave  status;
#slave信息为空
slave2:
mysql -uroot  -p'Admin@123'
#登录数据库
show  slave  status;
#slave信息中Master_Host:变为slave1的ip地址##注意就算重新开启master的数据库也不会成为主,需要手动添加为slave。

相关文章:

MHA实现mysql数据库高可用

目录 MHA原理 MHA工具包 MHA实现mysql高可用实战 MHA原理 ①MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events) ②识别含有最新更新的slave ③应用差异的中继日志&…...

leetcode每日一题:55. 跳跃游戏

系列:贪心算法 语言:java 题目来源:Leetcode55. 跳跃游戏 题目 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输…...

【C++】map 和 set

文章目录一、关联式容器与键值对1、关联式容器2、键值对 pair3、树形结构的关联式容器二、set1、set 的介绍2、set 的使用三、multiset四、map1、map 的介绍2、map 的使用五、multimap一、关联式容器与键值对 1、关联式容器 在C初阶的时候,我们已经接触了 STL 中的…...

基于SpringBoot的酒店管理系统

系统环境 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/i…...

JAVA框架知识整理

框架知识整理 SpringBoot、SpringMVC、Spring的区别和他们的作用? SpringBoot是一个微服务框架,其简化了Spring应用的创建、运行、测试、部署。使开发人员无需过多的关注XML配置。里面整合了许多框架例如SpringMVC、Spring Security和Spring Data JPA。…...

运算放大器:电压比较器

目录一、单限电压比较器二、滞回电压比较器三、窗口电压比较器最近在学习电机控制,遇到了与运算放大电路相关的知识,然而太久没有接触模拟电路,对该知识已经淡忘了,及时温故而知新,做好笔记,若有错误、不足…...

Linux的基础知识

根目录和家目录根目录:是Linux中最底层的目录,用"/"表示家目录:当前用户所在的路径,用“~”表示,root用户的家目录和普通用户的家目录不一样,普通用户的家目录在/home路径下,每一个用…...

【JavaEE】 IntelliJ IDEA 2022.2最新版Tomcat导入依赖详细教程全解及创建第一个Servlet程序

目录 一、软件资源 二、放置settings.xml文件 三、创建项目 四、引入依赖 ​五、创建目录 六、编写代码 写在前面:☞What is Servlet? Servlet其实是一种实现动态页面的技术。是一组由Tomcat提供给程序员的API(应用程序编程接口)…...

常见的卷积神经网络结构——分类、检测和分割

本文持续更新~~ 本文整理了近些年来常见的卷积神经网络结构,涵盖了计算机视觉领域的几大基本任务:分类任务、检测任务和分割任务。对于较复杂的网络,本文只会记录其中的核心模块以及重要的网络设计思想,并不会记录完整的网络结构。…...

20230323英语学习

Why Can You “Hear the Ocean” in Seashells? 为啥能在贝壳里“听见海的声音”? We’re told a number of stories as kids. One of the more harmless of these little lies is the one about seashells.You know the one: hold up a seashell to your ear, an…...

【粉丝投稿】上海某大厂的面试题,岗位是测开(25K*16)

简单介绍一句,大专出身,三年经验。跳了四次槽,面试了无数次,现在把自己的面试经验整理出来分享给大家,堪称必杀技! 1,一切从实际出发,对实际工作进行适当修饰 2,不会的简…...

shell简单使用介绍

脚本的基本元素声明,在解释并执行当前脚本文件中的语句之前,需要声明使用的命令解释器#一般写的解释器为 #!/bin/bash这里的#不再是注释了,而是必要的声明命令,也就是需要执行的语句注释,对代码进行解释说明分为单行注…...

RK3568平台开发系列讲解(调试篇)内核函数调用堆栈打印方法汇总

🚀返回专栏总目录 文章目录 一、dump_stack 函数二、WARN_ON(condition)函数三、BUG_ON (condition)函数四、panic (fmt...)函数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对驱动调试方法进行汇总学习。 一、dump_stack 函数 dump_stack 作用:打印内核调…...

一次内存泄露排查

前因: 因为测试 长时间压测导致 接口反应越来越慢,甚至 导致服务器 崩溃 排查过程 1、top 查看是 哪个进程 占用 内存过高 2、根据 进程 id 去查找 具体是哪个 程序的问题 ps -ef| grep 41356 可以看到 具体的 容器位置 排查该进程 对象存活 状态…...

「Mac安装ps」Adobo Photoshop 2023 下载安装详情教程,支持 AI 插件的 24 版 Photoshop

前言 Adobo Photoshop 2023 已推出,由于目前AI人工智能技术火爆,而很多的 AI 插件最低也需要24版的 photoshop ,所以这里我遍搜集并整理了此新版本的 photoshop 安装使用教程,后续也将提供 AI 插件的下载安装教程 安装文件下载 …...

Redis单线程还是多线程?IO多路复用原理

目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、Redis6.0引入多线程四、Redis主线程和IO线程是如何完成请求的?1、服务端和客户端建立socket连接2、IO线程读取并解析请求3、主线程执行请求命令4、IO线程会写回socket和主线程清…...

小菜鸟Python历险记:(第五集)

今天写的文章是记录我从零开始学习Python的全过程。在Python中对方法进行备注的时候,往往都是写在方法中的第一行所在位置。在书写注释以后,在调用方法的时候,鼠标点击方法会有一个浮动的提示显示备注内容。具体如下图所示:注释的…...

【思维模型】五分钟了解<复利思维>,为何学习复利思维?什么是复利思维?如何应用复利思维?

【思维模型】五分钟了解<复利思维>,为何学习复利思维?什么是复利思维?如何应用复利思维?1. 为何学习复利思维?2. 什么是复利思维?3. 如何应用复利思维?4. 小结参考&#…...

Vue.js语法详解:从入门到精通

Vue.js是一个流行的JavaScript框架,用于构建用户界面。它的核心特性包括数据双向绑定、组件化架构、虚拟DOM和响应式系统等。在本文中,我们将深入探讨Vue.js的语法,帮助读者更好地理解和应用Vue.js。1.模板语法Vue.js的模板语法采用了类似HTM…...

程序员的代码行数越少越好?

有些人可能会认为,应用程序中的代码行越少,就越容易阅读。这句话只有部分正确,我认为代码可读性的度量标准包括:代码应具备一致性代码应具备自我描述性代码应具备良好的文档代码应使用稳定的现代功能代码不应过于复杂代码的性能不…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

如何为服务器生成TLS证书

TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...