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

搭建 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 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中的线程与进程

一、线程与进程 在计算机科学中&#xff0c;理解线程和进程的区别是重要的基础知识。这些概念对于多任务操作和并发编程尤为关键。下面将详细介绍线程与进程的区别、特点和各自的使用场景。 1.1 进程&#xff08;Process&#xff09; 进程是操作系统分配资源的基本单位。每个进…...

网络安全筑基篇——反序列化漏洞

目录 序列化是什么&#xff1f; 反序列化又是什么&#xff1f; 反序列化漏洞的危害 代码样例 常见的魔术方法 修复方式有哪些&#xff1f; 常见的反序列化漏洞 Shiro反序列化漏洞 Fastjson反序列化漏洞 序列化是什么&#xff1f; 将实例化对象转换成字节流的过程 反序…...

帝国cms定时审核并更新的方法

比如你网站采集了成千上万篇文章&#xff0c;不可能一下子全部放出来的&#xff0c;所以为了模拟人工发布&#xff0c;那么就需要定时审核发布文章内容&#xff0c;本文内容核心解决了更加个性化的逼真模拟人工更新网站内容。 第一&#xff1a;首先要满足你的表中有未审核的数据…...

一个简单好用安全的开源交互审计系统,支持SSH,Telnet,Kubernetes协议

前言 在当今的企业网络环境中&#xff0c;远程访问和交互审计成为了保障网络安-全的重要组成部分。然而&#xff0c;现有的解-决方案往往存在一些痛点&#xff0c;如复杂的配置、有限的协议支持、以及审计功能的不足。这些问题不仅增加了IT管理员的负担&#xff0c;也为企业的…...

使用Spring Boot和WebSocket实现实时通信

使用Spring Boot和WebSocket实现实时通信 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中使用WebSocket实现实时通信&am…...

【Vue】集成富文本编辑器

这文章使用的是wangeditor插件&#xff0c;官网地址&#xff1a;wangEditor&#xff0c;这个比较简单 安装 npm i wangeditor --save 使用 <div id"editor"></div>import E from "wangeditor"const editor new E("#editor") e…...

【论文阅读】--Popup-Plots: Warping Temporal Data Visualization

弹出图&#xff1a;扭曲时态数据可视化 摘要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.&#xff08;发表日期: 2019&…...

重建大师引擎数0,本地引擎设置改不了,空三在跑,这样是正常的吗?

答&#xff1a;任务目录和引擎监控目录并没有按照网络集群设置&#xff0c;需要调整为网络路径。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c;POS信息及像控点&#xff0c;输出高精度彩色网…...

APM教程-SkyWalking安装和配置

SkyWalking简介 APM (Application Performance Management) 即应用性能管理&#xff0c;属于IT运维管理&#xff08;ITOM)范畴。主要是针对企业 关键业务的IT应用性能和用户体验的监测、优化&#xff0c;提高企业IT应用的可靠性和质量&#xff0c;保证用户得到良好的服务&#…...

斯坦福大学 AI 研究部门推出的“7 周人工智能学习计划”

①AI Python 基础&#xff0c;包括计算机原理、语法、判断语句等&#xff1b; ②AI Python 进阶&#xff0c;涉及 Linux 命令、多任务编程等&#xff1b; ③机器学习&#xff0c;涵盖算法、数据结构等&#xff1b; ④计算机视觉与图像处理&#xff0c;包含图像分类、目标检测…...

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日凌晨&#xff0c;在特斯拉股东大会上&#xff0c;马斯克阐述了对Robotaxi&#xff08;自动驾驶出租车&#xff09;商业模式的构想——特斯拉不仅会运营自己的无人驾驶出租车车队&#xff0c;还可以让特斯拉车主们的爱…...

CCSP自考攻略+经验总结

备考攻略 备考攻略准备阶段通读阶段精度阶段总复习阶段刷题阶段命运审判 写到最后 备考攻略 趁着对ssp知识点的理解还在&#xff0c;开始ccsp的考证之路&#xff0c;文章结构还是按照cissp备考篇的结构梳理。本次备考和cissp的离职在家备考不同&#xff0c;ccsp是在职利用非工…...

面试突击:ArrayList源码详解

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 前言 哈喽&#xff0c;大家好&#xff0c;我是 DanMu。ArrayList 是我们日常开发中不可避免要使用到的一个类&#xff0c;并且在面试过程中也是一个非常高频的知识点&#…...

力扣每日一题:2734. 执行子串操作后的字典序最小字符串

题目链接 脑子比较笨&#xff0c;分三种情况考虑&#xff1a; 以a开头。xxa&#xff0c;a在中间。 对于情况2还有两种可能&#xff1a; 1. 全是a&#xff0c;最后一个元素需要替换成z&#xff0c;因为必须执行一次操作。 2. aaaxxa&#xff0c;中间有一段非a&#xff0c;将这…...

C++11中std::thread的使用

C11 引入了 std::thread&#xff0c;它是用于创建和管理线程的标准库类。以下是详细的讲解&#xff0c;包括如何使用 std::thread 进行线程创建、管理和参数传递等操作。 1. 包含必要的头文件 在使用 std::thread 前&#xff0c;需要包含 <thread> 头文件&#xff1a; …...

酷瓜云课堂(内网版)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中&#xff0c;throw 和 throws 是两个用于处理异常的关键词&#xff0c;它们的使用场景和目的有所不同 1. throw throw 关键字用于在Java程序中显式地抛出一个异常。当你检测到某些条件&#xff08;通常是错误条件&#xff09;时&#xff0c;你可以使用 throw 来抛出一…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...