linux系统nginx做负载均衡
负载均衡
- 作用
- upstream配置
- 负载均衡算法
- 配置分类
- 热备
- 轮询
- 加权轮询
- ip_hash
- 负载均衡配置状态参数
- nginx配置7层协议及4层协议
- 七层协议做负载均衡
- 四层协议做负载均衡
- 会话保持
- ip_hash
- sticky_cookie_insert
- jvm_route
作用
负载均衡(Load Balance,简称 LB),是在现有网络结构之上分摊到多个操作单元上进行执行,扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
解决方法一:proxy_connect_timeout 1; #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒proxy_read_timeout 1; #nginx服务器向被代理服务器组发出read请求后,等待响应的超时间,默认为60秒proxy_send_timeout 1; #nginx服务器向被代理服务器组发出write请求后,等待响应的超时间,默认为60秒proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否中断对被代理服务器的请求。默认为off
使用upstream指令配置一组服务器作为被代理服务器,服务器中的访问算法遵循配置的负载均衡规则,同时可以使用该指令配置在发生哪些异常情况时,将请求顺次交由下一组服务器处理.proxy_next_upstream timeout; //反向代理upstream中设置的服务器组,出现故障时,被代理服务器返回的状态值。error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|offerror:建立连接或向被代理的服务器发送请求或读取响应信息时服务器发生错误。
timeout:建立连接,想被代理服务器发送请求或读取响应信息时服务器发生超时。
invalid_header:被代理服务器返回的响应头异常。
off:无法将请求分发给被代理的服务器。
http_400等:被代理服务器返回的状态码为400,500,502等
upstream配置
upstream的模块位置是和server同级别的,都在http模块下
upstream配置方法一:upstream 名字 { server 服务器ip:端口;server 服务器ip:端口;}
server {listen 80;server_name localhost;location / { proxy_pass http://名字; #请求转向 testapp 定义的服务器列表 }
upstream配置方法二:upstream 名字 { server http://服务器ip:端口;server http://服务器ip:端口;}server {listen 80;server_name localhost;location / { proxy_pass http://名字; #请求转向mysvr 定义的服务器列表 }
负载均衡算法
upstream 支持4种负载均衡调度算法
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决会话保持问题url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候提高效率。fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。`Nginx`本身是不支持 `fair`的,如果需要使用这种调度算法,必须下载Nginx的 `upstream_fair`模块。
配置分类
热备
有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。upstream 名字 { server ip:端口; server ip:端口 backup; //热备 }
轮询
nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABABupstream 名字 { server ip:端口; server ip:端口; }
加权轮询
跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。服务器的请求顺序为:根据权重,分配请求服务器upstream 名字 { server ip:端口 weight=1; server ip:端口 weight=2; }
ip_hash
nginx会让相同的客户端ip请求相同的服务器,也就是会话保持功能upstream 名字 { server ip:端口; server ip:端口; ip_hash;}
负载均衡配置状态参数
down:表示当前的server暂时不参与负载均衡。backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误。fail_timeout:在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。
upstream 位置 { server ip:端口 weight=2 max_fails=2 fail_timeout=2;server ip:端口 weight=1 max_fails=2 fail_timeout=1; }
nginx配置7层协议及4层协议
七层协议做负载均衡
nginx配置文件upstream 名字 {ip_hash;server 10.0.105.199:80 weight=2 max_fails=2 fail_timeout=2s; //定义服务端ipserver 10.0.105.202:80 weight=2 max_fails=2 fail_timeout=2s; //定义服务端ip}server {listen 80;server_name www.test.com;location / {proxy_pass http://名字;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
四层协议做负载均衡
nginx增加了一个 stream 模块,用来实现四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发请求,通过upstream添加多个后端服务,实现负载均衡。
stream和http是同级,包含upstream和server
做四层负载均衡确保nginx安装了–with -stream模块,还要下载两个工具
yum -y install epel-release
yum -y install nginx-all-modules.noarch不安装插件会报[emerg] unknown directive “stream“ in /etc/nginx/nginx.conf错误如果还是报[emerg] unknown directive “stream“ in /etc/nginx/nginx.conf错误,需要在主配置文件添加:
load_module /usr/lib64/nginx/modules/ngx_stream_module.so;
//4层tcp负载 stream {upstream myweb {server 172.17.14.2:80; //这里端口要和http模块中监听的端口不一样//而且这里不能用域名,域名解析是http协议的}server {listen 80;proxy_pass myweb; //这里前面不要加http://,写在location中加http://}
}
浏览访问时候,可以后端两台服务器长连接参数调整成0: keepalive_timeout 0;
刷新浏览器访问就可以正常轮询访问了
会话保持
ip_hash
ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。
upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;server backend3.example.com down;
}
ip_hash简单易用,当后端服务器宕机后,session会丢失;来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡;不适用于CDN网络,不适用于前段还有代理的情况。
sticky_cookie_insert
使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。
upstream backend {server backend1.example.com;server backend2.example.com;sticky expires=1h domain=3evip.cn path=/;
}
expires:设置浏览器中保持cookie的时间 domain:定义cookie的域 path:为cookie定义路径
jvm_route
jvm_route是通过session_cookie这种方式来实现session粘性。将特定会话附属到特定tomcat上,从而解决session不同步问题,但是无法解决宕机后会话转移问题。如果在cookie和url中并没有session,则这只是个简单的round-robin负载均衡。
一开始请求过来,没有带session的信息,jvm_route就根据round robin的方法,发到一台Tomcat上面
Tomcat添加上session信息,并返回给客户;用户再次请求,jvm_route看到session中有后端服务器的名称,他就把请求转到对应的服务器上暂时jvm_route模块还不支持fair的模式。jvm_route的工作模式和fair是冲突的。对于某个特定用户,当一直为他服务的Tomcat宕机后,默认情况下它会重试max_fails的次数,如果还是失败,就重新启用round robin的方式,而这种情况下就会导致用户的session丢失。
相关文章:
linux系统nginx做负载均衡
负载均衡 作用upstream配置负载均衡算法配置分类热备轮询加权轮询ip_hash 负载均衡配置状态参数nginx配置7层协议及4层协议七层协议做负载均衡四层协议做负载均衡 会话保持ip_hashsticky_cookie_insertjvm_route 作用 负载均衡(Load Balance,简称 LB&am…...

Tensor Core的一些概念理解
英伟达的GPU产品架构发展如下图,Tensor Core是从2017年的Volta架构开始演变的针对AI模型大量乘加运算的特殊处理单元。本文主要梳理一些关于Tensor Core的一些基础概念知识。 什么是混合精度? 混合精度在底层硬件算子层面,使用半精度…...

Git与VScode联合使用详解
目录 Git与VScode联合使用 方式一 1. 用vscode打开文件夹,如图点击初始化仓库,把此仓库初始为git仓库。 2. 提交文件到本地仓库 3. vscode与github账号绑定 4. 在github中建立远程仓库 5. 本地仓库与远程仓库绑定 方式二 1. 在github上建立远程仓…...
SQL Server 加密 view文本
CREATE VIEW dbo.View_building WITH ENCRYPTION AS SELECT * FROM Building_Temp; GO 注意: 加密後就看不到VIEW文本了,修改 ALTER VIEW dbo.View_building WITH ENCRYPTION AS –修改後的VIEW 文本 GO 或者刪除再新增。 所以,要另備份原V…...

Linux查看物理CPU个数、核数、逻辑CPU个数
文章目录 总核数总逻辑CPU数查看物理CPU个数查看每个物理CPU中core的个数(即核数)查看逻辑CPU的个数 总核数 总核数 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep “…...
python使用单例模式加载config.ini配置文件
在Python中,可以使用单例模式来加载和管理配置文件。下面是一个示例代码: import configparserclass ConfigLoader:__instance Nonedef __init__(self):if ConfigLoader.__instance is not None:raise Exception("ConfigLoader is a singleton cl…...

牛刀小试---二分查找(C语言)
题目:在给定的升序数组中查找指定的数字n,并输出其下标 代码举例: #include <stdio.h> int main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };//给定的升序数组int left 0;//定义左下标int right sizeof(arr) / sizeof(arr[0]) - 1;//…...

k8s-数据卷
存储卷----数据卷 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会恢复到初识状态 一旦容器回到初始状态,所有得分后天编辑的文件…...

Linux学习记录——사십삼 高级IO(4)--- Epoll型服务器
文章目录 1、理解Epoll和对应接口2、实现 1、理解Epoll和对应接口 poll依然需要OS去遍历所有fd。一个进程去多个特定的文件中等待,只要有一个就绪,就使用select/poll系统调用,让操作系统把所有文件遍历一遍,哪些就绪就加上哪些fd…...

6.4、SDN在云数据中心的应用案例分析
云数据中心中的虚拟子网包含网关和IP网段,IP分配给各个服务器,服务器间能够互相通信或通过网关访问外部网络。 在SDN云数据中心内,用户可以随时订购任意网段的虚拟子网,而且这些子网是可以在不同用户之间复用的,也就是说,不同用户可以使用相同的私有网段。 SDN云数据中心…...

SpringBoot整合ES
1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.6.3</version> </dependency> 2.config配置文件 Configu…...
Pandas实战100例 | 案例 10: 应用函数 - 使用 `apply`
案例 10: 应用函数 - 使用 apply 知识点讲解 Pandas 的 apply 函数是一个非常强大的工具,允许你对 DataFrame 中的行或列应用一个函数。这对于复杂的数据转换和计算非常有用。你可以使用 apply 来执行任意的函数,这些函数可以是自定义的,也…...
《C++大学教程》4.13汽油哩数
题目: 每位司机都关心自己车辆的行车里程数。有位司机通过记录每次出行所行驶的英里数和用油的加仑数来跟踪他多次出车的情况。请开发一个C程序,它使用一条while语句输入每次出车的行驶英里数和加油量。该程序应计算和显示每次出车所得到的每加仑行驶英里数&#x…...

OpenGL排坑指南—贴图纹理绑定和使用
一、前言 在OpenGL学习 的纹理这一章中讲述了纹理贴图的使用方式,主要步骤是先创建一个纹理的对象,和创建顶点VAO类似,然后就开始绑定这个纹理,最后在循环中使用,有时候可能还要用到激活纹理单元的函数。然而ÿ…...

Electron中 主进程(Main Process)与 渲染进程 (Renderer Process) 通信的方式
1. 渲染进程向主进程通信 修改 html 文件内容 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 解决控制…...

企业微信forMAC,如何左右翻动预览图片
1、control commandshifd 进入企业微信的debug调试模式 2、按照如下步骤选择 3、重启企业微信...

Android Firebase (FCM)推送接入
官方文档: 向后台应用发送测试消息 | Firebase Cloud Messaging 1、根级(项目级)Gradlegradle的dependencies中添加: dependencies {...// Add the dependency for the Google services Gradle pluginclasspath com.google.gm…...

Neo4j恢复
主要记录windows环境下从备份文件中恢复Neo4j, Linux环境同理 备份在上一篇中有介绍,参考: Neo4j备份-CSDN博客 误删数据 为了模拟误删除场景,我们查询Person,并模拟误操作将其进行删除; match(p:Person) return …...
ZZULIOJ 1114: 逆序
题目描述 输入n(1<n<10)和n个整数,逆序输出这n个整数。 输入 输入n(1<n<10),然后输入n个整数。 输出 逆序输出这n个整数,每个整数占4列,右对齐。 样例输入 Copy …...

Linux前后端项目部署
目录 1.jdk&tomcat安装 配置并且测试jdk安装 修改tomcat 配置文件 登入tomcat 发布 安装mysql 导入sql数据 发布项目war包 redis安装 nginx安装 配置nginx域名映射 部署前端项目 centos 7的服务安装 安装jdk 安装tomcat 安装Mysql 安装redis 安装nginx 前后…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...