实操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服务
相关推荐
gfdgd xi37 分钟前
GXDE 内核管理器 1.0.1——修复bug、支持loong64
android·linux·运维·python·ubuntu·bug
deng-c-f2 小时前
Linux C/C++ 学习日记(43):dpdk(六):dpdk实现发包工具:UDP的发包,TCP的泛洪攻击
linux·dpdk·泛洪
我命由我123452 小时前
Derby - Derby 服务器(Derby 概述、Derby 服务器下载与启动、Derby 连接数据库与创建数据表、Derby 数据库操作)
java·运维·服务器·数据库·后端·java-ee·后端框架
拥友LikT2 小时前
惠普DL380,Bios设置了U盘启动以后,读不到U盘(其他品牌服务器解决思路类似)
服务器·系统安装
我系真滴菜2 小时前
EMQX服务器调试
运维·服务器
代码AI弗森2 小时前
Vultr × Caddy 多站点反向代理 + 负载均衡网关系统实战
运维·负载均衡
普通网友3 小时前
【Spring Boot】Spring Boot解决循环依赖
spring boot·tomcat
大海绵啤酒肚3 小时前
EL(F)K日志分析系统
运维·elasticsearch·云计算
Teamhelper_AR3 小时前
AR智能巡检:开启工业运维的“透视眼”
运维·ar
Fuchsia3 小时前
Linux软件编程笔记五——进程Ⅰ
linux·c语言·笔记·操作系统·进程