MySQL 高可用实战

news2024/12/29 11:52:29

文章目录

  • 前言
  • 实现思路
  • 环境准备
  • 一、实现MySQL高可用
    • 1.1 修改配置文件
    • 1.2 MySQL监控脚本
    • 1.4 重启keepalived
    • 1.5 查看虚拟ip
  • 二、高可用验证
    • 2.1 模拟宕机
    • 2.2 查看虚拟ip
    • 2.3 连接MySQL
    • 2.4 恢复主机
    • 2.5 查看虚拟ip
  • 总结


前言

请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、


提示:以下是本篇文章正文内容,下面案例可供参考

实现思路

本文根据上篇keepalived实现nginx高可用,进行扩展,对MySQL实现高可用,满足生产环境服务灾备!!!

  1. keepalived服务简单来说,就是用来防止单点故障的。
  2. 所谓的单点故障就是,主服务器挂了之后从服务器充当主服务器,原来的主服务器恢复后,当从服务器来使用,保证服务的高可用性。

也可以这样理解,老大挂了之后手下的小弟过来接班,老大复活后,当小弟使用。
文章例子:
实现MySQL高可用,两台机器分别搭建MySQL为后端服务实现代理,当一台mysql服务宕机后,用户无感知切换备用机器上MySQL,使其访问后端服务正常
问题引申:
两台机器部署MySQL,问题一:必然访问服务ip不一致、问题二:如何检测MySQL是否正常运行,多久检测依据,检测时间如何定义?
解决方案:
为了解决这个问题此时keepalived登场!它拥有应用活性探测机制,支持用户自定义检测脚本。重点:可将两台机器ip虚拟出绑定机器网卡的虚拟ip(vip),提供虚拟ip,供外部访问

环境准备

注意:分别在两台centos 7系统上安装keepalived 及 centos 7系统上安装MySQL

本文中的两台服务器的IP地址分别为:(192.168.248.131、192.168.248.132

一、实现MySQL高可用

注意 分别为:(192.168.248.131、192.168.248.132)安装keepalived!!!两台机器虚拟ip必须相同!!!

1.1 修改配置文件

#编辑配置(服务启动默认读取/etc/keepalived/keepalived.confvim /etc/keepalived/keepalived.conf

主节点配置内容:192.168.248.131

! Configuration File for keepalived

global_defs {
    notification_email {	#设置报警邮件地址,需要开启本机postfix或者sendmail服务;
        xxx@alibaba-inc@qq.com
    }
    notification_email_from root@localhost.com	#用于设置邮件的发送地址,即报警邮件发送者;
    smtp_server 127.0.0.1	#用于设置邮件的SMTP Server地址;
    smtp_connect_timeout 30	#设置连接SMTP Server的超时时间;
    router_id LVS_DEVEL #LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}

vrrp_script chk_mysql {
    script /etc/keepalived/scripts/chk_mysql.sh #监控mysql脚本路径
    interval 2 #检测时间间隔
    weight -10 #如果条件成立的话,则权重 -10
}

vrrp_instance VI_1 {
    state MASTER      #主从状态(MASTER/BACKUPinterface ens33      #绑定虚拟 IP 的网络接口,注:ip addr查询
    virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.248.131  #填写本机ip
    priority 100 #主节点优先级,主要比从节点优先级高
    #garp_master_delay 30
    advert_int 1        #每隔1s发送一次心跳
    authentication {    
        auth_type PASS
        auth_pass 1111  #校验类型:密码=1111
    }
    #track_script块加入 instance 配置块
    track_script {
        chk_mysql       #执行mysql监控服务
    }
    virtual_ipaddress {
      192.168.248.99  #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )
    }
}

从节点配置内容:192.168.248.132

! Configuration File for keepalived

global_defs {
    notification_email {	#设置报警邮件地址,需要开启本机postfix或者sendmail服务;
        xxx@alibaba-inc@qq.com
    }
    notification_email_from root@localhost.com	#用于设置邮件的发送地址,即报警邮件发送者;
    smtp_server 127.0.0.1	#用于设置邮件的SMTP Server地址;
    smtp_connect_timeout 30	#设置连接SMTP Server的超时时间;
    router_id LVS_DEVEL #LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}

vrrp_script chk_mysql {
    script /etc/keepalived/scripts/chk_mysql.sh #监控mysql脚本路径
    interval 2 #检测时间间隔
    weight -10 #如果条件成立的话,则权重 -10
}

vrrp_instance VI_1 {
    state BACKUP      #主从状态(MASTER/BACKUPinterface ens33      #绑定虚拟 IP 的网络接口,注:ip addr查询
    virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.248.132  #填写本机ip
    priority 90 #主节点优先级,主要比从节点优先级高
    #garp_master_delay 30
    advert_int 1        #每隔1s发送一次心跳
    authentication {    
        auth_type PASS
        auth_pass 1111  #校验类型:密码=1111
    }
    #track_script块加入 instance 配置块
    track_script {
        chk_mysql       #执行mysql监控服务
    }
    virtual_ipaddress {
      192.168.248.99  #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )
    }
}

查看网卡网络接口:

 echo `ip ad|awk '/state UP/ {gsub(":", "");print $2}'`

查看网卡

1.2 MySQL监控脚本

注意:脚本存放路径与上述keepalived配置文件指定一致!!!

#创建
mkdir -p /etc/keepalived/scripts/

#编辑
vim /etc/keepalived/scripts/chk_mysql.sh

#添加可执行权限
chmod +x /etc/keepalived/scripts/chk_mysql.sh 

脚本内容:

#!/bin/bash

#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#      + 1、此脚本为mysql监控脚本,与keepalived组件配合使用    
#      + 2keepalived配置文件:/etc/keepalived/keepalived.conf       
#      + 3、脚本输出日志/etc/keepalived/check_service.log
#      + 4、默认脚本路径在/etc/keepalived/scripts,需要改变路径,请修改keepalived配置   	               
#      + 5、创建此脚本后请赋予可执行权限chmod +x /etc/keepalived/scripts/chk_mysql.sh      
#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



####################基础参数####################
#获取当前时间
DATE=`date +%Y%m%d`
#日志输出路径
logPath=/etc/keepalived


A=`netstat -tunlp | grep 3306 | wc -l`
# 判断mysql是否宕机,如果宕机了,尝试重启
echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S) 进程数:$A" | tee -a ${logPath}/check_serviceMysql.log 
if [ $A -eq 0 ];then 
	service mysql start 
	# 等待一小会再次检查mysql,如果没有启动成功,则停止keepalived,使其启动备用机 
	sleep 6 
	if [ `netstat -tunlp | grep 3306 | wc -l` -eq 0 ];then 
		echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S)mysql is over! stop keepalived!" | tee -a ${logPath}/check_serviceMysql.log
		service keepalived stop
		exit 1
	fi
else
	echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S) mysql is run!" | tee -a ${logPath}/check_serviceMysql.log
	exit 0		
fi

1.4 重启keepalived

注意:重启两台机器上的keepalived,确保MySQL服务也启动

#重启服务
service keepalived restart

1.5 查看虚拟ip

注意当主节点keepalived正常运行时,从节点不会出现虚拟ip,反之当主节点keepalived宕机后,从节点自动绑定虚拟ip

#查看ip信息
ip addr

192.168.248.131:主节点
主节点
192.168.248.132:从节点
从节点

二、高可用验证

2.1 模拟宕机

注意:杀死192.168.248.131主机中keepalived和MySQL

#结束keepalived进程
kill -9 123855 123857 123858
 
#结束keepalived进程
service keepalived stop 

#关闭MySQL
service mysql stop 

2.2 查看虚拟ip

注意当主节点宕机后,从节点自动绑定虚拟ip

#查看ip信息
ip addr

查看虚拟ip

2.3 连接MySQL

#连接MySQL
 mysql -h 192.168.248.99 -uroot -p

连接MySQL

2.4 恢复主机

注意:重启192.168.248.131:主节点: keepalivedMySQL服务

#重启keepalived
service keepalived restart

#启动nginx并指定配置
service mysql start 

2.5 查看虚拟ip

注意当主节点keepalived正常运行时,虚拟ip已经归属主节点,从节点虚拟ip已经消失

#查看ip信息
ip addr

192.168.248.131:主节点
主节点
192.168.248.132:从节点
从节点

至此keepalived 对MySQL高可用已经实现!!!


总结

我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!

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

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

相关文章

基于脉搏波的疾病诊断:准确率接近100%的未来前景?

脉搏波分析作为一种无创诊断方法,在糖尿病诊断领域具有巨大潜力。某些研究表明,基于脉搏波的诊断方法在准确性方面可能优于传统血糖检测方法。然而,在将这种方法应用于临床之前,我们需要关注其稳定性、易用性、成本效益等因素。 首…

老胡的周刊(第089期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 MOSS[2] 来自复旦大学的开源工具增强型会话语…

翻译: 迁移学习和微调 Transfer learning fine-tuning

1. 介绍 迁移学习包括获取在一个问题上学到的特征,并将它们用于一个新的类似问题。例如,已经学会识别浣熊的模型的特征可能有助于启动旨在识别狸猫的模型。 迁移学习通常用于您的数据集数据太少而无法从头开始训练全尺寸模型的任务。 在深度学习的背景…

AI模型推理(1)——入门篇

前言 本文主要介绍AI模型推理的相关基础概念,为后续云原生模型推理服务的学习做准备。 初识模型部署 对于深度学习模型来说,模型部署指让训练好的模型在特定环境中运行的过程。相比于常规的软件部署,模型部署会面临更多的难题: …

SPI机制详细讲解

文章目录 SPI机制案例分析建立DriverManager建立MysqlDriver来实现扩展建立OracleDriver来实现扩展测试spitest 源码分析ServiceLoader类的结构reload加载类LazyIterator类parse解析URL对象方法parseLine方法 SPI机制 SPI ,全称为 Service Provider Interface&…

Bridge模式如何配置

Bridge模式案例(一) 基于Docker引擎启动Nginx WEB容器,默认以Bridge方式启动Docker容器,会动态DHCP给Docker容器分配IP、网关等信息,操作指令如下: 查看镜像列表 docker images#运行新的Nginx容器 dock…

ChatGPT实现代码解释

代码解释 新手程序员在入门之初,最好的学习路径就是直接阅读其他人的代码,从中学会别人是怎么写的,为什么这么写。过去,这个学习过程可能需要广泛阅读官方文档,在 GitHub issue 上提问,上 Stack Overflow …

内网渗透(六十)之AS-REP Roasting攻击

AS-REP Roasting攻击 AS-REP Roasting是一种针对用户账户进行离线爆破的攻击方式。但是该攻击方式使用上比较受限,因为其需要用户账户设置“不要求Kerberos预身份验证”选项。而该选项默认是没有勾选的。Kerberos域身份验证发生在Kerberos身份验证的第一阶段(AS_REQ&AS_…

手记系列之四 ----- 关于使用MySql的一些经验

前言 本篇文章主要介绍的关于本人在使用MySql记录笔记的一些使用方法和经验,温馨提示,本文有点长,约1.5w字,几十张图片,建议收藏查看。 一、MySql安装 下载地址:https://dev.mysql.com/downloads/ 在安装MySql之前&a…

我在VScode学Java(Java一维数组)

我的个人博客主页:如果\真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习---->可以参考我的这篇博客:(我在Vscode学Java) 我在VScode学Java(Java一维数组) Java 一维数组 声明数组:先声明,后使用 动态分配内…

最长连续子序列---双指针

一、最长连续不重复子序列 核心思路: 遍历数组a中的每一个元素a[i], 对于每一个i,找到j使得双指针[j, i]维护的是以a[i]结尾的最长连续不重复子序列,长度为i - j 1, 将这一长度与r的较大者更新给r。 对于每一个i,如何确定…

XR技术在手术中的应用调研

虚拟现实、增强现实、混合现实等概念和技术是最近几年发展起来的,相信你对去年大火的元宇宙深有感触,元宇宙属于虚拟现实的技术范畴,头号玩家电影也让虚拟现实走进大众的视野中。早在2015年,笔者参加一次展会时就有接触&#xff0…

【数据库复习】第四章数据库恢复技术

一、事务 定义 一个数据库操作序列 一个不可分割的工作单位(要么全做,要么不做) 恢复和并发控制的基本单位 事务和程序比较 在关系数据库中,一个事务可以是一条或多条SQL语句,也可以包含一个或多个程序。 一个程序通常包含…

java倒序输出数字的方法

1.在输入框中输入一个整数,比如要输入“5”,需要输出倒序,可以使用数字键盘进行输入,也可以使用文本编辑器进行输入。 2.在命令行中输入“6”,如图所示。 3.选择一个字符串作为例子。使用字符串编辑器中的 reverse命令…

这个 Chrome 插件,让你的 ChatGPT 不再报错

ChatGPT的官网最近几天报错越来越频繁了,相信大家都发现了。 一旦你离开页面时间比较久,再度返回跟它进行对话,就会出现如下报错: 虽然这个报错信息以前也出现过,但现在的频率确实过高,对于每天需要使用 C…

“火灾不分昼夜,安全在我心中”——五一前厂房消防检查纪实

检查人员: Scott, Jason, Willson, Hanson 检查时间: 2023年4月28日 检查地点: 1厂房、2厂房室内外 检查内容: 一、室内外消火栓: 室内栓外观正常; 室外栓: 栓体防冻防尘套破损、遗失,消防栓缺少防撞保护; 按规定距离厂房外墙不宜小于5…

gitlab部署及整合Jenkins持续构建(四)sonarqube9.9安装和使用(一步一坑)

文章目录 postgresql13.0安装1、配置postgresql数据库2、进入postgresql创建数据库 代码质量管理平台--sonarqube安装1、前置依赖下载2、安装unzip并解压sonarqube并移动到/usr/local:3、修改sonarqube相应的配置4、新增用户,并将目录所属权赋予该用户&a…

回村准备结婚了~

小伙伴们大家好,我是阿秀。 这几天是一年一度的五一假期,前几年因为疫情的存在,很多人的五一假期都只能憋在家里,不知道今年各位有没有出去游玩的计划和打算? 昨晚刷朋友圈看到很多人都在晒行程的,有打算去…

【MATLAB数据处理实用案例详解(19)】——利用神经模糊控制实现对洗衣机的控制

目录 一、问题描述二、洗衣机模糊控制三、运行结果四、完整代码 一、问题描述 20世纪90年代初期,日本松下公司推出了神经模糊控制全自动洗衣机这种洗衣机能够自动判断衣物质地的软硬程度、衣量多少、脏污程度和性质等,应用神经模糊控制技术,…

JavaScript实现输入成绩,输出成绩等级的代码

以下为实现输入成绩,输出成绩等级(switch语句)的代码和运行截图 目录 前言 一、实现输入成绩,输出成绩等级 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录…