keepalived+Nginx+邮件

实验场景: 我使用keepalived保证nginx的高可用,我想知道什么时候ip发生漂移,可以让ip发生漂移的时候 我的邮箱收到消息.

如果对keepalived不了解,这有详细解释:keepalived与nginx与MySQL-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_59933574/article/details/134189200?spm=1001.2014.3001.5501

实验步骤:

Nginx通过Upstream模块实现负载均衡

主机清单:

主机名IP系统用途
Proxy-master192.168.231.201centos7.5主负载
Proxy-slave192.168.231.202centos7.5主备
Real-server1192.168.231.203Centos7.5web1
Real-server2192.168.231.204centos7.5Web2
Vip for proxy192.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授权码比较繁琐

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

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

相关文章

竞赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习行人重识别(person reid)系统 该项目…

【Copilot】登录报错 Extension activation failed: “No auth flow succeeded.“(VSCode)

问题描述 Visual Studio Code 登录 GitHub Copilot 插件报错。 在浏览器中成功授权 GitHub 账户,返回 VSCode 后仍然报错。 [ERROR] [default] [2023-11-06T12:34:56.185Z] Extension activation failed: "No auth flow succeeded."原因分析 网络环境问…

山西电力市场日前价格预测【2023-11-12】

日前价格预测 预测说明: 如上图所示,预测明日(2023-11-12)山西电力市场全天平均日前电价为224.59元/MWh。其中,最高日前电价为434.30元/MWh,预计出现在18:00。最低日前电价为0.00元/MWh,预计出…

SpringBoot 缓存之 @Cacheable 详细介绍

一、简介 1、缓存介绍 Spring 从 3.1 开始就引入了对 Cache 的支持。定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术。并支持使用 JCache(JSR-107)注解简化我们的开发。 其…

c语言,将奇数和偶数分类

题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。 思路:像冒泡排序那样,相邻两个数比较,两个都是偶数则不…

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:

错误描述如下所示: 我们将错误拉到最下面如下所示为导致异常的原因: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type com.example.reviewmybatisplus.Service.UserService available: expec…

Perl语言用多线程爬取商品信息并做可视化处理

首先,我们需要使用Perl的LWP::UserAgent模块来发送HTTP请求。然后,我们可以使用HTML::TreeBuilder模块来解析HTML文档。在这个例子中,我们将使用BeautifulSoup模块来解析HTML文档。 #!/usr/bin/perl use strict; use warnings; use LWP::User…

班级新闻管理系统asp.net+sqlserver

班级新闻管理系统 附加功能 新闻图片,点击次数访问自增,每个人都只能增删改查自己发布的新闻,并可以看到所有人发布的新闻 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql serve…

内存条选购注意事项(电脑,笔记本)

电脑内存条的作用、选购技巧以及注意事项详解 - 郝光明的个人空间 - OSCHINA - 中文开源技术交流社区 现在的电脑直接和内存条联系 电脑上的所有输入和输出都只能依靠内存条 现在买双条而不是单条 买两个相同的内存条最好 笔记本先分清是低电压还是标准电压,DD…

前端和空字符串、零比较时请务必使用===

在前端开发中遇到一个问题,以下两条语句的结果都是true。 console.log(0 ""); console.log(false ""); 这就导致了editingId为0的时候,if分支并没有执行,而我的本意是当editingId不是空也不是空字符串的时候执行分支…

可视化 | 3D文字球状标签云

文章目录 📚改编点📚final 改编自echarts 3d词云(指向滑动、拖动、缩放、点击、自转 ) 📚改编点 背景透明:background:rgb(0,0,0,0);不用链接,用span,重点span标class"star&q…

3d max软件中的缓存垃圾该如何清理?

使用3d max建模到渲染操作,来回对效果图调整的次数过多时,就会出现一下看不到的垃圾缓存,影响保存的速度,影响效率! 对于这类的3d垃圾清理的有什么高效方法呢? 3dmax垃圾清理的常规操作如下: 1、…

跨镜头目标融合__追踪之目标重识别研究(跨镜头目标追踪)

文章目录 标题:跨镜头目标融合;目标重识别;跨镜头目标追踪; 1 目的:2 实现方法/策略:2.1 目标类型位置匹配(或考虑结合目标轨迹)2.2 目标重识别2.3 目标类型位置匹配(轨迹)目标重识别…

14 # 手写 debounce 防抖方法

什么是防抖 防抖: n 秒后再去执行该事件,若在 n 秒内被重复触发,则重新计时,这个效果跟英雄联盟里的回城技能差不多。 本质上是优化高频率执行代码的一种手段,目的就是降低回调执行频率、节省计算资源。 应用场景: …

使用 huggingface_hub 镜像下载 大模型

download.py 👇 import os # 配置 hf镜像 os.environ[HF_ENDPOINT] https://hf-mirror.com# 设置保存的路径 local_dir "XXXXXX"# 设置仓库id model_id "sensenova/piccolo-large-zh"cmd f"huggingface-cli download --resume-downlo…

Python 列表元素里面含有字典或者列表进行排序

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 示例1:列表里面含有列表进行排序 s [[1, 2], [100, 2], [33, 3], [25, 6]] s.sort(keylambda k: k[0]) print(s)结果: [[1, 2], [25, 6], [33, 3…

C++动态库

C动态库 动态库文件(Dynamic Link Library,DLL)是程序在运行时所需要调用的库。静态库文件是程序在编译时所需要调用的库。 1 环境介绍 VS版本:VS2017 编程语言:C 2 功能介绍 使用VS2017项目模板创建C动态库生成…

ARM 基础学习记录 / ARM 裸机编程

汇编程序调用 C 程序详情 在 C 程序和 ARM 汇编程序之间相互调用时必须遵守 ATPCS 规则,其是基于 ARM 指令集和 THUMB 指令集过程调用的规范,规定了调用函数如何传递参数,被调用函数如何获取参数,以何种方式传递函数返回值。 寄存…

为什么要做MBTI职业性格测试?

MBTI职业性格测试是一种成熟的人格测评工具,基于荣格理论发展而来,将人的性格分为16种类型,或内向。或外向,或注重情感,或注重感知。 每种性格各有长处和不足,通过应用mbti职业性格测试,可以方…

暖手宝+充电宝设计方案 可实现快速升温和充电 低成本充电电流可选

充电暖手宝因为它的便携性,既能供暖又能当充电宝使用而备受人们喜爱。是冬天暖手供暖的必备神器。 目前,市场常见的暖手宝大致有三个类型,分别是加热水的热水袋、通过化学反应放热的铁粉袋子和锂电供电的智能暖手宝。与常见的暖手宝不同&…