实操keepalived(高可用)+Nginx(四层代理+七层代理),实现高可用、负载均衡以及动静分离

目录

前言

一、master主机的配置,安装nginx服务,并设置四层反向代理(修改配置文件)

二、编写监控脚本

三、安装keepalived,修改配置文件

四、将nginx的配置和keepalived、脚本都复制到备份服务器上

五、进行测试

1、验证可以通过VIP访问静态资源、以jsp和php结尾的动态资源

2、验证关闭nginx服务,是否会故障切换至备服务器

3、重启keepalived查看是否会抢占

4、关闭主的配置,查看备服务器的状态

总结:


前言

架构图,最终的目的是通过keepalived实现两台四层代理服务器热备,然后通过nginx做四层代理,两个nginx做七层的反向代理,tomcat和php做中间件,最后实现通过访问VIP可以访问静态资源、以及以jsp和php结尾的动态资源请求。

keepalived内置监控脚本,检测NGINX的健康状态

实验是在上一篇的基础上进行修改,完成Nginx+keepalived的组合,实现高可用和负载均衡

一、master主机的配置,安装nginx服务,并设置四层反向代理(修改配置文件)

复制代码
[root@localhost yum.repos.d]# yum install -y nginx

yum安装的nginx是自带stream模块的

复制代码
stream{
    upstream backends{
        server 192.168.20.10:80 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.20.30:80 weight=1 max_fails=2 fail_timeout=30s;
    }
    server {
        listen 9527;
        proxy_pass backends; ##四层代理直接加上节点服务器池的名称,不用加上协议
    }
}
max_fails=2 ##允许请求失败的次数,默认为1
fail_timeout=30s ##如果达到了max_fails的失败次数,将暂停后端服务的时间,默认为10s,改为30s
复制代码
[root@localhost yum.repos.d]# cp /etc/nginx/nginx.conf{,.bak} 
[root@localhost yum.repos.d]# vim /etc/nginx/nginx.conf
[root@localhost yum.repos.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost yum.repos.d]# systemctl restart nginx

二、编写监控脚本

复制代码
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# 
[root@localhost keepalived]# ls
check_nginx.sh  keepalived.conf  keepalived.conf.bak
[root@localhost keepalived]# cat check_nginx.sh 
#!/bin/bash
A=`ps -C nginx --no-header |wc -l` ##探测是否有nginx服务
if [ $A -eq 0 ];then               ##如果没有
       systemctl stop keepalived        ##那么关闭keepalived服务
fi




##生成建议判断可否将nginx重启,但是测试的时候,可以省略这一步
#!/bin/bash
A=`ps -C nginx --no-header |wc -l` ##探测是否有nginx服务
if [ $A -eq 0 ];then               ##如果没有
    systemctl restart nginx        ##重启一下nginx服务
    B=`ps -C nginx --no-header |wc -l`  ##再次探测是否有nginx服务
    if  [ $B -eq 0 ];then               ##如果还是没有
       systemctl stop keepalived        ##那么关闭keepalived服务
    fi
fi

三、安装keepalived,修改配置文件

复制代码
[root@localhost yum.repos.d]# yum install -y keepalived.x86_64
复制代码
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_01
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight 1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.20.166
    }
    track_script {
        check_nginx
    }
}

四、将nginx的配置和keepalived、脚本都复制到备份服务器上

复制代码
[root@localhost yum.repos.d]# scp /etc/nginx/nginx.conf 192.168.20.16:`pwd`

nginx的配置文件可以完全不做任何修改 ,但是keepalived的配置文件需要修改一下

复制代码
[root@localhost keepalived]# scp check_nginx.sh keepalived.conf 192.168.20.16:`pwd`

五、进行测试

1、验证可以通过VIP访问静态资源、以jsp和php结尾的动态资源

2、验证关闭nginx服务,是否会故障切换至备服务器

3、重启keepalived查看是否会抢占

4、关闭主的配置,查看备服务器的状态

总结:

LVS是基于内核的四层代理,只要系统没有宕机那么lvs就会存活,

但是nginx是属于应用程序的服务,那么就需要对nginx做健康检查,此健康检查通过脚本来实现,探测nginx是否存活的脚本有很多,最后结合if去判断

复制代码
方案一:killall -0 ngin ##如果返回值是0,那么nginx存活,如果不为0,nginx断开了

方案二:ps -C nginx --no-header | wc -l ##如果这个值为0 那就是没有nginx服务

方案三:ss -natp|grep nginx  ##$?为0,那就是存在nginx服务,如果不为0,那就是不存在nginx服务

方案四:netstat -natp|grep nginx 一样的

方案五:ps aux|egrep -v "grep|$$"|grep nginx|wc -l

方案六:pidof nginx   ##$?为0,那就是存在nginx服务,如果不为0,那就是不存在nginx服务

方案七:lsof -i :80 ##$?为0,那就是存在nginx服务,如果不为0,那就是不存在nginx服务
相关推荐
智码看视界1 分钟前
Day59-阿里云ACK实战:生产级K8s集群部署与运维
运维·阿里云·kubernetes·k8s·日志监控·容器运维·阿里云ack
ltl1 小时前
QUIC 握手实现:Initial 到 1-RTT 的最小路径
linux
码视野2 小时前
基于 Vue3 + Element Plus 的【智慧新能源汽车充电桩运维调度与分时共享租赁系统】设计与实现(附完整源码与PRD)
运维·人工智能·汽车·vue3
qq_426003962 小时前
【UI自动化测试】UI自动化报错解决方案
运维·ui·自动化
网安蟹佬霸2 小时前
WAF绕过技术实战:从规则检测到编码绕过全指南(2026最新版,附Payload集与自动化脚本)
运维·安全·网络安全·架构·自动化·网安
小杨不想秃头2 小时前
信息安全工程师教程第二章密码学
运维·服务器·密码学
I'mChloe2 小时前
WGCLOUD怎么监控多台服务器?从Server、Agent 部署到监控面板实战
运维·服务器
Android系统攻城狮3 小时前
Linux PipeWire深度解析之pw_init调用流程与实战(八十三)
linux·运维·服务器·音频进阶·pipewire音频进阶
国科安芯3 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座
M78佐菲3 小时前
Linux学习笔记:进程
linux·笔记·学习·算法