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.conf

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;
        }
    }
}

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 keepalived

global_defs {
   router_id directory1   #辅助改为directory2
}

vrrp_instance VI_1 {
    state MASTER        #定义主还是备
    interface ens33     #VIP绑定接口
    virtual_router_id 80  #整个集群的调度器一致
    priority 100         #back改为50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.231.225/24   # vip
    }
}


#这是备的配置文件
! Configuration File for keepalived

global_defs {
   router_id directory2
}

vrrp_instance VI_1 {
    state BACKUP    #设置为backup
    interface ens33
    nopreempt        #设置到back上面,不抢占资源
    virtual_router_id 80
    priority 50   #辅助改为50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.231.225/24
    }
}

主备均启动keepalived

开机自启
# systemctl enable keepalived
启动
systemctl start keepalived

查看ip

[root@zhu ~]# ip a | grep 225
    inet 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 stop
	systemctl 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 stop
	systemctl stop keepalived
fi	

给主备的脚本的执行权限!!!!
chmod +x check_nginx_status.sh 

将脚本引用在keepalived的配置文件中

主服务器的keepalived的配置文件
! Configuration File for keepalived

global_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 1
    authentication {
        auth_type PASS
        auth_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 ens33
    nopreempt       
    virtual_router_id 80
    priority 50  
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.231.225/24
    }

   track_script {
        check_nginx
    }
}

现在我们就可以实现keepalived的高可用,实现IP漂移,如何以邮件的方式收到呢

我们以QQ邮箱为例

我是自己给自己发,因此我的收件人与发件人 都写了自己的QQ

获取最重要的授权码,授权码拿到手以后

在主备服务器进行相同的操作

主备均下载
 yum install -y mailx

编写配置文件
vim /etc/mail.rc

set 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 keepalived

global_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 1
    authentication {
        auth_type PASS
        auth_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 225
    inet 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 225
    inet 192.168.231.225/24 scope global secondary ens33

收到邮件

实验注意事项

1.写完脚本记得给执行权限

2.每次修改完配置文件记得要重启服务

3.获取qq授权码比较繁琐

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中国智能驾驶的“突围赛”打响,这家本土厂商为何能成为“先行者”?

中国本土厂商正在成为全球智能汽车产业链的“核心力量”。 根据《高工智能汽车研究院》数据显示,今年1-6月,自主品牌标配L2(含L2)级辅助驾驶交付新车155.34万辆。其中,搭载中国本土智能驾驶解决方案提供商&#xff08…

【LeetCode】每日一题 2023_11_11 情侣牵手(并查集/贪心)

文章目录 刷题前唠嗑题目:情侣牵手题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode? 启动!!! 好好好,这么玩是吧,双十一出道情侣牵手 题目:情侣牵手 题目链接:765…

C++ static关键字

C static关键字 1、概述2、重要概念解释3、分情况案例解释3.1 static在类内使用3.2 static在类外使用案例一:案例二:案例三 1、概述 static关键字分为两种情况: 1.在类内使用 2.在类外使用 2、重要概念解释 (1)翻译…

初识RabbitMQ - 安装 - 搭建基础环境

RabbitMQ 各个名词介绍 Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当…

【Java】智慧工地云平台源码支持多端展示(PC端、手机端、平板端)

智慧工地系统实现工地的数字化、精细化、智慧化生产和管理。 一、智慧工地发展趋势 1.更加智能 未来的智慧工地系统将逐步植入人工智能和虚拟现实等高科技技术以更为智慧的方式,来实现岗位人员与工地现场的交互与配合。智慧工地系统能够在工程全生命周期管理的过程…

单挑特斯拉,华为智选车迈入第二阶段

文丨刘俊宏 编丨王一粟 华为智选车的节奏越来越快。 11月9日,华为跟奇瑞打造的首款C级纯电轿车智界S7发布,预售价为25.8万起。 在发布会上,华为常务董事、终端BG CEO、智能汽车解决方案BU董事长余承东采取手机以往最惯用的对标营销手法&a…

激光雷达标定板是自动驾驶系统中关键部件

中国政府制定了多项产业发展规划,包括《汽车产业中长期发展规划》和《新一代人工智能发展规划》等,旨在推动汽车产业的转型升级,培育具有国际竞争力的汽车品牌,同时鼓励企业加大对自动驾驶技术研发的投入,加快自动驾驶…

StartUML的基本使用

文章目录 简介和安装创建包创建类视图时序图 简介和安装 最近在学习一个项目的时候用到了StartUML来构造项目的类图和时序图 虽然vs2019有类视图,但是也不是很清晰,并没有生成uml图,但是宇宙最智能的IDE IDEA有生成uml图的功能 下面就简单介…

Mac下eclipse配置JDK

一、配置JDK,需要电脑下载Java并且配置环境 Mac环境配置(Java)----使用bash_profile进行配置(附下载地址) (1)、左上角找到“Eclipse”-->“Preferences...” (2)、找到“Java”-->“Installde JREs”-->界…

C语言计算字符串中数字字符的个数

文章目录 1-9题前言例题10例题11答案例题10答案答案1答案2 例题11答案 1-9题 C语言基础例题1-3题-指针篇 C语言基础例题4-5题-二维数组篇 C语言基础例题6-7题-结构体篇 C语言基础例题8-9题-大作业篇 前言 下列题目需要学习字符串、指针后才可练习。 例题10 请编写一个程序…

【完美世界】云曦限定皮肤成意难平,受广泛赞誉,算是大获成功

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料《完美世界》最新资讯。近期,《完美世界》的热度直线上升,超越了其他国漫和电视剧,登顶平台畅销榜第一,观众们更是将其与巅峰时期的《斗罗大陆》相提并论…

基于SSM的电子病历系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

关于Google Play应用商店的优化技巧1

作为Google Play商店ASO策略的一部分,我们需要查明并优化有助于应用排名的各种因素。在这里将介绍几个可以增强我们列表并增加在搜索中被发现的机会的技巧。 1、优化标题和描述字段。 在创建有效的Google Play商店列表时,我们应该考虑的第一个元素是应用…

AD教程 (十二)原理图的编译设置和检查

AD教程 (十二)原理图的编译设置和检查 通过肉眼初步排查,观察一下原理图上有什么错误 工程编译排查错误 选中工程,右键,选择Compile PCB Project对工程进行编译,根据编译报错,定位错误&#…

Linux文件类型与权限及其修改

后面我们写代码时,写完可能会出现没有执行权限什么的,所以我们要知道文件都有哪些权限和类型。 首先 就像我们之前目录结构图里面有个/dev,它就是存放设备文件的,也就是说,哪怕是一个硬件设备,例如打印机啥的&#xf…

Springboot+vue的高校办公室行政事务管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的高校办公室行政事务管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的高校办公室行政事务管理系统,采用M(m…

UnRaid安装安装仓库管理系统GreaterWMS

文章目录 0、前言1、安装流程1.1、克隆GreaterWMS项目到UnRaid本地目录1.2、修改项目前后端端口1.3、修改baseurl1.4、修改Nginx.conf配置文件1.5、安装依赖插件1.5.1、Docker Compose Manager插件1.5.2、Python3环境 1.6、创建GreaterWMS容器1.6.1、为前后端启动脚本赋执行权限…

Postman模拟上传文件

如图,在F12抓到的上传文件的请求 那要在postman上模拟这种上传,怎么操作呢,如图,选中【Select File】选取文件上传即可

Flink在汽车行业的应用【面试加分系列】

很多同学问我为什么要发这些大数据前沿汇报? 一方面是自己学习完后觉得非常好,然后总结发出来方便大家阅读;另外一方面,看这些汇报对你的面试帮助会很大,特别是面试前可以看看即将面试公司在大数据前沿的发展动向&…

ubuntu上如何移植thttpd

thttpd的特点 thttpd 是一个简单、小巧、便携、快速且安全的 HTTP 服务器。 简单: 它只处理实现 HTTP/1.1 所需的最低限度。好吧,也许比最低限度多一点。 小: 请参阅比较图表。它还具有非常小的运行时大小,因为它不会分叉并且非…