数据库备份与恢复--06---MySQL集群高可用架构之MHA

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • MySQL集群高可用架构之MHA
    • 1.什么是MHA
        • MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下==故障切换和主从复制的软件== ,mha用于==解决mysql的单点故障问题==;
    • 2.MHA提供了什么功能:
    • 3. MHA 的组成
    • 4. MHA工作原理
    • 5.MHA故障转移过程:
  • 案例1


MySQL集群高可用架构之MHA

1.什么是MHA

MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件 ,mha用于解决mysql的单点故障问题
  • 出现故障时,mha能在0~30秒内自动完成故障切换;
  • 并且能在故障切换过程中,最大程度保证数据的一致性
  • 从而达到高可用

MHA的架构图如下:与MMM相似

在这里插入图片描述

2.MHA提供了什么功能:

  1. 可以监控Master节点是否可用
  2. 当Master不可用时,能在多个Slave中选举出新的Master
  3. 提供了主从切换和故障转移功能,MHA会尝试在宕机的Master上保存binlog,在最大程度上保证事务不丢失。但如果是Master所在的服务器已经无法访问,或硬件层面出现了问题,则无法成功保存binlog
  4. MHA可以与半同步复制结合,避免从库之间出现数据不一致的情况
  5. 支持MySQL基于GTID和基于日志点的两种复制方式

3. MHA 的组成

MHA由两部分组成: MHAManager (管理节点) 和 MHA Node (数据库节点),

MHA Node(数据节点)

  • MHA Node 运行在每台 MySQL 服务器上。

MHA Manager(管理节点)

  • MHA Manager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上。

  • MHA Manager 会定时探测集群中的 master 节点。

  • 当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave
    重新指向新的master。整个故障转移过程对应用程序完全透明。

4. MHA工作原理

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群必须最少有3台数据库服务器,一主二从,即一台充当Master,台充当备用Master,另一台充当从库。

  1. MHA Node 运行在每台 MySQL 服务器上
  2. MHAManager 会定时探测集群中的master 节点
  3. 当master 出现故障时,它可以自动将最新数据的slave 提升为新的master
  4. 然后将所有其他的slave 重新指向新的master,VIP自动漂移到新的master。

整个故障转移过程对应用程序完全透明。

5.MHA故障转移过程:

  1. 尝试使用ssh登录到宕机崩溃的Master节点上保存二进制日志事件(binlog events);
  2. 从多个Slave中识别含有最新更新的Slave,将其作为备选的Master;
  3. 然后基于该Slave同步差异的中继日志(relaylog)到其他的Slave上;
  4. 接着同步从原Master上保存的二进制日志事件(binlog events);
  5. 将备选的Master提升为新的Master;
  6. 使其他的Slave连接新的Master进行复制;
  7. 在新的Master启动vip地址,保证前端请求可以发送到新的Master。

案例1

现模拟进行安装配置,略过Mysql相关安装步骤

  • 设计为一主双从一监控四机结构,分别为 Master1 Slave1 Slave2 Monitor
1.新增用户所有库中新增同一用户
	create user '${replicationUsername}'@'%' identified with mysql_native_password by '${replicationPassword}'
	grant replication slave on *.* to   '${replicationUsername}'@'%' 
	flush privileges
2.修改配置文件
	Master1:
		server_id=101
		log_bin=mysql_bin
		relay_log=relay_bin
		log_slave_updates=on
		gtid_mode=ON  #开启GTID模式
		enforce_gtid_consistency=1
	Slave1:
		...其他相同...
		server_id=102
	Slave2:
		...其他相同...
		server_id=103
3.主从设置
	Slave1
	change master to master_host=${master1IP},master_port=${masterPort},master_user=${replicationUsername},master_password=${replicationPassword}
	start slave
	Slave2
	change master to master_host=${master1IP},master_port=${masterPort},master_user=${replicationUsername},master_password=${replicationPassword}
	start slave
4.配置ssh免密登录
	ssh-keygen
	ssh-copy-id -i ${otherMachine}
5.节点安装Mha包(mha4mysql-node-0.58-0.el7.centos.noarch.rpm)
	yum -y install epel-release
	yum -y install perl-DBD-MySQL perl-DBI ncftp //安装依赖
	5.1监控节点需安装mha4mysql-manager包
	同样用yum安装依赖包 有:perl-Config-Tiny perl-Time-Hires perl-Parallel-ForkManager perl-Log-Dispatch perl-DBD-MySQL ncftp
6.配置MHAMonitor节点
	user=${mhaUsername}
	password=${mhaPassword}
	指定工作目录
	manager_workdir=/home/mysql_mha
	日志存放路径
	manager_log=/home/mysql_mha/manager.log
	远程节点工作目录
	remote_workdir=/home/mysql_mha
	ssh登录用户名
	ssh_user=root
	repl_user=${replicationUsername}
	repl_password=${replicationPassword}
	检查时间间隔
	ping_interval=1
	指定MasterBinlog目录
	master_binlog_dir=/var/lib/mysql
	指定飘逸脚本
	master_ip_failover_script=/usr/bin/master_ip_failover
	指定作用二次检查脚本
	secondary_check_script=/user/bin/masterha_secondary_check -s ${masterIp} -s ${slave1Ip} -s ${slave2Ip}
	配置节点信息
	[server1]
	hostname=${masterIp}
	candidate_master=1#运行选举
	[server2]
	hostname=${slave1Ip}
	candidate_master=1#运行选举
	[server3]
	hostname=${slave2Ip}
	candidate_master=1#运行选举
7.因VIP漂移脚本默认不提供,需手动改
	use strict;
	use warnings FATAL =>'all';
	use Getopt::Long;
	my($command,$orig_master_host,$orig_master_ip,$ssh_user,$orig_master_port,$new_master_host,$new_master_ip,$new_master_port,$orig_master_ssh_port,$new_master_ssh_port,$new_master_user,$new_master_password
	);
	my $vip='${IP}/24'; #设置网段
	my $key='1';
	#网卡名需根据实际 以下采用 networkName
	my $ssh_start_vip ="sudo /sbin/ifconfig newworkName:$key $vip";
	my $ssh_stop_vip ="sudo /sbin/ifconfig newworkName:$key down";
	my $ssh_Bcast_arp ="sudo /sbin/arping -I bond0 -c 3 -A $vip";
	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,
	'orig_master_ssh_port=i' =>\$orig_master_ssh_port,
	'new_master_ip=s' =>\$new_master_ip,
	'new_master_port=1' =>\$new_master_port,
	'new_master_ssh_port' =>\$new_master_ssh_port,
	'new_master_user' =>\$new_master_user,
	'new_master_password' =>\$new_master_password
	);
	exit &main();
sub main{
	$ssh_user=defined $ssh_user?$ssh_user:${sshUserName};
	print "\n\nIN SCRIPT TEST====$ssh_user|$ssh_top_vip==$ssh_user|$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;
	
	
	}elseif($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 \" `

}
sub stop_vip(){
		`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \" `

}
sub start_arp(){
		`ssh $ssh_user\@$new_master_host \" $ssh_Bcast_arp\" `

}
sub usage(){
		print 
		"Usage:master_ip_failover --command=start|stop|stopssh|status --ssh_user=user --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";
		

}
}
-----------end---------------
chmod 设置权限
新建配置文件中用于监控的用户
	create user '${mhaUsername}'@'%' identified with mysql_native_password by '${mhaPassword}'
	grant all privileges  on *.* to   '${mhaUsername}'@'%' 
	flush privileges
8.检查链路是否正常并启动
	masterha_check_ssh --conf=/${配置文件}
	masterha_check_repl --conf=/${配置文件}
	
	masterha_manager --conf=/${配置文件}
9.Master手动设置虚拟IP
	ifconfig ${networkName}:${key} ${Vip}/24
10.自我测试
11.优缺点
	优
	使用Perl脚本语言开发并且完全开源,开发者可以根据自己的需求进行二次开发
	能够支持基于GTID和基于日志点的复制模式
	MHA在进行故障转移时更不易产生数据丢失
	在一个监控节点上可以监控多个Replication集群
	缺
	MHA默认不提供虚拟IP功能,需要自行编写脚本或利用第三方工具来实现虚拟IP的配置
	MHA启动后只会对Master进行监控,不会对Slave进行监控,也无法监控复制链路的情况
	集群环境需要能够通过ssh免密登录,存在一定的安全隐患
	MHA没有提供对Slave的读负载均衡功能,需要通过第三方工具来实现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024最新洗地机选购攻略!分享四款热门洗地机推荐

洗地机可以说是现代家庭生活中一大利器,它能帮我们快速搞定家里的地板清洁工作,省去了自己清洗滚刷的麻烦。不过,当下市面上洗地机品牌种类繁多,价格区间也相差悬殊,要选择一款性价比较高、使用体验较好的洗地机产品&a…

太阳能无人机的多元化应用

随着新能源技术的不断发展和成熟,太阳能在无人机的应用技术已经成熟。太阳能无人机得到了量产和广泛的应用。传统无人机相比,太阳能无人机无需燃油,运行费用低廉,搭载多种高科技设备,能够高效、多元化地采集和分析各类…

AI算法-高数3-导数-求导法则

P16 2.2 求导法则,宋浩老师:2.2 求导法则_哔哩哔哩_bilibili 反函数求导法则: 复合函数求导:剥洋葱法。

蜂群优化算法(bee colony optimization algorithm)

​注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 算法引言 自然界的启发:BSO算法的灵感来自于蜜蜂在自然界中的觅食行为。在自然界中,蜜蜂需要找到花蜜来生存。当一只蜜…

在做题中学习(53):寻找旋转数组中的最小值

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode) 解法:O(logn)->很可能就是二分查找 思路:再看看题目要求,可以画出旋转之后数组中元素的大小关系: 首先,数组是具有二段性的(适配二分查…

车载测试系列:UDS诊断服务

UDS诊断服务介绍 UDS(Unified Diagnostic Services,统一诊断服务)诊断协议诊断测试仪和ECU之间一种通信协议,在ISO14229中规定。UDS被用在几乎所有由OEM一级供应商所制造的新ECU。 诊断工具与车内的所有ECU均有连接,…

IO 5.10

在一个进程中,创建一个子线程。 主线程负责:向文件中写入数据 子线程负责:从文件中读取数据 要求使用线程的同步逻辑,保证一定在主线程向文件中写入数据成功之后,子线程才开始运行,去读取文件中的数据#incl…

bash: docker-compose: 未找到命令

bash: docker-compose: 未找到命令 在一台新的服务器上使用 docker-compose 命令时,报错说 docker-compose 命令找不到,在网上试了一些安装方法,良莠不齐,所以在这块整理一下,如何正确快速的安装 docker-compose cd…

复习了好久的软考中项,现在上半年不考了,该怎么办?

如果有更多学习时间的话,可以考虑报考高级职称,因为高级和中级职称的很多知识点有重叠,只需要再复习一下相关论文就可以了。 从2024年下半年开始,集成考试将采用最新版教材和大纲,与高级职称的新版教材内容相似度很高…

【计算机毕业设计】springboot二手家电管理平台

时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,二手家电管理平台当然不能排除在外。二手家电管理平台是在实际应用和 软件工程的开发原理之上,运用java语言以及前台VUE框架&#xf…

JMeter安装及使用

JMeter安装及使用 1.JMete安装 1.1 本地需要有Java8的环境 1.2 下载链接 JMeter官网下载地址 1.3 解压即安装 【!!命令窗口不可关闭】 2.更换语言 方法1 》Options》Choose Language》Chinese Simplified 方法2 解压的文件》bin》jmeter.propert…

盘点2024年4月Sui生态发展,了解Sui近期成长历程!

2024年4月是Sui的活动月,10–11日聚焦全世界目光的Sui Basecamp会议如约而至,来自65个国家的超过1100人参加了这场在巴黎举办的Sui全球性活动。21日,Sui首届全球黑客松正式开放注册。同时,20日-28日,七天四场大陆地区重…

通用产品发布解决方案(家居分类表设计以及renren代码生成器的使用)

文章目录 1.商品分类表设计1.需求分析2.数据库表设计1.数据库sunliving_commodity,商品分类表commodity_category2.测试数据 2.代码生成器生成crud1.解压到sunliving下并聚合管理1.解压2.修改sunliving的pom.xml进行聚合管理3.刷新maven报错 parent.relativePath4.将…

支付宝——图技术在金融反欺诈中的应用

目录 图在金融反欺诈中的应用背景 图驱动的感知研判决策处置 图在金融反欺诈中的演进 总结和展望

06-xss攻防于绕过

xss的攻击于防御 攻击的利用方式 1)获取cookie,实现越权,如果是获取到网站管理员的cookie,也可以叫提权。注意尽量尽快退出账号,删除session,让session失效 2)钓鱼网站,模拟真实的…

每日两题 / 226. 翻转二叉树 98. 验证二叉搜索树(LeetCode热题100)

226. 翻转二叉树 - 力扣(LeetCode) 以后续遍历的方式交换当前节点的左右指针 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), ri…

Visual Studio的使用方法

目录 1. 下载软件 2. 软件安装 3. 软件使用 4. VS工具的字体背景美化 5. 程序调试 1. 下载软件 官网地址:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com) 2. 软件安装 1.选中vs_Professional,鼠标右击选择“以管理员身份…

【CCF-CSP】202403-3 化学方程式配平

输入格式: 从标准输入读入数据。 输入的第一行包含一个正整数 n,表示需要判断的化学方程式的个数。 接下来的 n 行,每行描述了一个需要被配平的化学方程式。包含空格分隔的一个正整数和全部涉及物质的化学式。其中,正整数 m 表…

洗地机挑选有哪些要点?附618热门洗地机推荐

随着科技的不断发展,洗地机已经成为了人们家庭里必备的清洁家电了,它可以让我们高效的完成深度清洁的工作,让我们从繁重的家务劳动中解放出来,享受更轻松舒适的生活。那么我们如何在众多洗地机品牌中找到适合自己的产品呢&#xf…

win10无法被远程桌面连接,Win10系统无法被远程桌面连接的原因有哪些

win10无法被远程桌面连接,Win10系统无法被远程桌面连接的原因有哪些? 先,我们需要明确Win10系统无法被远程桌面连接的可能原因。其中,最常见的原因包括:远程桌面功能未启用、网络连接问题、防火墙或安全软件设置不当、…
最新文章