linux系统nginx做负载均衡

这篇具有很好参考价值的文章主要介绍了linux系统nginx做负载均衡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作用

负载均衡(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|off


error:建立连接或向被代理的服务器发送请求或读取响应信息时服务器发生错误。
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,服务器处理请求的顺序:ABABABABAB

upstream 名字 { 
      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;   //定义服务端ip
	server 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负载均衡。文章来源地址https://www.toymoban.com/news/detail-796235.html

一开始请求过来,没有带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做负载均衡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】Nginx+Tomcat负载均衡、动静分离、多实例部署

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 要求各 tomcat 实例配置不能有重复的端口号 第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。 第二个连接器默认监听8009端口,AJP端

    2024年02月09日
    浏览(65)
  • Nginx安装Windows、Linux | 正向代理、反向代理、负载均衡

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Nginx是一个高性能的HTTP和反向代理服务器,也可用作电子邮件代理服务器和通用TCP/UDP代理服务器。它是一个轻量级的Web服务器,可以作为静态资源服务器、负载均衡器和反向代理服务器使用。Nginx的优点包括高性能、低

    2024年02月09日
    浏览(52)
  • Linux-----nginx的简介,nginx搭载负载均衡以及nginx部署前后端分离项目

    目录 nginx的简介 是什么 nginx的特点以及功能 Nginx负载均衡 下载  安装  负载均衡 Nginx 是一个高性能的开源Web服务器和反向代理服务器。它的设计目标是为了解决C10k问题,即在同一时间内支持上万个并发连接。 Nginx采用事件驱动的异步架构,能够高效地处理大量并发请求,同

    2024年02月06日
    浏览(43)
  • Linux-nginx(安装配置nginx、配置反向代理、Nginx配置负载均衡、动静分离)

    关于代理 正向代理: 客户明确知道自己访问的网站是什么 隐藏客户端的信息 目录 关于代理 一、Nginx的安装与配置 1、安装依赖 2、安装nginx (1)上传压缩包到目录 /usr/nginx里面 (2)解压文件 (3)进入到nginx的文件夹下面 进行默认的配置  ./configure (4) Make make install (5)

    2024年01月21日
    浏览(42)
  • nginx四层tcp负载均衡及主备、四层udp负载均衡及主备、7层http负载均衡及主备配置(wndows系统主备、负载均衡)

    准备两台centos7电脑,虚拟机也可以 在windows上利用vmware17 搭建centos7 mini版本服务器-CSDN博客 设置好静态ip地址(因为windows 服务器上的网络负载平衡管理器不支持dhcp的服务器) ky10、centos7等linux系统修改网卡ip地址,并设置网卡开机自启_kylin配置ip-CSDN博客 搭建keepalived keepaliv

    2024年02月03日
    浏览(38)
  • 深入浅出 -- 系统架构之负载均衡Nginx反向代理

    一、Nginx反向代理-负载均衡  首先通过 SpringBoot+Freemarker 快速搭建一个 WEB 项目:springboot-web-nginx,然后在该项目中,创建一个 IndexNginxController.java 文件,逻辑如下: 在该 Controller 类中,存在一个成员变量: port ,它的值即是从 application.properties 配置文件中获取 server.port 值。

    2024年04月12日
    浏览(54)
  • 深入浅出 -- 系统架构之负载均衡Nginx的性能优化

       到这里文章的篇幅较长了,最后再来聊一下关于 Nginx 的性能优化,主要就简单说说收益最高的几个优化项,在这块就不再展开叙述了,毕竟影响性能都有多方面原因导致的,比如网络、服务器硬件、操作系统、后端服务、程序自身、数据库服务等,对于性能调优比较感兴

    2024年04月14日
    浏览(50)
  • 深入浅出 -- 系统架构之负载均衡Nginx跨域配置

       跨域问题在之前的单体架构开发中,其实是比较少见的问题,除非是需要接入第三方 SDK 时,才需要处理此问题。但随着现在前后端分离、分布式架构的流行,跨域问题也成为了每个Java开发必须要懂得解决的一个问题。 跨域问题产生的原因    产生跨域问题的主要原因就

    2024年04月10日
    浏览(54)
  • 深入浅出 -- 系统架构之负载均衡Nginx实现高可用

       线上如果采用单个节点的方式部署 Nginx ,难免会出现天灾人祸,比如系统异常、程序宕机、服务器断电、机房爆炸、地球毁灭....哈哈哈,夸张了。但实际生产环境中确实存在隐患问题,由于 Nginx 作为整个系统的网关层接入外部流量,所以一旦 Nginx 宕机,最终就会导致整

    2024年04月15日
    浏览(48)
  • 深入浅出 -- 系统架构之负载均衡Nginx大文件传输配置

       在某些业务场景中需要传输一些大文件,但大文件传输时往往都会会出现一些 Bug ,比如文件超出限制、文件传输过程中请求超时等,那么此时就可以在 Nginx 稍微做一些配置,先来了解一些关于大文件传输时可能会用的配置项: 配置项 释义 client_max_body_size 设置请求体允

    2024年04月12日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包