Nginx做负载均衡的几种轮询策略

简介:

Nginx做负载均衡的几种轮询策略
集群环境为了解决单点无法支撑高并发的情况,集群采用多台服务器提供服务,一般在集群中使用nginx 将来自客户端的请求转发给服务器端

nginx负载均衡可用提高网站的吞吐量,缓解单台服务器的压力。

一. Nginx是什么
Nginx是一个开源且高性能、可靠的HTTP中间件、代理服务

  1. IO多路复用epoll(IO复用)

如何理解呢?举个例子吧!
有A、B、C三个老师,他们都遇到一个难题,要帮助一个班级的学生解决课堂作业。
老师A采用从第一排开始一个学生一个学生轮流解答的方式去回答问题,老师A浪费了很多时间,并且有的学生作业还没有完成呢,老师就来了,反反复复效率极慢。
老师B是一个忍者,他发现老师A的方法行不通,于是他使用了影分身术,分身出好几个自己同一时间去帮好几个同学回答问题,最后还没回答完,老师B消耗光了能量累倒了。
老师C比较精明,他告诉学生,谁完成了作业举手,有举手的同学他才去指导问题,他让学生主动发声,分开了“并发”。
这个老师C就是Nginx。

2. 轻量级

功能模块少 - Nginx仅保留了HTTP需要的模块,其他都用插件的方式,后天添加
代码模块化 - 更适合二次开发,如阿里巴巴Tengine

  1. CPU亲和

把CPU核心和Nginx工作进程绑定,把每个worker进程固定在一个CPU上执行,减少切换CPU的cache miss,从而提高性能。

二.Nginx安装和启动

windos环境下安装,下载地址http://nginx.org/en/download.html

通过cmd定位到Nginx所在目录

开启:start nginx.exe

快速停止:nginx.exe -s stop

重新加载配置: nginx.exe -s reload

完整停止:nginx.exe -s quit

三. Nginx提供的5种策略
轮询 (每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除)
权重 (weight权重,权重越大,表示访问几率越大,用于后端服务器性能不均的情况)
ip_hash(每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题)
fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1.linuxany.com;
server server2.linuxany.com;
fair;
}
url_hash(第三方)
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
upstream web {

 server 192.168.1.116:80 down;
 server 192.168.1.118:80 weight=2;
 server 192.168.1.113:80;
 server 192.168.1.112:80 backup;

}
配置详解:

down 表示当前的Web Server暂时不参与负载
weight  默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup Server down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

配置文件nginx.conf:

定义nginx运行的用户和用户组

user  www www;
 

设置nginx进程数,一般设置为cpu核心数,auto为自动检测

worker_processes  auto;
 

全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]

error_log  logs/error.log;

error_log  logs/error.log  warn;

error_log  logs/error.log  info;

error_log  logs/error.log  debug;

error_log  logs/error.log  notice;

error_log  logs/error.log  crit;

 

守护进程pid文件

pid        logs/nginx.pid;
 

events模块中包含nginx中所有处理连接的设置

events {
    #单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections  1024;
    #设置nginx收到一个新链接通知后接受尽可能多的链接
    multi_accept on;
    #设置用于复用客户端线程的轮训方法
    use epoll;       
}
 
 

http模块控制着nginx http处理的所有核心特性

http {
 
    #文件扩展名与文件类型映射表
    include       mime.types;
 
    #默认文件类型
    default_type  application/octet-stream;
 
    #打开或关闭错误页面中的nginx版本号deng
    server_tokens on;
 
    #客户请求头缓冲大小
    large_client_header_buffers 4 64k;
 
    #设定通过nginx上传文件的大小
    client_max_body_size 1024M;
 
    
    client_body_buffer_size 2048k;
 
    #开启高效文件传输模式,优化磁盘IO设置
    sendfile        on;
 
    gzip  on;
 
    #允许或禁止压缩基于请求和相应的响应流,any代表压缩所有请求
    gzip_proxied any;
 
    #==设置数据压缩等级,1-9之间,9最慢压缩比最大
    gzip_comp_level 9;
 
    #设置需要压缩的数据格式
    gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss;
    
    #服务器分发池列表(注意server只填IP+端口,要写入http里面,名字可以随便取,分发配置对应上即可)
    upstream web{
        server 192.168.2.6:8085 weight=1; #服务器1  weight权重(权重越大,表示访问几率越大)
        server 192.168.2.6:8086 weight=5;#服务器2
    }
    
    #负载均衡请求分发
    server {
        listen 80;
        #多域名用空格隔开baidu.com baidu2.com baidu3.com
        server_name 192.168.2.6;
 
        #设置默认访问首页
        index index.html index.php;
 
        location / {
            #所有请求反向代理到服务器池中的服务器 proxy_pass 配置的名称是 upstream 定义的名称 如 web 则这里就是 http://web
            proxy_pass  http://web;
            proxy_set_header Host      $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
   #服务器分发池可以不用写到nginx.conf文件,可以另起一个conf文件,然后用下列代码引入即可

      include /etc/nginx/conf.d/*.conf;
    }
}

nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

原文地址https://www.cnblogs.com/bob-zb/p/12612717.html

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
10月前
|
负载均衡 网络协议 算法
一文读懂什么是Nginx?它能否实现IM的负载均衡?
Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡方案,从某种意义上来讲,Nginx几乎是低成本、高负载Web服务端代名词。 如此深入人心的Nginx,很多人也想当然的认为,在IM或消息推送等场景下是否也能使用Nginx来解决负载均衡问题? 另外,即时通讯网的论坛和QQ群里也经常有人问起,Nginx是否能支持TCP、UDP、WebSocket的负载
283 4
|
6月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
7月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
240 21
|
7月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
219 14
|
7月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
306 11
|
6月前
|
人工智能 负载均衡 Cloud Native
云原生之负载均衡策略
ai必学之负载均衡 @[TOC]轮询处理;weight权重;ip_hash
|
9月前
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
562 5
|
11月前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
2390 11
架构学习:7种负载均衡算法策略
|
11月前
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
614 9
SpringBoot整合XXL-JOB【04】-  以GLUE模式运行与执行器负载均衡策略
|
9月前
|
负载均衡 应用服务中间件 nginx
如何使用nginx实现负载均衡?
如何使用nginx实现负载均衡?