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丢失。

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

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

相关文章

AI大模型学习笔记二

文章目录 一、Prompt Engineering1)环境准备 二、LangChain(一个框架名字)三、Fine-tuning(微调) 一、Prompt Engineering 1)环境准备 ①安装OpenAI库 pip install --upgrade openai附加 安装来源 pyth…

阶段十-分布式锁

5.1 节 为什么要使用分布式锁 锁是多线程代码中的概念,只有当多任务访问同一个互斥的共享资源时才需要。如下图: 在我们进行单机应用开发,涉及并发同步的时候,我们往往采用synchronized或者lock的方式来解决多线程间的代码同步问…

IPC进程间通信之无名管道与有名管道的对比

无名管道:首先它是内核空间的实现机制;然后只能用于亲缘进程间通信;它在内核所占的大小是64KB;它采用半双工的通信方式;请勿使用lseek函数;读写特点:若读端存在写管道,那么有多少数据…

Tomcat Notes: Common Issues Of Tomcat

This is a personal study notes of Apache Tomcat. Below are main reference material. - YouTube Apache Tomcat Full Tutorial,owed by Alpha Brains Courses. https://www.youtube.com/watch?vrElJIPRw5iM&t801s 1、Overview2、Trouble shooting2.1、Bad…

远程登陆利器 ssh

文章目录 远程登陆利器 ssh登陆远程服务器指定用户名多数情况的登陆方式查看服务器的时间指定端口更多信息 远程登陆利器 ssh ssh命令是openssh套件中的客户端连接工具,使用加密协议实现安全的远程登录服务器,实现对服务器的远程管理。 官方定义为&…

ZZULIOJ 1110: 最近共同祖先(函数专题)

题目描述 如上图所示,由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结 点(编号是1 的结点)都有一条唯一的路径,比如从10 到根结点的路径是(10, 5, 2, 1), 从4 到根结点的路径是(4, 2, 1)&#xff0…

网络地图服务(WMS)详解

文章目录 1.概述2.GetCapabilities3.GetMap4.GetFeatureInfo 阅读本文之前可参考前文:《地图服务器GeoServer的安装与配置》与《GeoServer发布地图服务(WMS、WFS)》。 1.概述 经过前文的介绍,相信我们对WMS/WFS服务已经有了一个非…

Modbus协议学习第二篇之Modbus poll slave仿真软件初体验

软件准备 学习Modbus离不开硬件,好在我们可以通过仿真软件来模拟硬件,本篇博客就来简单介绍一下Modbus仿真软件的最基础使用方法,需要用到的3款仿真软件如下: Modbus Poll 64位 / Modbus Poll 32位(根据自己机器位数选…

C++——map和set的基本使用

目录 一,关联式容器 二,键值对 三,set的使用 3.1 set介绍 3.2 set的插入和删除 3.3 set的pair 3.4 multiset 四,map的使用 4.1 map介绍 4.2 map实现简易字典 4.3 map实现统计次数 4.4 map的[] 五,使用map或…

LV.13 D11 Linux驱动移植及内核深化 学习笔记

一、设备树 1.1 设备树 设备树是一种描述硬件信息的数据结构,Linux内核运行时可以通过设备树将硬件信息直接传递给Linux内核,而不再需要在Linux内核中包含大量的冗余编码 举例:让LED2闪烁的代码中,有逻辑代码和设备代码。Li…

案例121:基于微信小程序的作品集展示系统设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

【模型评估 04】A/B测试的陷阱

互联网公司中,A/B测试是验证新模块、新功能、新产品是否有效;新算法、新模型的效果是否有提升;新设计是否受到用户欢迎;新更改是否影响用户体验的主要测试方法。在机器学习领域中,A/B测试是验证模型最终效果的主要手段…

Ransac随机采样一致性拟合——圆柱

目录 一、RANSAC拟合方法原理 二、PCL圆柱拟合模型 三、实现代码 四、实现结果

C语言 - 最简单,最易懂的指针、引用讲解

一、变量、地址、变量值 二、直接上代码&#xff0c;一边看上图&#xff0c;一边讲解 #include <stdio.h>struct Hello {int a;int b; };int main() {struct Hello h;h.a 10;h.b 20;struct Hello *hp;hp &h;printf("1: h的地址是%d&#xff0c;hp地址是%d \…

stm32学习笔记:USART串口通信

1、串口通信协议&#xff08;简介软硬件规则&#xff09; 全双工&#xff1a;打电话。半双工&#xff1a;对讲机。单工&#xff1a;广播 时钟&#xff1a;I2C和SPI有单独的时钟线&#xff0c;所以它们是同步的&#xff0c;接收方可以在时钟信号的指引下进行采样。串口、CAN和…

docker完成redis 三主三从

文章目录 关闭防火墙启动docker后台服务新建6个docker容器redis实例创建并运行docker容器实例 进入容器redis-node-1并为6台机器构建集群关系链接进入6381作为切入点&#xff0c;查看集群状态主从容错切换迁移案例容错切换迁移 主从扩容案例为主节点6387分配从节点6388主从缩容…

一、MOJO环境部署和安装

以Ubuntu系统为例。 安装mojo-CLI curl https://get.modular.com | MODULAR_AUTHmut_fe303dc5ca504bc4867a1db20d897fd8 sh - 安装mojo SDK modular auth mojo modular auth install mojo 查看mojo版本号 mojo --version 输入mojo指令&#xff0c;进入交互编程窗口

On the Robustness of Backdoor-based Watermarkingin Deep Neural Networks

关于深度神经网络中基于后门的数字水印的鲁棒性 ABSTRACT 在过去的几年中&#xff0c;数字水印算法已被引入&#xff0c;用于保护深度学习模型免受未经授权的重新分发。我们调查了最新深度神经网络水印方案的鲁棒性和可靠性。我们专注于基于后门的水印技术&#xff0c;并提出了…

6、C语言:输入与输出

输入输出 标准输入输出getchar&putchar函数printf函数sprintf函数格式化输入——scanf函数 文件访问文件读写 错误处理&#xff1a;stderr和exit行输入和行输出常用函数字符串操作函数字符类别测试和转换函数存储管理函数数学函数随机数发生器函数其他 标准输入输出 getch…

2024年【氧化工艺】免费试题及氧化工艺作业模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 氧化工艺免费试题根据新氧化工艺考试大纲要求&#xff0c;安全生产模拟考试一点通将氧化工艺模拟考试试题进行汇编&#xff0c;组成一套氧化工艺全真模拟考试试题&#xff0c;学员可通过氧化工艺作业模拟考试全真模拟…