Nginx实现负载均衡与故障检查自动切换

news2024/11/17 13:56:43

创作灵感来源于个人项目的一个稳定性规划,单节点的项目稳定性方面可能有很大的缺漏,因此需要升级为多节点,保证服务故障后,依然有其他服务可用,不会给前端用户造成影响。

(前面讲选型,想直接看操作的可以跳转到:操作步骤 1、下载Tengine)

这次的目标是实现负载均衡与故障检查自动切换,主要有 3 个方案:

1、使用Nginx,通过将访问个人项目路径的URL转发到其他机器上实现

2、使用微服务模式,通过启动单个服务的多个实例,利用微服务Gateway中Ribbon的负载均衡

DNS其实也想过,但是DNS可玩性太低,无法实现故障的自动切换,不符合需求,排除!

都可以实现,但是明显第一种成本低,第二种需要加服务加注册中心改造较大,耗资源较多;

操作开始:使用Nginx实现负载均衡与故障检查自动切换

别看题目是叫这个名,但是实际上最终使用的是Tenginx;什么??我怎么没听过???为啥要用这玩意儿!??不是说好的Nginx吗?

别急,听我慢慢跟你说,我一开始也是想用Nginx的,毕竟服务部署起来一直用的就是Nginx,但是特么的使用Nginx的这个健康检查功能,是不支持的,得上Nginx-Plus,这得收费;

先看看如何配置多节点和健康检查:

但是这样会因为check指令启动失败,如何在 yum install nginx得到的nginx上再加上健康检查模块?GPT的回答如下:

然后就把我的注意力转移到了Nginx-Plus,什么玩意儿,让我们看看Nginx-Plus

什么?免费试用??果然要收费,操

最后通过这篇文章了解到,淘宝的tengine开发的nginx_upstream_check_module模块可以实现对后端节点做健康检查,不得不说阿里在软件基础设施方面真的做出了巨大贡献,阿里牛逼!

然后去tengine官网看看,看描述Tenginx应该是Nginx1.2.4版本分支切出来开发的

  • All features of Nginx-1.24.0 are inherited, i.e., it is compatible with Nginx.
  • Tengine is a web server originated by Taobao, the largest e-commerce website in Asia. It is based on the Nginx HTTP server and has many advanced features.

话不多说,直接下载安装,替换掉这个无法支持健康检查模块的nginx!

下面是密集的操作步骤:

1、下载Tengine

我是先下载到win,然后传到linux

再解压zip,得到tengine文件夹

2、开始安装

其实都有文档,我在安装步骤由于使用默认文档的安装方式,少安装了一些模块导致无法启动,在这里我直接省略我踩坑的步骤,上正确路径:

2.1 编译
./configure --with-http_v2_module --with-http_ssl_module --add-module=./modules/ngx_http_upstream_check_module
2.2 安装
make
make install

安装好后,你的tenginx配置目录在 /usr/local/nginx,配置目录在conf下

然后你的tenginx运行的pid文件在/run/nginx.pid

2.3 注册服务、开机自启等(无需求可不做,直接在sbin目录启动也可)

2.3.1 创建 systemd 单元文件
vi /etc/systemd/system/tengine.service

写入内容:

[Unit]
Description=Tengine HTTP Server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target
2.3.2 重新加载 systemd 并启动服务
sudo systemctl daemon-reload
sudo systemctl start tengine
2.3.3 停止和重启服务
sudo systemctl stop tengine
sudo systemctl restart tengine

这样,你就可以方便地使用 systemd 来管理 Tengine 服务了。

3、编辑配置
3.1 配置负载均衡

编辑tenginx的配置文件

vi /usr/local/nginx/conf/nginx.conf

按语法加入upstream模块,健康检查规则,健康检查状态定义

这个在http { } 中

    upstream backend {
        server 127.0.0.1:8000;
        server 10.0.4.15:8000;

        # 健康检查配置
        check interval=3000 rise=2 fall=2 timeout=1000 type=http;
        # interval: 检查间隔时间,单位为毫秒
        # rise: 连续成功次数达到这个值后,服务器被认为是健康的
        # fall: 连续失败次数达到这个值后,服务器被认为是不健康的
        # timeout: 健康检查超时时间,单位为毫秒
        # type: 检查类型,这里是http类型
        check_http_send "GET / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }

 下面这个在server{} 中

        location /chris-admin/ {
                proxy_pass http://backend/; #这里的端口记得改成项目对应的哦
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "Upgrade";
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

/chris-admin/是我的业务请求前缀,这里通过 proxy_pass转发到http://backend/实现负载均衡

3.2 配置健康检查

其实在3.1中已经配置了健康检查的内容,但是那只是配置检查节点健康状态的逻辑,那么如何知道当前配置的几个节点,有哪些是在线,哪些是挂掉的呢?

在server {} 内配置如下内容:

        #配置nginx节点健康状态
        location /status/ {
            check_status;
            access_log off;
            # 设置允许访问的IP地址,或使用allow all
            #allow 127.0.0.1;
            #deny all;
        }

然后就可以通过访问  “服务器IP:80/status” 这个路径来实现;如下图:

我已经试过了,服务down了之后,可以实现故障检查与自动切换,下线一个,服务可正常访问,下线俩才会GG;

这里不再记录这些无关紧要的测试步骤截图了,不过你们搭建完一定记得自测一下哦

到这里,这篇教程记录就结束了,这全都是我自己踩坑后总结的正确路径;

如果喜欢可以点赞 + 关注 + 收藏 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

传统蓝牙模块BR/EDR与低功耗蓝牙模块有什么区别?

传统蓝牙模块BR/EDR与低功耗蓝牙模块有什么区别?下面跟随美迅物联网MesoonRF从多个维度来了解。   概述:低功耗蓝牙采用了高斯频移键控(GFSK)。这里我们先抛开蓝牙的协议,单纯从Radio的角度看收发通信,Ra…

新品 | Forge® 1GigE IP67工业相机助力智能农业、食品和饮料行业

近日,51camera的合作伙伴Teledyne FLIR IIS推出Forge 1GigE IP67,它是Forge系列的最新工业相机,旨在在恶劣的工业环境中运行,同时确保高效的生产能力。Forge 1GigE IP67致力于为工厂自动化提供先进成像系统的最新产品。 Forge 1GigE IP67相机…

【设计模式深度剖析】【3】【创建型】【抽象工厂模式】| 要和【工厂方法模式】对比加深理解

👈️上一篇:工厂方法模式 | 下一篇:建造者模式👉️ 目录 抽象工厂模式前言概览定义英文原话直译什么意思呢?(以运动型车族工厂,生产汽车、摩托产品为例) 类图4个角色抽象工厂(Abstract Fac…

美业系统源码美业SaaS系统-门店卡项已线下退款,需要作废怎么处理?

美业SaaS系统源码 连锁门店美业收银系统源码 收银管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 活动促销 PC管理后台、手机APP、iPad APP、微信小程序 1、加盟店卡项线下退款处理方法: 询问具体退款会员手机号和卡项,找到需要退款的订单号。…

jenkins自动化部署详解

一、准备相关软件 整个自动化部署的过程就是从git仓库拉取最新代码,然后使用maven进行构建代码,构建包构建好了之后,通过ssh发送到发布服务的linux服务器的目录,最后在此服务器上执行相关的linux命令进行发布。 此篇文章jenkins…

优思学院|六西格玛在人力资源管理(HR)的应用指南

有效的HR流程管理对于组织的成功至关重要。然而,许多组织在HR效率方面存在困难,导致员工流动率高、工作放弃率高、生产力低下、缺勤率高以及盈利能力下降。 六西格玛方法论可以用来识别改进领域并实施变革,从而使HR功能更加高效和有效。 这…

监控上网的软件有哪些?含泪推荐的电脑监控软件

监控上网的软件有很多,企业选择的时候应该遵循什么样的原则呢?鄙人愚见,认为以下四项原则是选择监控软件时首要考虑的。 1、功能需求: 监控软件不应该只是起到控制上网的作用,因为一些泄密行为可能是通过USB接口、打印…

TI C2000 FLASH 模拟 EEPROM

简述 FLASH和EEPROM同为非易失存储器,互有优势。 FLASH Flash是非易失性存储器(NVM)的一种形式。相对于EEPROM,Flash具有更高的存储密度和更快的写入速度。Flash内部被分为多个扇区,每个扇区都可以单独擦除和写入。但是寿命相比EEPROM较短,以TI芯片为例,flash擦写次数在…

Linux下的权限

目录 1.shell命令以及运行原理 1.1原理上初步理解shell外壳 1.1.1为什么要有shell外壳 1.1.2shell外壳是什么 1.1.3怎么办(shell外壳的基本运行原理) 2.Linux下的用户 3.Linux权限管理 3.1.文件访问者的分类(人) 3.2…

社交媒体数据恢复:LinkdIn

在我们的日常工作中,数据丢失是一个非常棘手的问题。但是,如果你懂得如何进行数据恢复,那么这个问题就不再那么可怕了。本文将为您提供一份详细的LinkedIn数据恢复教程,帮助您找回丢失的数据。 首先,我们需要了解为什…

谷粒商城环境准备~下 docker版

10. 配置中心 1&#xff09;修改“gulimall-coupon”模块 添加pom依赖&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>创建bootstr…

C++设计模式---面向对象原则

面向对象设计原则 原则的目的&#xff1a;高内聚&#xff0c;低耦合 1. 单一职责原则 类的职责单一&#xff0c;对外只提供一种功能&#xff0c;而引起类变化的原因都应该只有一个。 2. 开闭原则 对扩展开放&#xff0c;对修改关闭&#xff1b;增加功能是通过增加代码来实现的&…

10G SFP双口万兆以太网控制器,高速光口网络接口卡

2-Port 10G SFP NIC 是一款高速网 络接口卡&#xff0c;采用了 PCI Express 3.0 x8 接口&#xff0c;支持双 端口万兆以太网&#xff0c;具有高性能、高可靠性、低功耗等 优点&#xff0c;是数据中心、云计算、虚拟化等领域的理想选 择。 支持多种网络协议&#xff0c;如 …

不懂平面设计,这篇文章教你制作商业画册

​商业画册不仅是企业展示形象、推广产品的重要工具&#xff0c;也是设计师展现创意的平台。因此&#xff0c;制作一本高质量的画册对于企业来说至关重要。 那要怎么着手制作呢&#xff1f;以下是关于制作商业画册的步骤。 1.要制作电子杂志,首先需要选择一款适合自己的软件。…

从失败开始浅谈如何交易现货白银

投资者进入现货白银市场&#xff0c;可以说目的就是在这个市场中盈利&#xff0c;只有极少数朋友是想在这个市场中冒险&#xff0c;体验一下资金盈亏所带来的刺激。然而&#xff0c;投资者在交易现货白银的时候&#xff0c;由于一心想获利&#xff0c;因此他们很怕谈失败&#…

Python学习---基于进程池的文件夹copy器案例

# 思路&#xff1a; # 1、定义变量&#xff0c;保存源文件和目标文件夹的路径 # 2、在目标路径创建新的文件夹 # 3、获取源文件夹中的所有文件&#xff08;列表&#xff09; # 4、遍历列表得到所有文件名 # 5、定义函数进行文件拷贝 # 文件拷贝函数&#xff1a; # 参数&#xf…

基于manifest文件批量将coding的仓库导入gitlab中

文章目录 写在前面的话背景编写manifest文件最终效果 写在前面的话 前面有讲过通过manifest清单导入项目到gitlab中&#xff0c;但是实际的操作是不同gitlab实例之间的操作&#xff0c;然而对于在不同gitlab实例的repo迁移而言&#xff0c;显然direct transfer会更合适。 背景…

房地产画册制作成手机在线翻页效果

​随着科技的飞速发展&#xff0c;移动互联网已经深入到人们的日常生活中。在这个数字化的时代&#xff0c;房地产行业也紧跟潮流&#xff0c;将画册制作成手机在线翻页效果&#xff0c;以满足消费者的阅读习惯。 房地产画册制作成手机在线翻页效果&#xff0c;不仅能够满足消费…

Win10【无线显示器】安装失败(无法添加)解决中。。。

目录 ■失败现象 ■解决方法 【服务启动1】 【服务确认】 【服务启动2】 参考 ■查看电脑是否支持【Miracast无线投屏功能】 参考2 ■解决方法&#xff08;对我的这台电脑有效&#xff09; ■解决后的效果 ■连接时&#xff0c;出现【无法在此设备上查看受保护内容。…