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

news/2024/7/9 23:43:15 标签: nginx, 负载均衡, 服务器, tomcat, linux, 运维

目录

前言

nginx%E6%9C%8D%E5%8A%A1%EF%BC%8C%E5%B9%B6%E8%AE%BE%E7%BD%AE%E5%9B%9B%E5%B1%82%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%EF%BC%88%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%EF%BC%89-toc" style="margin-left:0px;">一、master主机的配置,安装nginx服务,并设置四层反向代理(修改配置文件)

二、编写监控脚本

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

nginx%E7%9A%84%E9%85%8D%E7%BD%AE%E5%92%8Ckeepalived%E3%80%81%E8%84%9A%E6%9C%AC%E9%83%BD%E5%A4%8D%E5%88%B6%E5%88%B0%E5%A4%87%E4%BB%BD%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A-toc" style="margin-left:0px;">四、将nginx的配置和keepalived、脚本都复制到备份服务器

五、进行测试

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

nginx%E6%9C%8D%E5%8A%A1%EF%BC%8C%E6%98%AF%E5%90%A6%E4%BC%9A%E6%95%85%E9%9A%9C%E5%88%87%E6%8D%A2%E8%87%B3%E5%A4%87%E6%9C%8D%E5%8A%A1%E5%99%A8-toc" style="margin-left:40px;">2、验证关闭nginx服务,是否会故障切换至备服务器

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

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

总结:


前言

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

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

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

nginx%E6%9C%8D%E5%8A%A1%EF%BC%8C%E5%B9%B6%E8%AE%BE%E7%BD%AE%E5%9B%9B%E5%B1%82%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%EF%BC%88%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%EF%BC%89">一、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%E7%9A%84%E9%85%8D%E7%BD%AE%E5%92%8Ckeepalived%E3%80%81%E8%84%9A%E6%9C%AC%E9%83%BD%E5%A4%8D%E5%88%B6%E5%88%B0%E5%A4%87%E4%BB%BD%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A">四、将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结尾的动态资源

nginx%E6%9C%8D%E5%8A%A1%EF%BC%8C%E6%98%AF%E5%90%A6%E4%BC%9A%E6%95%85%E9%9A%9C%E5%88%87%E6%8D%A2%E8%87%B3%E5%A4%87%E6%9C%8D%E5%8A%A1%E5%99%A8">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服务


http://www.niftyadmin.cn/n/5274310.html

相关文章

vue el-date-picker中datetime类型对今天之后的日期包含时分禁用

vue el-date-picker中datetime类型对今天之后的日期包含时分禁用 目前对选择秒那一列未禁用 <template><div><el-date-pickerv-model"deactivateTime"type"datetime"format"yyyy-MM-dd HH:mm:ss"value-format"yyyy-MM-dd HH…

Halcon深度学习相关术语介绍

1、深度学习术语表一 序号 术语 解释 1 Adam Adam (adaptive moment estimation)是一种基于一阶梯度的随机目标函数优化算法&#xff0c;用于计算单独的自适应学习率。在深度学习方法中&#xff0c;该算法可用于最小化损失函数。 2 anchor 它们作为固定的参考边界框&am…

WordCloud—— 词云

【说明】文章内容来自《机器学习入门——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 wordcloud 是python的第三方库&#xff0c;称为词云&#xff0c;也成文字云&#xff0c;可以根据文本中的词频以直观和艺术化的形式展示文本中词语的重要性。 依赖于pillow …

分布式学习笔记

CAP原理 分布式系统无法同时满足强一致性&#xff0c;可用性和分区容错性&#xff0c;设计中往往需要弱化某个特性的需求 1&#xff09;一致性: 同一时间访问所有节点得到的数据都是一样的&#xff0c;提交事务时&#xff0c;数据同步到所有的节点后&#xff0c;才算事务提交成…

[NSSRound#8 Basic]ez_node

打开题目 源码 server.js const express require("express"); const path require("path"); const fs require("fs"); const multer require("multer");const PORT process.env.port || 3000 const app express();global &q…

图像细节增强算法

图像细节增强是一种图像处理技术&#xff0c;旨在改善图像中的细节和纹理&#xff0c;使其更清晰和更易于分析。有许多图像细节增强算法&#xff0c;其中一些常见的包括&#xff1a; 直方图均衡化&#xff08;Histogram Equalization&#xff09;&#xff1a; 这是一种常见的增…

【性能测试】资深老鸟带你,一篇打通负载与压力测试的区别...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 负载测试 是通过…

SpringBoot之分层解耦以及 IOCDI的详细解析

### 3.2 分层解耦 刚才我们学习过程序分层思想了&#xff0c;接下来呢&#xff0c;我们来学习下程序的解耦思想。 解耦&#xff1a;解除耦合。 #### 3.2.1 耦合问题 首先需要了解软件开发涉及到的两个概念&#xff1a;内聚和耦合。 - 内聚&#xff1a;软件中各个功能模块内…