实操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服务
相关推荐
linux修理工4 分钟前
n1 Armbian OS 24.11.0 noble 安装suricata
linux·运维·服务器
傅里叶8 分钟前
sudo启动Flutter程序AMD初始化失败
linux·flutter
bug攻城狮9 分钟前
CentOS 7 出现 “Could not resolve host“ 错误的修复方案
linux·运维·centos
feifeigo12324 分钟前
CentOS系统管理:useradd命令的全面解析
linux·运维·centos
こ进制掌控者28 分钟前
CentOS 8重启后网卡不见了解决办法
linux·运维·centos
荣光波比28 分钟前
Nginx 实战系列(六)—— Nginx 性能优化与防盗链配置指南
运维·nginx·性能优化·云计算
Nightwish532 分钟前
Linux随记(二十三 )
linux·运维
萧鼎43 分钟前
深入解析 Python 的 pytun 库:虚拟网络接口与隧道技术实战指南
服务器·网络·python
Re_Yang091 小时前
2025年统计与数据分析领域专业认证发展指南
服务器·人工智能·数据分析
牛奶咖啡132 小时前
从零到一使用Linux+Nginx+MySQL+PHP搭建的Web网站服务器架构环境——LNMP(上)
linux·lnmp·ngnix的源码安装部署·mysql的二进制文件安装部署·php源码的安装部署·记录并解决安装php的各种问题