当前位置: 首页 > news >正文

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

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

(前面讲选型,想直接看操作的可以跳转到:操作步骤 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;

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

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

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

相关文章:

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

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

2024年学浪视频怎么下载到手机相册

随着2024年的到来,学浪平台继续为广大学习者提供优质的在线教育资源。然而,如何将这些宝贵的视频内容下载到手机相册,方便随时离线观看呢?无论您是想在旅途中学习,还是希望在没有网络的情况下复习课程,本文…...

【北京市政府网_注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

工作中的冲突,职场人士应如何化解

在职场中,冲突和分歧是不可避免的现象。它们可能来源于工作分配不均、目标不一致、价值观差异或个性不合等。面对这些冲突和分歧,我们需要具备有效的冲突管理技巧来化解问题,以维持团队的和谐与工作效率。 分析冲突的原因至关重要。通常来说&…...

企业级大数据平台建设方案

企业级大数据平台建设方案 方案简介硬件软件分布式存储:Foreman作为集群管理工具Sparkcloudera 方案简介 该方案是多年前在Roadstar.ai任职时的建设方案,现将方案部分细节开源,结合本博客的其他文章,能够建立可靠的企业大数据平台…...

HTML语义化标签:为何它们如此重要?

HTML语义化标签:为何它们如此重要? 引言1. HTML语义化标签的基本概念2. HTML语义化标签的作用2.1 提升网页可读性2.2 增强可访问性2.3 优化搜索引擎排名2.4 提高性能 3. 代码示例结尾讨论 引言 在前端开发的世界里,HTML作为构建网页的基础语…...

详细介绍一下Votenet的工作原理及流程

Votenet是一种基于深度学习的三维目标检测和实例分割方法,其工作原理主要包括两个步骤:候选框生成和目标分类与分割。 1.候选框生成: 首先,Votenet通过将三维点云数据转化为连续的坐标网格,将三维目标检测问题转化为二…...

使用Autofit.js和React实现自适应布局

1. 什么是Autofit.js? Autofit.js是一个用于自适应网页布局的JavaScript库,它可以根据元素的尺寸和屏幕的大小,自动调整布局和排列方式,以适应不同的设备和分辨率。它提供了简单易用的API,可以帮助我们轻松实现各种自…...

Kafka之【存储消息】

Kafka之【存储消息】...

鸿蒙开发配置官方地图

一共需要配置 p12 p7b cer csr 四个文件 p12文件配置 注意创建文件名必须是.p12 到AGC创建项目 AppGallery Connect 添加自己的项目名称 我没有开启 暂时不需要 看个人需求 下载刚创建的cer证书 回到我的项目中 点击刚创建的项目 点击这里 四个文件齐全了 "metadata&qu…...

《天道》丁元英格律诗商业案例完整拆解(上)

目录 公司启动缘由 我们开公司也好、做任何其他事请也罢。 1997 年 3 月: 北京摆摊、租店面、仓库: 1997 年 4 月前: 向斯雷克音响店下订货单; 1997 年 6 月: 格林、伦敦、巴黎三个城市当托; 1998 …...

2024年山东省安全员C证证模拟考试题库及山东省安全员C证理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年山东省安全员C证证模拟考试题库及山东省安全员C证理论考试试题是由安全生产模拟考试一点通提供,山东省安全员C证证模拟考试题库是根据山东省安全员C证最新版教材,山东省安全员C证大纲整理…...

微软开源多模态大模型Phi-3-vision,微调实战来了

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型& AIGC 技术趋势、大模型& AIGC 落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了…...

架构二。。

1、CAP 只能3选2 1)一致性(Consistency) 客户每次读都是返回最新的写操作结果 2)可用性(Availability) 非故障节点在合理的时间内返回合理的响应 3)分区容忍性(Partition Tolerance…...

《Google 软件工程》读书笔记

1. 写在前面 在图书馆瞎逛,偶然瞄见一本《Google 软件工程》Titus Winters, Tom Manshreck, Hyrum Wright 著。主要是在这一排的书架上就这本书看着挺新的(不知道为什么有一种喜欢看新书的情节),而且最近被领导老批评,…...

研发机构大数据迁移如何保障敏感数据不泄露

随着云计算和大数据技术的飞速进步,越来越多的企业正试图通过数据迁移来提升IT基础设施的效率,减少成本,并增强业务的灵活性。但是,这一过程并非没有它的挑战,尤其是在数据安全方面。数据在转移过程中可能会遭遇黑客攻…...

【Spring Security系列】权限之旅:SpringSecurity小程序登录深度探索

作者:后端小肥肠 创作不易,未经允许严禁转载。 姊妹篇: 【Spring Security系列】Spring SecurityJWTRedis实现用户认证登录及登出_spring security jwt 退出登录-CSDN博客 1. 前言 欢迎来到【Spring Security系列】!在当今数字化…...

​​​【收录 Hello 算法】第 10 章 搜索

目录 第 10 章 搜索 本章内容 第 10 章 搜索 搜索是一场未知的冒险,我们或许需要走遍神秘空间的每个角落,又或许可以快速锁定目标。 在这场寻觅之旅中,每一次探索都可能得到一个未曾料想的答案。 本章内容 10.1 二分查找10.2 二…...

【MySQL精通之路】SQL优化(1)-查询优化(11)-多范围查询优化

主博客: 【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客 上一篇: 【MySQL精通之路】SQL优化(1)-查询优化(10)-外部联接简化-CSDN博客 下一篇: 当基表很大且未存储在存储引擎的缓存中时,使用辅助索引上的范围扫描读取行可能会…...

Mysql之基本架构

1.Mysql简介 mysql是一种关系型数据库,由表结构来存储数据与数据之间的关系,同时为sql(结构化查询语句)来进行数据操作。 sql语句进行操作又分为几个重要的操作类型 DQL: Data Query Language 数据查询语句 DML: Data Manipulation Language 添加、删…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...