搭建 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从库服务器01 | 10.190.33.72 |
| Slave从库服务器02 | 10.190.33.73 |
| MHA Manager服务器 | 10.190.33.74 |
| Client | 10.190.33.75 |
实验思路
MHA架构
- 数据库安装
- 一主两从
- MHA搭建
故障模拟
- 主库失效
- 备选主库成为主库
- 原故障主库恢复重新加入到MHA成为从库
实验部署
数据库安装
MySQL安装教程
主从复制部署
时间同步
所有服务器均需要进行配置(仅以Master服务器举例)
yum install -y chronyvim /etc/chrony.conf #注释原有ntp服务器,添加阿里ntp服务源server ntp.aliyun.com iburstsystemctl restart chronydchronyc sources -vsystemctl enable --now chronyd


主服务器配置
vim /etc/my.cnfserver-id=1log_bin = mysql-binbinlog_format = mixedlog-slave-updates = truerelay-log = relay-log-binrelay-log-index = slave-relay-bin.index systemctl restart mysqld
mysql -u root -pAdmin@123grant 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.cnfserver-id = 2log_bin = mysql-binbinlog_format = mixedlog-slave-updates = truerelay-log = relay-log-binrelay-log-index = slave-relay-bin.indexsystemctl restart mysqldmysql -u root -pAdmin@123grant 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\Gset 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 -yyum 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 /opttar xf mha4mysql-node-0.57.tar.gzcd mha4mysql-node-0.57perl Makefile.PLmake && make install

安装 manager 组件
manager服务器
cd /opttar xf mha4mysql-manager-0.57.tar.gzcd mha4mysql-manager-0.57perl Makefile.PLmake && make install

配置无密码认证
所有的服务器
#manager节点上配置到所有数据库节点的无密码认证ssh-keygen -t rsassh-copy-id 10.190.33.71ssh-copy-id 10.190.33.72ssh-copy-id 10.190.33.73#master节点上配置到数据库节点 slave1 和 slave2的无密码认证ssh-keygen -t rsassh-copy-id 10.190.33.72ssh-copy-id 10.190.33.73#slave1节点上配置到数据库节点 master和 slave2的无密码认证ssh-keygen -t rsassh-copy-id 10.190.33.71ssh-copy-id 10.190.33.73#slave2节点上配置到数据库节点 master和 slave1 的无密码认证ssh-keygen -t rsassh-copy-id 10.190.33.71ssh-copy-id 10.190.33.72
- manager

- master

- slave1

- slave2

在 manager 节点上配置 MHA
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/binll /usr/local/bin/scripts/cp /usr/local/bin/scripts/master_ip_failover /usr/local/binvim /usr/local/bin/master_ip_failover###删除所有后;拷贝前输入 :set paste 解决vim粘贴乱序问题#!/usr/bin/env perluse 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_mastersub 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-managervim /opt/mysql-mha/mysql_mha.cnf[server default]manager_log=/opt/mysql-mha/manager.logmanager_workdir=/opt/mysql-mha/mha-managerremote_workdir=/opt/mysql-mha/mha-nodemaster_binlog_dir=/usr/local/mysql/dataping_interval=1master_ip_failover_script=/usr/local/bin/master_ip_failovermaster_ip_online_change_script=/usr/local/bin/master_ip_online_changeuser=managerpassword=Admin@123repl_user=myslaverepl_password=Admin@123port=3306secondary_check_script=/usr/local/bin/masterha_secondary_check -s 10.190.33.72 -s 10.190.33.73shutdown_script=""ssh_user=root[server1]hostname=10.190.33.71port=3306[server2]candidate_master=1check_repl_delay=0hostname=10.190.33.72port=3306[server3]hostname=10.190.33.73port=3306


手动开启虚拟IP
Master服务器
/sbin/ifconfig ens33:1 10.190.33.100/24ifconfig

测试 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 -pmysql> 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.71port=3306······

对mysql1和mysql2 进行重启
systemctl restart mysqld
在 manager 节点上启动 MHA
masterha_stop --conf=/opt/mysql-mha/mysql_mha.cnfnohup 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 &
相关文章:
搭建 MySQL MHA
搭建 MySQL MHA 搭建 MySQL MHA实验拓扑图实验环境实验思路MHA架构故障模拟 实验部署数据库安装主从复制部署时间同步主服务器配置从服务器配置创建链接 MHA搭建安装依赖的环境安装 node 组件安装 manager 组件配置无密码认证在 manager 节点上配置 MHA管理 mysql 节点服务器创…...
python中的线程与进程
一、线程与进程 在计算机科学中,理解线程和进程的区别是重要的基础知识。这些概念对于多任务操作和并发编程尤为关键。下面将详细介绍线程与进程的区别、特点和各自的使用场景。 1.1 进程(Process) 进程是操作系统分配资源的基本单位。每个进…...
网络安全筑基篇——反序列化漏洞
目录 序列化是什么? 反序列化又是什么? 反序列化漏洞的危害 代码样例 常见的魔术方法 修复方式有哪些? 常见的反序列化漏洞 Shiro反序列化漏洞 Fastjson反序列化漏洞 序列化是什么? 将实例化对象转换成字节流的过程 反序…...
帝国cms定时审核并更新的方法
比如你网站采集了成千上万篇文章,不可能一下子全部放出来的,所以为了模拟人工发布,那么就需要定时审核发布文章内容,本文内容核心解决了更加个性化的逼真模拟人工更新网站内容。 第一:首先要满足你的表中有未审核的数据…...
一个简单好用安全的开源交互审计系统,支持SSH,Telnet,Kubernetes协议
前言 在当今的企业网络环境中,远程访问和交互审计成为了保障网络安-全的重要组成部分。然而,现有的解-决方案往往存在一些痛点,如复杂的配置、有限的协议支持、以及审计功能的不足。这些问题不仅增加了IT管理员的负担,也为企业的…...
使用Spring Boot和WebSocket实现实时通信
使用Spring Boot和WebSocket实现实时通信 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中使用WebSocket实现实时通信&am…...
【Vue】集成富文本编辑器
这文章使用的是wangeditor插件,官网地址:wangEditor,这个比较简单 安装 npm i wangeditor --save 使用 <div id"editor"></div>import E from "wangeditor"const editor new E("#editor") e…...
【论文阅读】--Popup-Plots: Warping Temporal Data Visualization
弹出图:扭曲时态数据可视化 摘要1 引言2 相关工作3 弹出图3.1 椭球模型3.1.1 水平轨迹3.1.2 垂直轨迹3.1.3 组合轨迹 3.2 视觉映射与交互 4 实施5 结果6 评估7 讨论8 结论和未来工作致谢参考文献 期刊: IEEE Trans. Vis. Comput. Graph.(发表日期: 2019&…...
重建大师引擎数0,本地引擎设置改不了,空三在跑,这样是正常的吗?
答:任务目录和引擎监控目录并没有按照网络集群设置,需要调整为网络路径。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件,输入倾斜照片,激光点云,POS信息及像控点,输出高精度彩色网…...
APM教程-SkyWalking安装和配置
SkyWalking简介 APM (Application Performance Management) 即应用性能管理,属于IT运维管理(ITOM)范畴。主要是针对企业 关键业务的IT应用性能和用户体验的监测、优化,提高企业IT应用的可靠性和质量,保证用户得到良好的服务&#…...
斯坦福大学 AI 研究部门推出的“7 周人工智能学习计划”
①AI Python 基础,包括计算机原理、语法、判断语句等; ②AI Python 进阶,涉及 Linux 命令、多任务编程等; ③机器学习,涵盖算法、数据结构等; ④计算机视觉与图像处理,包含图像分类、目标检测…...
World of Warcraft [CLASSIC] plugin lua
World of Warcraft [CLASSIC] plugin lua 魔兽世界lua脚本插件 World of Warcraft API - Wowpedia - Your wiki guide to the World of Warcraft D:\World of Warcraft\_classic_\Interface\AddOns zwf.lua function CountdownFunc()CountdownFrame CreateFrame("Fram…...
背靠广汽、小马智行,如祺出行打得过滴滴和百度吗?
©自象限原创 作者丨艾AA 编辑丨薛黎 北京时间6月14日凌晨,在特斯拉股东大会上,马斯克阐述了对Robotaxi(自动驾驶出租车)商业模式的构想——特斯拉不仅会运营自己的无人驾驶出租车车队,还可以让特斯拉车主们的爱…...
CCSP自考攻略+经验总结
备考攻略 备考攻略准备阶段通读阶段精度阶段总复习阶段刷题阶段命运审判 写到最后 备考攻略 趁着对ssp知识点的理解还在,开始ccsp的考证之路,文章结构还是按照cissp备考篇的结构梳理。本次备考和cissp的离职在家备考不同,ccsp是在职利用非工…...
面试突击:ArrayList源码详解
本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。ArrayList 是我们日常开发中不可避免要使用到的一个类,并且在面试过程中也是一个非常高频的知识点&#…...
力扣每日一题:2734. 执行子串操作后的字典序最小字符串
题目链接 脑子比较笨,分三种情况考虑: 以a开头。xxa,a在中间。 对于情况2还有两种可能: 1. 全是a,最后一个元素需要替换成z,因为必须执行一次操作。 2. aaaxxa,中间有一段非a,将这…...
C++11中std::thread的使用
C11 引入了 std::thread,它是用于创建和管理线程的标准库类。以下是详细的讲解,包括如何使用 std::thread 进行线程创建、管理和参数传递等操作。 1. 包含必要的头文件 在使用 std::thread 前,需要包含 <thread> 头文件: …...
酷瓜云课堂(内网版)v1.1.5 发布,局域网在线学习+考试系统
更新内容 更新layui-v2.9.10更新docker国内镜像地址增加导入镜像构建容器的方式教师不批阅非首次考试试卷轮播图增加专栏类型目标链接增加课程能否发布检查去除初始化kindeditor语言文件去除选择题EF选项优化富文本内容显示样式优化内容图片点击放大监听优化试题题干答案等图片…...
大数据之Hadoop部署
文章目录 服务器规划服务器环境准备1. 网络测试2. 安装额外软件包3. 安装基础工具4. 关闭防火墙5. 创建用户并配置权限6. 创建目录并设置权限7. 卸载JDK8. 修改主机名9. 配置hosts文件10. 重启服务器 配置免密登录安装Java安装Hadoop1. Hadoop部署2. 配置Hadoop3. 格式化Hadoop…...
Java异常处理中的“throw”与“throws”的区别
在Java中,throw 和 throws 是两个用于处理异常的关键词,它们的使用场景和目的有所不同 1. throw throw 关键字用于在Java程序中显式地抛出一个异常。当你检测到某些条件(通常是错误条件)时,你可以使用 throw 来抛出一…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
