使用mysql主从热备+keepalived服务+ipvsadm工具 实现 mysql高可用主备+负载均衡

目录

1、工作原理

2、环境准备

3、分别在主服务器和备用服务器上安装keepalived和ipvsadm

4、修改keepalived服务的配置文件

4.1 修改主服务器上的keepalive服务的配置文件

4.2 修改备用服务器上的keepalive服务配置文件

5、编写mysql监控脚本放到主服务器上

6、在主服务器和备用服务器上查看虚拟IP是否绑定到ens33网卡上。

7、高可用验证

7.1 模拟宕机,查看虚拟IP是否漂移到备用服务器上,验证高可用效果


1、工作原理

ipvsadm工具工作原理:

ipvsadm是一个用于管理IPVS(IP Virtual Server)的命令行工具。IPVS是linux内核中的一种负载均衡技术,它允许将网络流量分发到多个后端服务器,以提高系统的可用性、性能和扩展性。而Keepalived是在ipvs基础上实现高可用性。

ipvsadm提供了对IPVS的配置和管理功能,可以使用它来添加、删除和修改虚拟模拟服务器(VS),以及与之关联的后端服务器(Real Server)

keepalived服务工作原理可参考之前写的博文:

nginx配置实例-高可用主备模式_nginx主备模式-CSDN博客

keepalived是一个基于VRRP的协议工具,它与ipvsadm结合使用,提供高可用性和故障转移的功能。keepalived监控主服务器状态,一旦检测到主服务器不可用,它会自动将虚拟IP切换到备用服务器上,确保服务的持续可用性。keepalived使用ipvsadm来配置和管理ipvs ,来实现负载均衡和故障转移。

通过将ipvsadm和keepalived结合使用,可以实现以下目标:

负载均衡使用ipvsadm配置ipvs,将流量分发到多个后端服务器,提高系统的可用性和扩展性。
高可用性使用keepalived监控主服务器,并在主服务器故障时自动切换到虚拟IP的备份服务器,确保服务的持续可用性。
故障转移在主服务器故障后,keepalived使用ipvsadm更新ipvs配置,将流量重定向到备用服务器 ,实现故障转移。

一般情况下,当keealived服务和ipvsadmy工具一起使用时,keepalived会自动配置和管理ipvsadm,无需手动进行ipvsadm的配置。keepalived会根据配置文件中定义的IPVS配置(虚拟IP和后端服务器信息),自动使用ipvsadm对ipvs配置和管理,包括添加、删除和修改虚拟服务器和后端服务器。

2、环境准备

主机名IP地址说明
主服务器mysql_master192.168.81.131/24已安装且部署好mysql主从热备
备用服务器mysql_slave192.168.81.132/24已安装且部署好mysql主从热备

mysql主从热备部署参考上一篇博文:

mysql主从热备部署-CSDN博客

3、分别在主服务器和备用服务器上安装keepalived和ipvsadm

使用yum方式安装

yum install keepalived ipvsadm -y 

安装好后,将keepalivd程序开启,并且加入到开机启动项中。

systemctl start keepalived
systemctl enable keeaplived

4、修改keepalived服务的配置文件

yum方式安装的配置文件在/etc/keepalived目录下。

4.1 修改主服务器上的keepalive服务的配置文件

修改配置文件前,先做好备份!!!

使用sed命令将配置文件中默认内容删除

将下面参数复制到配置文件/etc/keepalived/keepalived.conf中

[root@mysql_master ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id master
}vrrp_scripts chk_mysql { script /etc/keepalived/scripts/chk_mysql.sh    # 监控mysqld服务脚本路径interval 2                                     # 检测时间间隔weight -10                                     # 权重减10}vrrp_instance VI_1 {state MASTER                                   # 主从状态interface ens33                                # 绑定虚拟ip的网络接口virtual_router_id 51                           # 绑定虚拟路由的ID号,两个节点的设置必须一样priority 100                                   # 主节点的优先级,要比从节点高advert_int 1                                   # 每隔1秒发送一次心跳 authentication {                               # 定义认证方式和密钥auth_type PASSauth_pass 1111                             # 校验类型:密码1111}track_script {                                 # 将track_scripts模块加入到instance模块chk_mysql                                  # 执行mysql监控服务                   
}virtual_ipaddress {192.168.81.138                             # 虚拟IP(设置虚拟IP网段需要同一个,需要根据实际要求调整)}
}virtual_server 192.168.81.138 3306 {               # 定义虚拟服务器IP地址和端口为192.168.81.138 端口为3306delay_loop 6                                   # 延迟时间lb_algo rr                                     # 负载均衡算法,这里使用轮序(rr)lb_kind DR                                     # 负载就均衡方式persistence_timeout 0                          # 存储时间protocol TCP                                   # 协议类型real_server 192.168.81.132 3306 {              # 实际的后端服务器配置 weight 1TCP_CHECK {                                # 健康检查配置 connect_port 3306connect_timeout 3nb_get_retry 3delay_before_retry 3}}}

修改好配置后,重启keepalived服务,使得配置文件的修改内容生效。

4.2 修改备用服务器上的keepalive服务配置文件

配置步骤与3.1步骤相似,但是配置文件的内容略有不同。

[root@mysql_slave ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id backup
}vrrp_instance VI_1 {state BACKUP                                   # 主从状态interface ens33                                # 绑定虚拟ip的网络接口virtual_router_id 51                           # 绑定虚拟路由的ID号,两个节点的设置必须一样priority 99                                    # 从节点的优先级,要比主节点低advert_int 1                                   # 每隔1秒发送一次心跳 authentication {                               # 定义认证方式和密钥auth_type PASSauth_pass 1111                             # 校验类型:密码1111}virtual_ipaddress {192.168.81.138                             # 虚拟IP(设置虚拟IP网段需要同一个,需要根据实际要求调整)}
}virtual_server 192.168.81.138 3306 {               # 定义虚拟服务器IP地址和端口为192.168.81.138 端口为3306delay_loop 6                                   # 延迟时间lb_algo rr                                     # 负载均衡算法,这里使用轮序(rr)lb_kind DR                                     # 负载就均衡方式persistence_timeout 0                          # 存储时间protocol TCP                                   # 协议类型real_server 192.168.81.132 3306 {              # 实际的后端服务器配置 weight 1TCP_CHECK {                                # 健康检查配置 connect_port 3306connect_timeout 3nb_get_retry 3delay_before_retry 3}}}

5、编写mysql监控脚本放到主服务器上

根据上面配置文件定义的监控路径来创建目录存放mysq服务的监控脚本。

编写监控脚本/etc/keepalived/scripts/chk_mysql.sh

#!/bin/bash# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# + 1、此脚本为MySQL监控脚本,与keepalived组件配合使用
# + 2、keepalived配置文件:/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# 检测MySQL进程是否正常运行
A=`ps -C mysqld --no-header | wc -l`
#将脚本中的输出内容同时输出到终端和指定的日志文件中,并以追加的方式写入日志文件。这样可以方便查看脚本的输出并记录日志信息。
echo "$(date +%Y-%m-%d' '%H:%M:%S) MySQL进程数:$A" | tee -a ${logPath}/check_service.log
if [ $A -eq 0 ]; then# 如果MySQL进程宕机了,尝试重启MySQLsystemctl start mysqld# 等待一小会再次检查MySQL,如果没有启动成功,则停止keepalived,使其启动备用机sleep 3if [ `ps -C mysqld --no-header | wc -l` -eq 0 ]; thenecho "$(date +%Y-%m-%d' '%H:%M:%S) MySQL已停止!停止keepalived!" | tee -a ${logPath}/check_service.logsystemctl stop keepalivedexit 1fi
elseecho "$(date +%Y-%m-%d' '%H:%M:%S) MySQL正在运行!" | tee -a ${logPath}/check_service.logexit 0
fi

编写并调试好后,给脚本添加可执行权限。

然后重启备份服务器上的keepalived服务,确定虚拟IP地址绑定到主服务器上的网卡上。

6、在主服务器和备用服务器上查看虚拟IP是否绑定到ens33网卡上。

7、高可用验证

7.1 模拟宕机,查看虚拟IP是否漂移到备用服务器上,验证高可用效果

方法1:systemctl stop mysqld,停止mysqld服务

方法2:kill杀死mysqld的运行进程,停止mysqld服务


 

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

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

相关文章

echers配置项:X轴,Y轴颜色修改

如上图绿框所示,修改x,y轴的颜色 let option {xAxis: {axisLine:{lineStyle:{color:red}},},yAxis: {type: value,axisLine:{lineStyle:{color:red}},}, }

通过gen_compile_commands.py产生compile_commands.json文件的方法

大家在使用vscode查看linux源代码时,会有很多飘红处,而且函数的跳转非常不方便。所以linux给了一个脚本gen_compile_commands.py,此脚本类似ctags这样,产生相应的关联之类的数据库,方便函数及文件的跳转等等。非常好。…

电感式传感器

电感传感器是基于电磁感应原理,将被测非电量(如位移、压力、振动等)转换为电感量变化的一种结构性传感器。利用自感原理的有自感式传感器(可变磁阻式),利用互感原理的有互感式(差动变压器式和涡…

QT:QML制作线形图

目录 一.介绍 二.引入库 三.自定义属性 四.悬停处理函数 五.设置X轴 六.设置Y轴 七.画线 八.测试点坐标 九.设置值 十.效果演示 十一.代码演示 1.LineGraph.qml 2.main.qml 一.介绍 线形图(也称为折线图)是一种常用的数据可视化工具&#…

如何找到MySQL中存储引擎所对应的表空间并且打开?

在上节课我们学习了数据库(MySQL)进阶:存储引擎,有不少同学产生疑惑,到底要怎么找到表空间并且打开啊?这节课我们就来探讨。 首先,根据这个路径:C:\ProgramData\MySQL\MySQL Server…

谷歌Flank潜藏3年的Github Action供应链攻击

01 简 介 Flank [1] 是谷歌 Firebase Test lab 开源在 Github 的一个项目,用于同时对多个安卓和IOS设备进行测试。2024年4月15号 AWS 安全工程师 Adnan Khan 公布了关于该项目代码仓库 Github Action CI/CD 存在漏洞的细节[2],漏洞在2020年于此 代码合…

02 VUE学习:模板语法

模板语法 Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML 解析器解析。 在底层机制中,Vue 会将模板编译成高度优化的…

开发vue3,真的可以不用ref/reactive了,也不需要ref.value

什么是Cabloy-Front? Cabloy-Front 是一款支持 IOC 容器的 Vue3 框架。不用ref/reactive,不用ref.value,不用pinia 与UI库的配合 Cabloy-Front 可以搭配任何 UI 库使用,并且内置了几款 UI 库的项目模版,便于开箱即用…

免费SSL证书签发安装指南

一、签发 1.选择证书颁发机构(CA):首先,你需要找到一个提供免费SSL证书的CA。有些CA会提供永久免费的SSL证书,而有些则可能只提供有限时间的试用证书,如JoySSL就提供永久免费证书。 2.生成CSR&#xff08…

WPF 鼠标拖拽平移

效果 xaml <ScrollViewer x:Name"scrollViewer" HorizontalScrollBarVisibility"Hidden" VerticalScrollBarVisibility"Disabled" Background"#FFF1ADAD"PreviewMouseDown"ScrollViewer_OnPreviewMouseDown"PreviewMou…

Electron学习笔记(一)

文章目录 相关笔记笔记说明 一、轻松入门 1、搭建开发环境2、创建窗口界面3、调试主进程 二、主进程和渲染进程1、进程互访2、渲染进程访问主进程类型3、渲染进程访问主进程自定义内容4、渲染进程向主进程发送消息5、主进程向渲染进程发送消息6、多个窗口的渲染进程接收主进程发…

白鲸开源CEO郭炜在2024 DataOps发展大会上获聘专家

2024年5月15日&#xff0c;白鲸开源CEO郭炜在2024 DataOps发展大会上被正式聘任为DataOps专家&#xff0c;并获得了荣誉证书。本次大会由中国通信标准化协会主办&#xff0c;中关村科学城管委会提供支持&#xff0c;大数据技术标准推进委员会&#xff08;CCSATC601&#xff09;…

iisnginx环境一次奇怪的跨域问题解决经过

跨域问题描述&#xff1a; iis网站跨域、nginx 网站跨域 都已配置&#xff0c;访问接口依然出现跨域问题。 错误提示&#xff1a; ccess to XMLHttpRequest at ‘https://xxx.com/gameapi/preserve/get/status’ from origin ‘https://cdn.xxx.com’ has been blocked by CO…

GO语言核心30讲 实战与应用 (io包,bufio包,os包,网络服务,http,性能分析)

原站地址&#xff1a;Go语言核心36讲_Golang_Go语言-极客时间 一、io包中的接口和工具 1. strings.Builder、strings.Reader 和 bytes.Buffer 这些类型实现了 io 包的很多接口&#xff0c;目的是什么&#xff1f; 是为了提高不同程序实体之间的互操作性。 程序实体是指比如网…

浏览器插件Video Speed Controller(视频倍速播放),与网页自身快捷键冲突/重复/叠加的解决办法

浏览器插件Video Speed Controller&#xff08;视频倍速播放&#xff09;&#xff0c;与网站自身快捷键冲突/重复/叠加的解决办法 插件介绍问题曾今尝试的办法今日发现插件列表中打开Video Speed Controller的设置设置页面翻到下面&#xff0c;打开实验性功能。将需要屏蔽的原网…

网络工程师----第三十一天

DNS&#xff1a; DNS含义&#xff1a;DNS 是 Domain Name System&#xff08;域名解析系统&#xff09; 端口号&#xff1a;DNS为53&#xff08;UDP&#xff09; 域名的层次结构&#xff1a; 域名的分级&#xff1a; 域名服务器&#xff1a; 域名解析过程&#xff1a; 递归查…

PHP xdebug

使用场景 一台MAC上安装了phpstorm&#xff0c;虚拟机安装了对应的web程序&#xff0c;需要调试。 坑点&#xff0c;网上教程太多&#xff0c;不如看官网&#xff0c;需要按照xdebug版本来配置php.ini https://www.jetbrains.com/help/phpstorm/2023.3/configuring-xdebug.htm…

【Java】HOT100+代码随想录 动态规划(上)背包问题

目录 理论基础 一、基础题目 LeetCode509&#xff1a;斐波那契数 LeetCode70&#xff1a;爬楼梯 LeetCode746&#xff1a;使用最小花费爬楼梯 LeetCode62&#xff1a;不同路径 LeetCode63&#xff1a;不同路径ii LeetCode343&#xff1a;整数拆分 LeetCode96&#xff1a;不…

vue uniapp 小程序 判断日期是今天(显示时分秒)、昨天、本周的周几、超出本周显示年月日

效果图&#xff1a; util.js /*** 转换时间*/ const messageFormat (datetime) >{ let result "";let currentTime new Date();if(isToday(datetime)){result datetime.substring(11,16);}else if(isYesterday(datetime)){result "昨天";}else if(…

操作系统磁盘管理类问题

例题&#xff1a;在磁盘上存储数据的排列方式会影响1/0服务的总时间。假设每个磁道被划分成10个物理块&#xff0c;每个物理块存放1个逻辑记录。逻辑记录R1,R2....R10存放在同一个磁道上&#xff0c;记录的排列顺序如下表所示&#xff1a; 假定磁盘的旋转速度为10ms/周&#xf…