keepalived+Nginx+邮件

news2024/11/20 7:09:05

实验场景: 我使用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授权码比较繁琐

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

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

相关文章

在Spring Boot中使用JTA实现对多数据源的事务管理

了解事务的都知道,在我们日常开发中单单靠事务管理就可以解决绝大多数问题了,但是为啥还要提出JTA这个玩意呢,到底JTA是什么呢?他又是具体来解决啥问题的呢? JTA JTA(Java Transaction API)是…

思维模型 梅拉宾法则

1 梅拉宾法则的应用 1.1 演讲口才中的梅拉宾法则应用 苹果公司的演讲:苹果公司的演讲一直以来都以其独特的风格和效果著称。苹果公司的演讲者在演讲中注重运用肢体语言和声音等非语言因素,如手势、表情和语调等,来增强演讲的效果。例如&am…

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

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

Linux学习教程(第一章 简介)3

第一章 简介 七、Linux系统的优缺点 前面章节提到,相比 Windows 系统,Linux 系统有更好的稳定性,那么除此之外,Linux 系统还有那些优点(或者不足)呢?本节带领大家详细了解一下。 1、大量的可…

【Kurbernetes集群】Pod资源、Pod资源限制和Pod容器的健康检查(探针)详解

Pod资源 一、Pod概述1.1 Pod的定义1.2 一个Pod能包含几个容器?1.3 Pod的分类1.3.1 控制器管理的Pod1.3.2 自主式Pod1.3.3 静态Pod 1.4 Pod中容器的分类1.4.1 Pause容器1.4.2 初始化容器1.4.3 应用容器 1.5 Pod常见的状态 二、Pod中的策略2.1 镜像拉取策略2.2 Pod中容…

另辟奚径-Android Studio调用Delphi窗体

大家都知道Delphi能调用安卓SDK,比如jar、aar等, 但是反过来,能在Android Studio中调用Delphi开发的窗体吗? 想想不太可能吧, Delphi用的是Pascal,Android Studio用的是Java,这两个怎么能混用…

AI时代如何提升自己晋升力

要在AI时代提升职场晋升力,采取以下详细策略: 终身学习的实践: 专业课程: 定期参加在线课程或研讨会,如Coursera、edX等,学习最新的AI技术和行业动态。行业资讯: 订阅相关的行业杂志、博客&…

通过海康私有协议Ehome/ISUP协议将海康摄像头、录像机等设备统一接入到LiveNVR Web流媒体平台实现统一汇聚及Web播放等的配置说明,

LiveNVR海康摄像头海康NVR通过EHOME协议ISUP协议接入支持转GB28181级联 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成功 4、相关问题4.1…

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

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

毅速课堂丨3D打印随形水路在注塑生产中的优势

随着科技的不断发展,3D打印技术已经成为了模具制造领域的一种重要技术。其中,3D打印随形水路在注塑生产中的应用也越来越广泛。 3D打印随形水路在注塑生产中的优势主要有以下几点: 一、提高生产效率 3D打印随形水路可以根据注塑产品的形状和…

帝国cms中如何让外部链接直接从新窗口打开页面

<?php if($bqr[isurl]) { ?> <a href"<?$bqsr[titleurl]?>" target"_blank"> <?php } else { ?> <a href"<?$bqsr[titleurl]?>"> <?php } ?>

.NET快速对接极光消息推送

什么是消息推送&#xff1f; 很多手机APP会不定时的给用户推送消息&#xff0c;例如一些新闻APP会给用户推送用户可能感兴趣的新闻&#xff0c;或者APP有更新了&#xff0c;会给用户推送是否选择更新的消息等等&#xff0c;这就是所谓的“消息推送”。 常见的一些APP消息推送…

使用idea插件快速生成arthas命令

这里分享一个插件&#xff0c;叫做arthas idea。 这个插件我主要是用来在本地生成一些要使用的arthas命令&#xff0c;然后复制到线上使用&#xff0c;这样可以避免记忆大量的arthas命令&#xff0c;加速排查效率&#xff0c;不过哪种情况要用哪些arthas命令&#xff0c;还是需…

Mac下eclipse配置JDK

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

【Acwing171】送礼物(双向dfs)题解

本题思路来源于acwing算法提高课 题目描述 看本文需要准备的知识 1.二分&#xff08;强烈推荐文章&#xff1a;http://t.csdnimg.cn/Mx9Lr&#xff09; 2.dfs基本思想&#xff0c;了解“剪枝”这个术语 思路分析 首先这道题目看起来就是一个01背包&#xff0c;但是如果直接…

机器学习算法——线性回归与非线性回归

目录 1. 梯度下降法1.1 一元线性回归1.2 多元线性回归1.3 标准方程法1.4 梯度下降法与标准方程法的优缺点 2. 相关系数与决定系数 1. 梯度下降法 1.1 一元线性回归 定义一元线性方程 y ω x b y\omega xb yωxb 则误差&#xff08;残差&#xff09;平方和 C ( ω , b ) …

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

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

[LeetCode]-225. 用队列实现栈-232. 用栈实现队列

目录 225. 用队列实现栈 题目 思路 代码 232. 用栈实现队列 题目 思路 代码 225. 用队列实现栈 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/implement-stack-using-queues/description/ 题目 请你仅使用两个队列实现一个后…

基于SSM的电子病历系统

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

ubuntu上如何移植thttpd

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