搭建 MySQL MHA

搭建 MySQL MHA

  • 搭建 MySQL MHA
    • 实验拓扑图
    • 实验环境
    • 实验思路
      • MHA架构
      • 故障模拟
    • 实验部署
      • 数据库安装
      • 主从复制部署
        • 时间同步
        • 主服务器配置
        • 从服务器配置
        • 创建链接
      • MHA搭建
        • 安装依赖的环境
        • 安装 node 组件
        • 安装 manager 组件
        • 配置无密码认证
        • 在 manager 节点上配置 MHA
        • 管理 mysql 节点服务器
          • 创建相关目录
        • 编写配置文件
        • 手动开启虚拟IP
        • 测试 ssh 无密码认证及 MySQL主从连接情况
        • 启动 MHA
    • 故障模拟———— Master 节点意外故障
      • 停止 Master 节点MySQL服务
      • 查看 mysql2 是否接管 VIP
      • 修复故障
        • 启动原来的主节点
        • 修复数据
        • 在 manager 节点上修改配置文件
        • 对mysql1和mysql2 进行重启
        • 在 manager 节点上启动 MHA

搭建 MySQL MHA

实验拓扑图

在这里插入图片描述

实验环境

主机IP
Master主库服务器10.190.33.71
Slave从库服务器0110.190.33.72
Slave从库服务器0210.190.33.73
MHA Manager服务器10.190.33.74
Client10.190.33.75

实验思路

MHA架构

  1. 数据库安装
  2. 一主两从
  3. MHA搭建

故障模拟

  1. 主库失效
  2. 备选主库成为主库
  3. 原故障主库恢复重新加入到MHA成为从库

实验部署

数据库安装

MySQL安装教程

主从复制部署

时间同步

所有服务器均需要进行配置(仅以Master服务器举例)

yum install -y chrony

vim /etc/chrony.conf 
	#注释原有ntp服务器,添加阿里ntp服务源
	server ntp.aliyun.com iburst
		
systemctl restart chronyd

chronyc sources -v

systemctl enable --now chronyd

在这里插入图片描述
在这里插入图片描述

主服务器配置
vim /etc/my.cnf
	server-id=1
	log_bin = mysql-bin
	binlog_format = mixed
	log-slave-updates = true
	relay-log = relay-log-bin
	relay-log-index = slave-relay-bin.index	

systemctl restart mysqld
​

mysql -u root -pAdmin@123

grant replication slave on *.* to 'myslave'@'10.190.33.%' identified by 'Admin@123';

grant all privileges on *.* to 'manager'@'10.190.33.%' identified by 'Admin@123';

grant all privileges on *.* to 'manager'@'10.190.33.71' identified by 'Admin@123';

grant all privileges on *.* to 'manager'@'10.190.33.72' identified by 'Admin@123';

grant all privileges on *.* to 'manager'@'10.190.33.73' identified by 'Admin@123';

flush privileges;


show master status;

在这里插入图片描述
在这里插入图片描述

从服务器配置
vim /etc/my.cnf
	server-id = 2
	log_bin = mysql-bin
	binlog_format = mixed
	log-slave-updates = true
	relay-log = relay-log-bin
	relay-log-index = slave-relay-bin.index

systemctl restart mysqld

mysql -u root -pAdmin@123


grant replication slave on *.* to 'myslave'@'10.190.33.%' identified by 'Admin@123';

grant all privileges on *.* to 'manager'@'10.190.33.%' identified by 'Admin@123';

grant all privileges on *.* to 'manager'@'10.190.33.71' identified by 'Admin@123';

grant all privileges on *.* to 'manager'@'10.190.33.72' identified by 'Admin@123';

grant all privileges on *.* to 'manager'@'10.190.33.73' identified by 'Admin@123';

flush privileges;

change master to master_host='10.190.33.71',master_user='myslave',master_password='Admin@123',master_log_file='mysql-bin.000001',master_log_pos=3400;

start slave;

show slave status\G

set global read_only=1;

在这里插入图片描述
在这里插入图片描述

  • Slave1
    在这里插入图片描述
  • Slave2
    在这里插入图片描述
创建链接

所有的数据库服务器(仅以Master服务器举例)


ln -s /usr/local/mysql/bin/mysql /usr/sbin/

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

在这里插入图片描述

MHA搭建

安装依赖的环境

所有的服务器(仅以Master服务器举例)

yum install epel-release --nogpgcheck -y

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

在这里插入图片描述

安装 node 组件

所有的服务器(仅以Master服务器举例)

cd /opt

tar xf mha4mysql-node-0.57.tar.gz

cd mha4mysql-node-0.57

perl Makefile.PL

make && make install

在这里插入图片描述

安装 manager 组件

manager服务器

cd /opt

tar xf mha4mysql-manager-0.57.tar.gz

cd mha4mysql-manager-0.57

perl Makefile.PL

make && make install

在这里插入图片描述

配置无密码认证

所有的服务器

#manager节点上配置到所有数据库节点的无密码认证

ssh-keygen -t rsa
		
ssh-copy-id 10.190.33.71

ssh-copy-id 10.190.33.72

ssh-copy-id 10.190.33.73



#master节点上配置到数据库节点 slave1 和 slave2的无密码认证

ssh-keygen -t rsa
		
ssh-copy-id 10.190.33.72

ssh-copy-id 10.190.33.73


#slave1节点上配置到数据库节点 master和 slave2的无密码认证

ssh-keygen -t rsa
		
ssh-copy-id 10.190.33.71

ssh-copy-id 10.190.33.73


#slave2节点上配置到数据库节点 master和 slave1 的无密码认证

ssh-keygen -t rsa
		
ssh-copy-id 10.190.33.71

ssh-copy-id 10.190.33.72

  • manager

在这里插入图片描述

  • master

在这里插入图片描述

  • slave1

在这里插入图片描述

  • slave2

在这里插入图片描述

在 manager 节点上配置 MHA
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin

ll /usr/local/bin/scripts/



cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin


vim /usr/local/bin/master_ip_failover

	###删除所有后;拷贝前输入 :set paste 解决vim粘贴乱序问题
	
	#!/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 = '10.190.33.100';
	my $brdc = '10.190.33.255';
	my $ifdev = 'ens33';			##看下自己网卡是ens33则不用动,不是ens33就换成自己网卡名
	my $key = '1';
	my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
	my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
	my $exit_code = 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";
	}

在这里插入图片描述

在这里插入图片描述

管理 mysql 节点服务器
创建相关目录

所有的服务器(仅以Master服务器举例)

mkdir -p /opt/mysql-mha/mha-node

在这里插入图片描述

编写配置文件
mkdir -p /opt/mysql-mha/mha-manager

vim /opt/mysql-mha/mysql_mha.cnf

	[server default]
	manager_log=/opt/mysql-mha/manager.log
	manager_workdir=/opt/mysql-mha/mha-manager
	remote_workdir=/opt/mysql-mha/mha-node
	master_binlog_dir=/usr/local/mysql/data
	ping_interval=1
	master_ip_failover_script=/usr/local/bin/master_ip_failover
	master_ip_online_change_script=/usr/local/bin/master_ip_online_change
	user=manager
	password=Admin@123
	repl_user=myslave
	repl_password=Admin@123
	port=3306
	secondary_check_script=/usr/local/bin/masterha_secondary_check -s 10.190.33.72 -s 10.190.33.73
	shutdown_script=""
	ssh_user=root
	
	[server1]
	hostname=10.190.33.71
	port=3306
	
	[server2]
	candidate_master=1
	check_repl_delay=0
	hostname=10.190.33.72
	port=3306
	
	[server3]
	hostname=10.190.33.73
	port=3306

在这里插入图片描述

在这里插入图片描述

手动开启虚拟IP

Master服务器

/sbin/ifconfig ens33:1 10.190.33.100/24

ifconfig

在这里插入图片描述

测试 ssh 无密码认证及 MySQL主从连接情况
masterha_check_ssh -conf=/opt/mysql-mha/mysql_mha.cnf
		#测试 ssh 无密码认证

masterha_check_repl -conf=/opt/mysql-mha/mysql_mha.cnf
		#MySQL主从连接情况

在这里插入图片描述
在这里插入图片描述

启动 MHA

nohup masterha_manager \
--conf=/opt/mysql-mha/mysql_mha.cnf \
--remove_dead_master_conf \
--ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &


masterha_check_status --conf=/opt/mysql-mha/mysql_mha.cnf
		#查看 MHA 状态

cat /opt/mysql-mha/manager.log | grep "current master"
		#查看 MHA 日志

在这里插入图片描述

故障模拟———— Master 节点意外故障

停止 Master 节点MySQL服务

systemctl stop mysqld

在这里插入图片描述

查看 mysql2 是否接管 VIP


ifconfig

在这里插入图片描述

修复故障

启动原来的主节点
systemctl start mysqld

在这里插入图片描述

修复数据

现主MySQL服务器(原从MySQL服务器1)


mysql -u root -p

mysql> show master status;

在这里插入图片描述

在原来的主节点


change master to master_host='10.190.33.72',master_user='myslave',master_password='Admin@123',master_log_file='mysql-bin.000001',master_log_pos=1777;

start slave;

在这里插入图片描述

在 manager 节点上修改配置文件

vim /opt/mysql-mha/mysql_mha.cnf
	······
	[server1]
	hostname= 10.190.33.71
	port=3306
	······

在这里插入图片描述

对mysql1和mysql2 进行重启

systemctl restart  mysqld

在 manager 节点上启动 MHA

masterha_stop --conf=/opt/mysql-mha/mysql_mha.cnf


nohup masterha_manager \
--conf=/opt/mysql-mha/mysql_mha.cnf \
--remove_dead_master_conf \
--ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &

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

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

相关文章

UI(二)控件

文章目录 PatternLockProgressQRCodeRadioRatingRichTextScollBarSearchSelectSlideSpanStepper和StepperItemTextTextAreaTextClockTextInputTextPickerTextTimerTimePickerToggleWeb PatternLock PatternLock是图案密码锁组件&#xff0c;以九宫格图案的方式输入密码&#x…

RTDETR更换优化器——Lion

RTDETR更换Lion优化器 论文&#xff1a;https://arxiv.org/abs/2302.06675 代码&#xff1a;https://github.com/google/automl/blob/master/lion/lion_pytorch.py 简介&#xff1a; Lion优化器是一种基于梯度的优化算法&#xff0c;旨在提高梯度下降法在深度学习中的优化效果…

vue3中通过vditor插件实现自定义上传图片、录入echarts、脑图、markdown语法的编辑器

1、下载Vditor插件 npm i vditor 我的vditor版本是3.10.2&#xff0c;大家可以自行选择下载最新版本 官网&#xff1a;Vditor 一款浏览器端的 Markdown 编辑器&#xff0c;支持所见即所得&#xff08;富文本&#xff09;、即时渲染&#xff08;类似 Typora&#xff09;和分屏 …

软件必须要进行跨浏览器测试吗?包括哪些内容和注意事项?

随着互联网的普及和发展&#xff0c;用户对软件的要求越来越高。无论是在台式机、笔记本还是移动设备上&#xff0c;用户都希望能够以最好的体验来使用软件。然而&#xff0c;不同的浏览器在解析网页的方式、支持的技术标准等方面存在差异&#xff0c;这就导致了同一个网页在不…

使用J-Link Commander查找STM32死机问题

接口:PA13,PA14&#xff0c;请勿连接复位引脚。 输入usb命令这里我已经连接过了STM32F407VET6了。 再输入connect命令这里我已经默认选择了SWD接口&#xff0c;4000K速率。 可以输入speed 4000命令选择4000K速率: 写一段崩溃代码进行测试: void CashCode(void){*((volatil…

(2024,RNN,梯度消失和爆炸,记忆诅咒,重参数化和动态学习率,权重矩阵对角化,复值 RNN)梯度消失和爆炸并不是故事的结局

Recurrent neural networks: vanishing and exploding gradients are not the end of the story 公和众与号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 梯度消失和梯度爆炸 2. 记…

PyCharm2024 for mac Python编辑开发

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…

深入解读一下`android.os.CountDownTimer`

简介 在 Android 开发中&#xff0c;CountDownTimer 是一个非常有用的类&#xff0c;它可以用于倒计时任务&#xff0c;比如倒计时器、限时活动等。CountDownTimer 提供了一个简单的方式来实现定时操作&#xff0c;无需我们手动管理线程和计时器。 本文将深入解析 CountDownT…

大数据------JavaWeb------Maven(完整知识点汇总)

额外知识点 IDE IDE是集成开发环境的缩写&#xff0c;它是一种软件应用程序&#xff0c;提供了编码、调试和部署软件的一站式解决方案。这些功能集成在一起&#xff0c;使开发人员能够在一个环境中完成整个软件开发过程&#xff0c;从编写代码到调试和测试&#xff0c;直到最终…

中霖教育:税务师考试通过率怎么样?

税务师考试的通过率通常在20%至30%的范围内&#xff0c;涵盖五个科目&#xff1a;《税法一》、《税法二》、《财务与会计》、《涉税服务实务》和《涉税服务相关法律》&#xff0c;成绩有效期为五年。 针对税务师备考&#xff0c;有效的学习策略至关重要。 1、熟悉各科的题型和…

什么是 SSH(安全外壳协议)以及如何工作

安全外壳协议&#xff08;Secure Shell&#xff0c;简称SSH&#xff09;&#xff0c;旨在取代未加密的协议&#xff08;如 Telnet 和 RSH&#xff09;和未受保护的文件传输协议&#xff08;如 FTP 和 RCP&#xff09;&#xff0c;在两个设备之间提供安全的加密连接。 安全外壳…

数字社交的领航者:解析Facebook的引领作用

在当今数字化社会中&#xff0c;社交网络已经成为了人们日常生活不可或缺的一部分。而在众多社交平台中&#xff0c;Facebook凭借其巨大的用户基础和创新的技术应用&#xff0c;被公认为数字社交领域的领航者之一。本文将深入解析Facebook在数字社交中的引领作用&#xff0c;探…

免费可视化工具如何提升工作效率?

免费可视化工具能为我们的工作带来什么好处&#xff1f;在如今数据密集的工作环境中&#xff0c;如何高效地处理和展示数据成为了每个行业的重要任务。传统的工具如Excel虽然强大&#xff0c;但在处理复杂数据和创建高级图表时往往显得力不从心。而免费可视化工具的出现&#x…

让DroidVNC-NG支持中文输入

DroidVNC-NG支持控制端输入内容&#xff0c;但是仅支持英文字符&#xff0c;如果需要控制输入法软键盘输入中文的话就没办法了&#xff0c;经过摸索找到了解决办法。 这个解决办法有个条件就是让DroidVNC-NG成为系统级应用&#xff08;这个条件比较苛刻&#xff09;&#xff…

HarmonyOS Next开发学习手册——层叠布局 (Stack)

概述 层叠布局&#xff08;StackLayout&#xff09;用于在屏幕上预留一块区域来显示组件中的元素&#xff0c;提供元素可以重叠的布局。层叠布局通过 Stack 容器组件实现位置的固定定位与层叠&#xff0c;容器中的子元素依次入栈&#xff0c;后一个子元素覆盖前一个子元素&…

谈谈Flink消费kafka的偏移量

offset配置: flinkKafkaConsumer.setStartFromEarliest():从topic的最早offset位置开始处理数据&#xff0c;如果kafka中保存有消费者组的消费位置将被忽略。 flinkKafkaConsumer.setStartFromLatest():从topic的最新offset位置开始处理数据&#xff0c;如果kafka中保存有消费…

全自动封箱机技术革新:效率优化新篇章

在日新月异的物流行业中&#xff0c;全自动封箱机以其高效、精准的特性&#xff0c;成为了不可或缺的关键设备。然而&#xff0c;随着市场竞争的加剧和客户需求的不断升级&#xff0c;如何进一步优化全自动封箱机的效率&#xff0c;成为了行业内外关注的焦点。 一、全自动封箱机…

俯视LLM的灵魂:一文搞懂稀疏自动编码器

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

鸿蒙开发HarmonyOS NEXT (一) 入门

最近总听见大家讨论鸿蒙&#xff0c;前端转型的好方向&#xff1f;先入门学习下 目前官方版本和文档持续更新中 一、开发环境 提示&#xff1a;要占用的空间比较多&#xff0c;建议安装在剩余空间多的盘 1、下载&#xff1a;官网最新工具 - 下载中心 - 华为开发者联盟 (huaw…

滑动窗口1

1. 长度最小的子数组&#xff08;209&#xff09; 题目描述: 算法原理&#xff1a; 这题使用滑动窗口的方法来进行解决&#xff0c;而滑动窗口实际上就是通过定义同向双指针的方式来实现的&#xff0c;两个指针就是窗口的左右边界&#xff0c;然后结合这样的思想来给出这题的…