keepalived+Nginx+邮件
实验场景: 我使用keepalived保证nginx的高可用,我想知道什么时候ip发生漂移,可以让ip发生漂移的时候 我的邮箱收到消息.
如果对keepalived不了解,这有详细解释:keepalived与nginx与MySQL-CSDN博客
https://blog.csdn.net/m0_59933574/article/details/134189200?spm=1001.2014.3001.5501
实验步骤:
Nginx通过Upstream模块实现负载均衡
主机清单:
| 主机名 | IP | 系统 | 用途 |
|---|---|---|---|
| Proxy-master | 192.168.231.201 | centos7.5 | 主负载 |
| Proxy-slave | 192.168.231.202 | centos7.5 | 主备 |
| Real-server1 | 192.168.231.203 | Centos7.5 | web1 |
| Real-server2 | 192.168.231.204 | centos7.5 | Web2 |
| Vip for proxy | 192.168.231.225 |
所有机器都配置安装nginx,关闭防火墙与selinux
[root@proxy-master ~]# systemctl stop firewalld //关闭防火墙
[root@proxy-master ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux //关闭selinux,重启生效
[root@proxy-master ~]# setenforce 0 //关闭selinux,临时生效安装nginx, 全部4台
[root@proxy-master ~]# cd /etc/yum.repos.d/
[root@proxy-master yum.repos.d]# vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
[root@proxy-master yum.repos.d]# yum install yum-utils -y
[root@proxy-master yum.repos.d]# yum install nginx -y
实验过程
1、选择两台nginx服务器作为代理服务器。
2、给两台代理服务器安装keepalived制作高可用生成VIP
3、配置nginx的负载均衡
选择201 202为代理服务器
201
# vim /etc/nginx/nginx.conf#Nginx配置文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {worker_connections 1024;
}
http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/mime.types;default_type application/octet-stream;include /etc/nginx/conf.d/*.conf;upstream backend { ####管理服务器组,设置权重server 192.168.231.204:80 weight=1 max_fails=3 fail_timeout=20s;server 192.168.231.203:80 weight=1 max_fails=3 fail_timeout=20s;}server {listen 80;server_name localhost;location / {proxy_pass http://backend;proxy_set_header Host $host:$proxy_port;proxy_set_header X-Forwarded-For $remote_addr;}}
}
202
# vim /etc/nginx/nginx.confuser nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {worker_connections 1024;
}
http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/mime.types;default_type application/octet-stream;include /etc/nginx/conf.d/*.conf;upstream backend { server 192.168.231.204:80 weight=1 max_fails=3 fail_timeout=20s;server 192.168.231.203:80 weight=1 max_fails=3 fail_timeout=20s;}server {listen 80;server_name localhost;location / {proxy_pass http://backend;proxy_set_header Host $host:$proxy_port;proxy_set_header X-Forwarded-For $remote_addr;}}
}
Keepalived实现调度器HA
主备都安装keepalived
[root@zhu ~]# yum install -y keepalived[root@bei ~]# yum install -y keepalived#主备都进行的操作cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak#主备都修改配置文件vim /etc/keepalived/keepalived.conf#这是主的配置文件
! Configuration File for keepalivedglobal_defs {router_id directory1 #辅助改为directory2
}vrrp_instance VI_1 {state MASTER #定义主还是备interface ens33 #VIP绑定接口virtual_router_id 80 #整个集群的调度器一致priority 100 #back改为50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.231.225/24 # vip}
}#这是备的配置文件
! Configuration File for keepalivedglobal_defs {router_id directory2
}vrrp_instance VI_1 {state BACKUP #设置为backupinterface ens33nopreempt #设置到back上面,不抢占资源virtual_router_id 80priority 50 #辅助改为50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.231.225/24}
}
主备均启动keepalived
开机自启
# systemctl enable keepalived
启动
systemctl start keepalived查看ip[root@zhu ~]# ip a | grep 225inet 192.168.231.225/24 scope global secondary ens33
对调度器Nginx健康检查(可选)两台都设置
思路:
让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Nginx失败,则关闭本机的Keepalived
主服务器
vim check_nginx_status.sh #!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
# /etc/init.d/keepalived stopsystemctl stop keepalived
fi 备服务器
vim check_nginx_status.sh #!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
# /etc/init.d/keepalived stopsystemctl stop keepalived
fi 给主备的脚本的执行权限!!!!
chmod +x check_nginx_status.sh
将脚本引用在keepalived的配置文件中
主服务器的keepalived的配置文件
! Configuration File for keepalivedglobal_defs {router_id directory1
}
vrrp_script check_nginx { #引用脚本script "/etc/keepalived/check_nginx_status.sh"interval 5
}
vrrp_instance VI_1 {state MASTER interface ens33 virtual_router_id 80 priority 100 advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.231.225/24 }
track_script {check_nginx}
}
备服务器的keepalived的配置文件
[root@bei ~]# vim /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs {router_id directory2
}
vrrp_script check_nginx {script "/etc/keepalived/check_nginx_status.sh"interval 5
}
vrrp_instance VI_1 {state BACKUP interface ens33nopreempt virtual_router_id 80priority 50 advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.231.225/24}track_script {check_nginx}
}
现在我们就可以实现keepalived的高可用,实现IP漂移,如何以邮件的方式收到呢
我们以QQ邮箱为例
我是自己给自己发,因此我的收件人与发件人 都写了自己的QQ



获取最重要的授权码,授权码拿到手以后
在主备服务器进行相同的操作
主备均下载yum install -y mailx编写配置文件
vim /etc/mail.rcset bsdcompat
set from=xxxxxxxxx@qq.com ###发送者
set smtp=smtp.qq.com
set smtp-auth-user=xxxxxxxxx@qq.com
set smtp-auth-password=jawypsdsdsddbeg ####前面获取到的授权码
set smtp-auth=login
set ssl-verify=ignore
主备编写邮件脚本
主备均进行的操作
cd /etc/keepalived/vim sendmail.sh#!/bin/bash
to_email='xxxxxxxx@qq.com' #这是收件人,
ipaddress=`ip -4 a show dev ens33 | awk '/brd/{print $2}'`
notify() {mailsubject="${ipaddress}to be $1, vip转移"mailbody="$(date +'%F %T'): vrrp 飘移, $(hostname) 切换到 $1"echo "$mailbody" | mail -s "$mailsubject" $to_email
}
case $1 in
master)notify master;;
backup)notify backup;;
fault)notify fault;;
*)echo "Usage: $(basename $0) {master|backup|fault}"exit 1;;
esac
记得给脚本执行权限 chmod +x sendmail.sh
在keepalived的配置文件内引用邮件脚本,主备的配置文件都需要操作
! Configuration File for keepalivedglobal_defs {router_id directory1
}vrrp_script check_nginx {script "/etc/keepalived/check_nginx_status.sh"interval 5
}vrrp_instance VI_1 {state MASTER interface ens33 virtual_router_id 80 priority 100 advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.231.225/24 }track_script {check_nginx}#引用邮件脚本,主备都只需要加这三行即可notify_master "/etc/keepalived/sendmail.sh master"notify_backup "/etc/keepalived/sendmail.sh backup"notify_fault "/etc/keepalived/sendmail.sh fault"}
系统重载,让所有配置文件都重新加载一下
主备都进行
systemctl daemon-reload
开始演示
此时我们的vip在备服务器上
[root@bei ~]# ip a | grep 225inet 192.168.231.225/24 scope global secondary ens33
我们开启主服务器的nginx服务,以及keepalived
[root@zhu ~]# systemctl start nginx [root@zhu ~]# systemctl start keepalived
按照脚本,vip也会从备漂移到主服务器
[root@bei ~]# ip a | grep 225
[root@bei ~]# root@zhu ~]# ip a | grep 225inet 192.168.231.225/24 scope global secondary ens33
收到邮件

实验注意事项
1.写完脚本记得给执行权限
2.每次修改完配置文件记得要重启服务
3.获取qq授权码比较繁琐
相关文章:
keepalived+Nginx+邮件
实验场景: 我使用keepalived保证nginx的高可用,我想知道什么时候ip发生漂移,可以让ip发生漂移的时候 我的邮箱收到消息. 如果对keepalived不了解,这有详细解释:keepalived与nginx与MySQL-CSDN博客https://blog.csdn.ne…...
CMakeCache.txt有什么用
2023年11月11日,周六上午 CMakeCache.txt 是由 CMake 自动生成的一个缓存文件,用于记录在配置过程中生成的各种变量和选项的值。 在使用 CMake 构建项目时,CMake 会根据 CMakeLists.txt 文件中的配置和命令,解析项目的源代码并生…...
ZYNQ_project:key_breath
[Synth 8-327] inferring latch for variable led_breath_reg ["C:/Users/warrior/Desktop/ZYNQ/pl/key_breath/rtl/led_breath.v":66] 因为在组合逻辑中,用了非阻塞赋值的方式赋值信号。 组合逻辑自己给自己赋值会产生组合回环,输出不稳定。 …...
设计模式 (原则)
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本 一、开闭原则 对扩展开放,对修改关闭。 案…...
LeetCode 每日一题 2023/11/6-2023/11/12
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 11/6 318. 最大单词长度乘积11/7 2586. 统计范围内的元音字符串数11/8 2609. 最长平衡子字符串11/9 2258. 逃离火灾11/10 2300. 咒语和药水的成功对数11/11 765. 情侣牵手1…...
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
一、传统磁盘管理的弊端 传统的磁盘管理:使用MBR先对硬盘分区,然后对分区进行文件系统的格式化最后再将该分区挂载上去。 传统的磁盘管理当分区没有空间使用进行扩展时,操作比较麻烦。分区使用空间已经满了,不再够用了ÿ…...
CTFHUB-WEB-SQL注入
sql学的太不好了,回炉重造 判断 Sql 注入漏洞的类型: 1.数字型 当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:select * from <表名> where id x这种类型可以使用经典的 and 11 和 and 12 来判断ÿ…...
案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理
这家汽车行业的客户缺乏一套系统来支持产品研发过程的管理。他们一直在寻找一款可以覆盖从基本需求到产品开发,再到项目实施等各个阶段的研发管理工具,并且需要这款工具又一定的灵活性,更好地适应并提升现有的业务流程。 通过引入Atlassian的…...
【算法与数据结构】40、LeetCode组合总和 II
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:【算法与数据结构】39、LeetCode组合总和的基础之上,这道题变成了candidates中有重复元素&…...
Flink SQL -- 命令行的使用
1、启动Flink SQL 首先启动Flink的集群,选择独立集群模式或者是session的模式。此处选择是时session的模式:yarn-session.sh -d 在启动Flink SQL的client: sql-client.sh 2、kafka SQL 连接器 在使用kafka作为数据源的时候需要上传jar包到…...
asp.net core把所有接口和实现类批量注入到容器
要将所有接口和实现类批量注入到容器,可以使用反射和循环来实现自动批量注册。下面是一种示例方法: 创建一个扩展方法,用于批量注册接口和实现类。 public static class ServiceCollectionExtensions {public static IServiceCollection Re…...
SPSS曲线回归
前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…...
软件之禅(七)面向对象(Object Oriented)
黄国强 2023/11/11 前文提到面向对象构建的模块控制器,根据第一性原理,从图灵机的角度,面向对象不是最基本的元素。那么面向对象是不是不重要呢? 答案是否定的,面向对象非常非常重要。当我们面对一个具体的领域…...
汽车之家车型_车系_配置参数数据抓取
// 导入所需的库 #include <iostream> #include <fstream> #include <string> #include <curl/curl.h> #include <regex>// 声明全局变量 std::string htmlContent; std::regex carModelRegex("\\d{4}-\\d{2}-\\d{2}"); std::regex ca…...
RabbitMQ的 五种工作模型
RabbitMQ 其实一共有六种工作模式: 简单模式(Simple)、工作队列模式(Work Queue)、 发布订阅模式(Publish/Subscribe)、路由模式(Routing)、通配符模式(Topi…...
原型制作神器ProtoPie的使用Unity与网页跨端交互
什么是ProtoPie? ProtoPie是一款面向设计师的软件原型设计工具,例如制作App界面交互展示,制作好的原型可以一键发布到Web服务器,就可以浏览器访问。由于其内置了大量常用交互类型,以及"程序化"模块…...
另辟奚径-Android Studio调用Delphi窗体
大家都知道Delphi能调用安卓SDK,比如jar、aar等, 但是反过来,能在Android Studio中调用Delphi开发的窗体吗? 想想不太可能吧, Delphi用的是Pascal,Android Studio用的是Java,这两个怎么能混用…...
SOLID 原则,程序设计五大原则,设计模式
SOLID 是让软件设计更易于理解、更加灵活和更易于维护的五个原则的简称。 单一职责(Single Responsibility Principle):修改一个类的原因只能有一个。开闭原则(Open/Closed Principle):对于扩展,类应该是“开放”的;对于修改&…...
Java基础——数组(一维数组与二维数组)
文章目录 一维数组声明初始化与赋值内存图解 二维数组声明初始化与赋值内存图解 数组练习 数组是多个相同类型的数据按一定顺序排列的集合。 说明: 数组是引用数据类型,数组的元素是同一类型的任何数据类型,包括基本数据类型和引用数据类型…...
Python爬虫抓取微博数据及热度预测
首先我们需要安装 requests 和 BeautifulSoup 库,可以使用以下命令进行安装: pip install requests pip install beautifulsoup4然后,我们需要导入 requests 和 BeautifulSoup 库: import requests from bs4 import BeautifulSou…...
避坑指南:Spark On Hive配置中那些容易踩的雷(基于Spark 3.5.7 + Hive + MySQL 8)
Spark与Hive集成实战:避坑指南与深度优化 当Spark遇上Hive,数据处理的威力倍增,但集成过程中的配置陷阱也让人防不胜防。本文将聚焦Spark 3.5.7与Hive Metastore的深度集成,特别是与MySQL 8的兼容性问题,为已经完成基础…...
华为手机系统降级实战:为什么以及如何从HarmonyOS 2回退到EMUI 10.1?
华为手机系统降级全解析:从HarmonyOS 2回退EMUI 10.1的技术抉择 当手机系统更新推送通知弹出时,多数用户会毫不犹豫点击"立即安装"。但总有那么一群"逆行者",他们深入研究每个版本的优劣,甚至愿意冒着风险将已…...
VoiceFixer终极指南:一键修复受损录音的AI音频救星
VoiceFixer终极指南:一键修复受损录音的AI音频救星 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 你是否曾为老旧录音中的噪音和失真而烦恼?VoiceFixer是一款开源的AI音频修复…...
如何用JD-GUI轻松破解Java字节码:Java反编译终极指南
如何用JD-GUI轻松破解Java字节码:Java反编译终极指南 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 你是否曾面对只有编译后的.class文件却急需查看源码的困境?当你需要分析第三…...
别再只用默认图标了!手把手教你用ECharts自定义地图点样式与交互式图例(附完整Vue项目代码)
别再只用默认图标了!手把手教你用ECharts自定义地图点样式与交互式图例(附完整Vue项目代码) 当我们需要在地图上展示业务网点分布、事件热力或区域统计数据时,ECharts无疑是前端开发者的首选工具。但你是否厌倦了千篇一律的圆形标…...
别再只盯着batch-size了!用Tesla V100训练YOLO时,这些隐藏的显存杀手和监控技巧你知道吗?
别再只盯着batch-size了!用Tesla V100训练YOLO时,这些隐藏的显存杀手和监控技巧你知道吗? 当你手握一块Tesla V100这样的顶级GPU,却发现训练YOLO时依然频频遭遇"爆显存"的尴尬,这感觉就像开着跑车却堵在早高…...
企业级跨平台UI开发实战:深度解析Semi.Avalonia主题库的设计哲学与技术实现
企业级跨平台UI开发实战:深度解析Semi.Avalonia主题库的设计哲学与技术实现 【免费下载链接】Semi.Avalonia Avalonia theme inspired by Semi Design 项目地址: https://gitcode.com/gh_mirrors/se/Semi.Avalonia 在当今多平台应用开发的时代,开…...
免费AI语音修复工具VoiceFixer:3分钟快速修复任何受损音频的终极指南
免费AI语音修复工具VoiceFixer:3分钟快速修复任何受损音频的终极指南 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 你是否曾经因为录音质量差而感到困扰?无论是播客中的背景…...
避开安川MP3300通讯的那些坑:服务端/客户端模式选择、地址分配与MSG函数配置详解
安川MP3300工业通讯实战:服务端/客户端模式深度解析与高阶配置 在工业自动化系统集成中,安川MP3300控制器与上位机的稳定通讯往往是项目成败的关键分水岭。许多工程师在完成基础配置后,仍会在实际调试阶段遭遇各种"幽灵问题"——通…...
Verilog仿真踩坑记:$readmemh读取文件,路径和位宽问题怎么破?(附完整代码)
Verilog仿真实战:$readmemh高频问题排查指南 第一次在仿真中调用$readmemh加载测试数据时,屏幕上突然弹出的七百多个警告让我头皮发麻。波形图上那些刺眼的红色"X"仿佛在嘲笑我的无知——这场景想必很多Verilog开发者都不陌生。作为数字电路仿…...
