MySQL高可用MHA

目录

一、MHA概述

1.MHA是什么

2.MHA的组成 

3.MHA特点 

4.MHA工作原理 

二、MySQL部署MHA 

1.配置主从复制

2.配置MHA高可用

2.1所有服务器安装MHA依赖环境

2.2所有服务器上安装node组件

2.3在MHA manager节点上安装manager组件

2.4在所有服务器上配置无密码认证

2.5在manager节点上配置MHA

2.6在Master节点服务器手动开启虚拟IP 

2.7在 manager 节点上测试 ssh 无密码认证 

2.8在manager节点上测试mysql主从连接

2.9在manager节点上启动MHA并查看状态以及日志

2.10故障模拟 

2.11故障修复 


一、MHA概述

1.MHA是什么

MHA(Master High Availability)是用于MySQL高可用性环境的一个软件解决方案,旨在解决单点故障问题。它能够在0-30秒内自动完成故障切换,并在故障转移过程中最大程度地保障数据一致性

2.MHA的组成 

MHA Node(数据节点):每个MySQL服务器上运行的组件
MHA Manager(管理节点):可以独立部署或在某个slave节点上运行,负责管理多个master-slave集群,定期监测master节点的状态,并在故障时自动提升slave为新的master

3.MHA特点 

自动故障切换:在故障发生时,尽量从宕机的主服务器保存二进制日志,降低数据丢失风险
半同步复制:确保只有在最新的slave接收到二进制日志后,才会进行故障切换,以保持数据一致性
支持一主多从架构:至少需要三台服务器(一个master和两个slave)

4.MHA工作原理 

1. 监测主节点状态:
MHA Manager定期检查主节点的健康状态,以确定其是否正常运行

2. 检测故障:
当主节点出现故障时,MHA Manager会自动识别并确认故障

3. 保存二进制日志:
在故障发生时,MHA尝试从宕机的主节点保存最新的二进制日志事件,以尽量减少数据丢失

4. 确定最新的从节点:
MHA Manager会扫描从节点,找出接收了最新数据的从节点

5. 提升新的主节点:
将选定的最新从节点提升为新的主节点,确保其成为新的数据源

6. 更新其他从节点:
MHA会将其他从节点指向新的主节点,并应用其上保存的二进制日志事件和中继日志,以保持数据一致性

7. 透明切换:
整个故障转移过程对应用程序是透明的,最小化业务中断

二、MySQL部署MHA 

服务器名IP地址安装的服务
MHA manager 节点服务器172.16.58.40安装MHA node 和 manager 组件
Master 节点服务器172.16.58.10安装mysql5.7、MHA node 组件
Slave01 节点服务器172.16.58.20安装mysql5.7、MHA node 组件
Slave02 节点服务器172.16.58.30安装mysql5.7、MHA node 组件

1.配置主从复制

主从复制的步骤可参考下面的博客连接(所需要的机器有Master、Slave01、Slave02)

MySQL主从复制、读写分离-CSDN博客

2.配置MHA高可用

2.1所有服务器安装MHA依赖环境

yum install epel-release --nogpgcheck -yyum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

2.2所有服务器上安装node组件

在所有服务器上必须先安装node组件,最后在 MHA-manager 节点上安装 manager 组件,因为 manager 依赖 node 组件cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make installnode 组件安装后也会在/usr/local/bin 下面会生成几个脚本(这些工具通常由 MHAManager 的脚本触发,无需人为操作)主要如下:
save_binary_logs      #保存和复制 master 的二进制日志
apply_diff_relay_logs #识别差异的中继日志事件并将其差异的事件应用于其他的 slave
filter_mysqlbinlog    #去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)
purge_relay_logs      #清除中继日志(不会阻塞 SQL 线程)

2.3在MHA manager节点上安装manager组件

cd /opt
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make installmanager 组件安装后在/usr/local/bin 下面会生成几个工具,主要包括以下几个:
masterha_check_ssh      #检查 MHA 的 SSH 配置状况
masterha_check_repl     #检查 MySQL 复制状况
masterha_manger         #启动 manager的脚本
masterha_check_status   #检测当前 MHA 运行状态
masterha_master_monitor #检测 master 是否宕机
masterha_master_switch  #控制故障转移(自动或者 手动)
masterha_conf_host      #添加或删除配置的 server 信息
masterha_stop           #关闭manager

2.4在所有服务器上配置无密码认证

(1)在 manager 节点上配置到所有数据库节点的无密码认证
ssh-keygen -t rsa 				#一路按回车键
ssh-copy-id 172.16.58.10
ssh-copy-id 172.16.58.20
ssh-copy-id 172.16.58.30(2)在 master 上配置到数据库节点 slave1 和 slave2 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 172.16.58.20
ssh-copy-id 172.16.58.30(3)在 slave1 上配置到数据库节点 master 和 slave2 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 172.16.58.10
ssh-copy-id 172.16.58.20(4)在 slave2 上配置到数据库节点 master 和 slave1 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 172.16.58.10
ssh-copy-id 172.16.58.30

2.5在manager节点上配置MHA

(1)在 manager 节点上复制相关脚本到/usr/local/bin 目录
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin拷贝后会有四个执行文件
ll /usr/local/bin/scripts/master_ip_failover  		#自动切换时 VIP 管理的脚本
master_ip_online_change 	#在线切换时 vip 的管理
power_manager 				#故障发生后关闭主机的脚本
send_report 				#因故障切换后发送报警的脚本
(2)复制上述的自动切换时VIP管理的脚本到/usr/local/bin目录,这里使用master_ip_failover脚本来管理 VIP 和故障切换
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
(3)修改内容如下:(删除原有所有内容,直接复制并修改vip相关参数)
vim /usr/local/bin/master_ip_failover#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';use Getopt::Long;my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);my $vip = '172.16.58.100';			#指定vip的地址
my $brdc = '172.16.58.255';			#指定vip的广播地址
my $ifdev = 'ens33';				#指定vip绑定的网卡
my $key = '1';						#指定vip绑定的虚拟网卡序列号
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";		
#代表此变量值为ifconfig ens33:1 172.16.58.100
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";		
#代表此变量值为ifconfig ens33:1 172.16.58.100 down
my $exit_code = 0;											#指定退出状态码为0
#my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
#my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);exit &main();sub main {print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";if ( $command eq "stop" || $command eq "stopssh" ) {my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
exit 0;
}
else {
&usage();
exit 1;
}
}
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
## A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}sub usage {
print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}
(4)创建 MHA 软件目录并拷贝配置文件,这里使用app1.cnf配置文件来管理mysql节点服务器
mkdir /etc/masterha
cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterhavim /etc/masterha/app1.cnf			#删除原有内容,直接复制并修改节点服务器的IP地址
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123456
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 172.16.58.20 -s 172.16.58.20
shutdown_script=""
ssh_user=root
user=mha[server1]
hostname=172.16.58.10
port=3306[server2]
candidate_master=1
check_repl_delay=0
hostname=172.16.58.20
port=3306[server3]
hostname=172.16.58.30
port=3306

2.6在Master节点服务器手动开启虚拟IP 

第一次配置需要手动开启虚拟IP
/sbin/ifconfig ens33:0 172.16.58.100/24

2.7在 manager 节点上测试 ssh 无密码认证 

masterha_check_ssh -conf=/etc/masterha/app1.cnf如果正常最后会输出 successfully

2.8在manager节点上测试mysql主从连接

masterha_check_repl -conf=/etc/masterha/app1.cnf最后出现 MySQL Replication Health is OK 字样说明正常

2.9在manager节点上启动MHA并查看状态以及日志

启动MHA
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &查看MHA状态
masterha_check_status --conf=/etc/masterha/app1.cnf查看MHA日志
cat /var/log/masterha/app1/manager.log | grep "current master"查看master的VIP地址172.16.58.100是否存在
ifconfig若要关闭manager服务,可以使用如下命令:
masterha_stop --conf=/etc/masterha/app1.cnf
或者可以直接采用 kill 进程 ID 的方式关闭

2.10故障模拟 

在manager节点上监控观察日志记录
tail -f /var/log/masterha/app1/manager.log在Master节点上停止mysql服务
systemctl stop mysqld正常自动切换一次后,MHA 进程会退出。HMA 会自动修改 app1.cnf 文件内容,将宕机的 master 节点删除。查看 slave1 是否接管 VIP
ifconfig

2.11故障修复 

(1)修复mysql(在master节点上重启mysql服务)
systemctl restart mysqld(2)修复主从
在现主库服务器slave01查看二进制文件和同步点
show master status;在原主库服务器master执行同步操作
change master to master_host='172.16.58.20',master_user='myslave',master_password='123',master_log_file='master-bin.000001',master_log_pos=1745;start slave;(3)在manager节点上修改配置文件app1.cnf(再把这个记录添加进去,因为它检测掉失效时候会自动消失)
vim /etc/masterha/app1.cnf
......
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 172.16.58.20 -s 172.16.58.30
......
[server1]
hostname=172.16.58.10
port=3306[server2]
candidate_master=1
check_repl_delay=0
hostname=172.16.58.20
port=3306[server3]
hostname=172.16.58.30
port=3306(4)在manager节点上启动MHA
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/446.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

聚类算法综述

摘要 聚类算法旨在根据数据中的固有模式和相似性将数据组织成组或簇。它们在当今生活中扮演着重要角色&#xff0c;例如在市场营销和电子商务、医疗保健、数据组织和分析以及社交媒体中。现有众多聚类算法&#xff0c;并且不断有新的算法被引入。每个算法都有其自身的优点和缺…

【网络监控加速设备】国产化一站式高性能数据处理平台(海光CPU+复旦微FPGA)

随着网络流量的飞速增长&#xff0c;数据的监控与管理需求日益加剧。针对这一痛点&#xff0c;一款集协议检测、数据监测、报文转发和结果展示于一体的网络监控加速设备&#xff0c;设备百分之百国产化也体现了完全自主可控。设备不仅具备丰富的网络监控功能&#xff0c;还支持…

确保企业架构与业务的一致性与合规性:数字化转型中的关键要素与战略实施

在现代企业的数字化转型过程中&#xff0c;确保企业架构&#xff08;Enterprise Architecture, EA&#xff09;与企业业务的紧密一致性与合规性至关重要。无论是在战略层面还是运营层面&#xff0c;EA都为企业的未来发展提供了清晰的蓝图&#xff0c;确保企业在应对复杂的业务环…

指数分布的原理和应用

本文介绍指数分布&#xff0c;及其推导原理。 Ref: 指数分布 开始之前&#xff0c;先看个概率密度函数的小问题&#xff1a; 问题描述&#xff1a;你于上午10点到达车站&#xff0c;车在10点到10:30 之间到达的时刻 X 的概率密度函数如图&#xff1a; 则使用分段积分&#xff0…

HTML 基础标签——链接标签 <a> 和 <iframe>

文章目录 1. `<a>` 标签属性详细说明示例2. `<iframe>` 标签属性详细说明示例注意事项总结链接标签在HTML中是实现网页导航的重要工具,允许用户从一个页面跳转到另一个页面或嵌入外部内容。主要的链接标签包括 <a> 标签和<iframe> 标签。本文将深入探…

Windows部署rabbitmq

本次安装环境&#xff1a; 系统&#xff1a;Windows 11 软件建议版本&#xff1a; erlang OPT 26.0.2rabbitmq 3.12.4 一、下载 1.1 下载erlang 官网下载地址&#xff1a; 1.2 下载rabbitmq 官网下载地址&#xff1a; 建议使用解压版&#xff0c;安装版可能会在安装软件…

自适应对话式团队构建,提升语言模型代理的复杂任务解决能力

人工智能咨询培训老师叶梓 转载标明出处 如何有效利用多个大模型&#xff08;LLM&#xff09;代理解决复杂任务一直是一个研究热点。由美国南加州大学、宾夕法尼亚州立大学、华盛顿大学、早稻田大学和谷歌DeepMind的研究人员联合提出了一种新的解决方案——自适应团队构建&…

“游戏人”也能拿诺贝尔奖!

“游戏人”也能拿诺贝尔奖&#xff01; 点击蓝链领取游戏开发教程 2024年度的诺贝尔奖&#xff0c;堪称AI深刻影响传统科学领域的一次生动展现。在这一年里&#xff0c;备受瞩目的诺贝尔物理学奖与诺贝尔化学奖两大核心奖项&#xff0c;均颁给了在AI领域做出杰出贡献的研究者…

获取环境变量 getenv小心有坑!

一、背景 在工作中&#xff0c;所做的项目需要涉及两个不同语言( P/Invoke)的信息传递。最后选定了一种环境变量的传递方式&#xff0c;但这也遇到了getenv带来的大坑&#xff01; 1.1 问题现象 我们在C#的exe主流程中通过DllImport&#xff0c;对环境变量进行了设置。随后我…

告别登录,这款插件直接复制CSDN内容,真棒!

前言 我们在开发过程中&#xff0c;肯定会遇到这样或者那样的问题&#xff0c;这时候&#xff0c;我们想到最多的就是用搜索引擎去搜索各种资料&#xff0c;查看各种博客。以前&#xff0c;查看博客是很方便的&#xff0c;不过后来&#xff0c;像CSDN的&#xff0c;就是必须要…

为Meta Spark准备3D模型

有许多工具可以帮助你为 Meta Spark Studio 创建 3D 对象&#xff0c;包括 Cinema4D、Blender 和 3ds Max。你还可以使用 Meta Spark Toolkit 优化 Blender 对象。 在本指南中&#xff0c;我们将介绍正确的设置&#xff0c;以便你可以成功地为 Meta Spark Studio 准备对象&…

poi处理excel文档时,与lombok的@Accessors(chain = true)注解冲突

poi在反射封装数据时会判断set方法的返回是不是Void&#xff0c;加上Accessors会造成NoSuchMethodException异常

bash: git: command not found

在windows上重新安装Git之后&#xff0c;遇到cmd可以使用git命令&#xff0c;但是git bash中使用的git命令的时候&#xff0c;会提示&#xff1a; $ git bash: git: command not found 解决办法 找到用户目录下的.bash_profile和.bashrc文件&#xff0c;编辑打开&#xff0c;找…

DFA算法实现敏感词过滤

DFA算法实现敏感词过滤 需求&#xff1a;检测一段文本中是否含有敏感词。 比如检测一段文本中是否含有&#xff1a;“滚蛋”&#xff0c;“滚蛋吧你”&#xff0c;“有病”&#xff0c; 可使用的方法有&#xff1a; 遍历敏感词&#xff0c;判断文本中是否含有这个敏感词。 …

Java 正则表达式一口气讲完!b( ̄▽ ̄)d

Java 正则表达式元字符 Java正则表达式教程 - Java正则表达式元字符 元字符是在Java正则表达式中具有特殊含义的字符。 Java中的正则表达式支持的元字符如下: ( ) [ ] { } \ ^ $ | ? * . < > - ! 字符类 元字符 [和] 指定正则表达式中的字符类。 字符类是一组字…

(实战)WebApi第10讲:Swagger配置、RESTful与路由重载

一、Swagger配置 1、导入SwashBuckle.AspNetCore包 2、在.NET Core 5框架里的startup.cs文件里配置swagger 3、在.NET Core 6框架里的Program.cs文件里配置swagger 二、RESTful风格&#xff1a;路由重载&#xff0c;HttpGet()括号中加参数 &#xff08;1&#xff09;原则&…

【进阶sql】复杂sql收集及解析【mysql】

开发时会出现&#xff0c;必须写一些较复杂sql的场景 可能是给会sql的客户 提供一些统计sql 或是临时需要统计数据信息但是 开发一个统计功能有来不及的情况 也可能是报表系统组件 只支持 sql统计的情况 特地记录下这些sql 作为积累 substring 截取查询出的字符串&#xff…

心情追忆-AI分析报错

之前我独自开发了一个名为“心情追忆”的小程序&#xff0c;旨在帮助用户记录日常的心情变化及重要时刻。 项目需求来源->设计->前端(小程序)->后端->部署均由我一人完成. 上线一个月. 通过群聊分享等. 用户量也有了100多人. 我希望持续发展 由于项目的开发与测试…

Leetcode21:合并两个有效链表

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示…

【Python · Pytorch】人工神经网络 ANN(中)

【Python Pytorch】人工神经网络 ANN&#xff08;中&#xff09; 6. 反向传播6.1 梯度下降法6.1.1 线搜索方法6.1.2 微分 & 导数6.1.3 偏导数6.1.4 Jacobian矩阵6.1.5 梯度 & 梯度下降法按维度介绍 6.1.6 面临挑战平原现象 & 振荡现象局部最小值鞍点梯度消失梯度爆…