实操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服务
相关推荐
wanhengidc25 分钟前
云手机的硬件依赖性如何?
运维·服务器·智能手机·云计算
piaoroumi29 分钟前
UVC调试
linux·运维·前端
VekiSon36 分钟前
Linux系统编程——标准IO
linux·运维·服务器
老姚---老姚1 小时前
Nginx Location 匹配优先级详解
nginx
Evan芙1 小时前
DNS服务器类型,解析答案,正反解析域,资源记录定义总结
运维·服务器
露临霜1 小时前
Docker安装nginx
nginx·docker·容器
AlianNiew1 小时前
Nginx 反向代理 403 问题复盘
nginx
wanhengidc1 小时前
巨椰 云手机办公便利性高
运维·服务器·安全·智能手机·云计算
油丶酸萝卜别吃1 小时前
lombok的几个核心注解是什么?
java·tomcat
Saniffer_SH1 小时前
【每日一题】PCIe答疑 - 接大量 GPU 时主板不认设备或无法启动和MMIO的可能关系?
运维·服务器·网络·人工智能·驱动开发·fpga开发·硬件工程