Nginx负载均衡机制及常见问题

news/2024/10/22 23:26:41/

介绍

Nginx是目前主流的WEB服务器发布软件,不仅可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动静分离,可以按照轮询、ip_hash、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。

upstream tdt_wugk {server    10.10.141.32:8080 weight=1 max_fails=2 fail_timeout=30s;server    10.10.141.32:8081 weight=1 max_fails=2 fail_timeout=30s;
}

1、upstream的fail_timeout和max_fails,用来判断负载均衡upstream中的某个server是否失效。在fail_timeout的时间内,nignx与upstream中某个server的连接尝试失败了max_fails次,则nginx会认为该server已经失效。在接下来的fail_timeout时间内,nginx不再将请求分发给失效的server。

2、fail_timeout默认为10秒,max_fails默认为1。是指在10秒内nginx与后端server连接失败一次,如果在10秒内nginx与后端的连接失败达到一次,nginx认为这个server已失效,在接下来的10秒内,nginx将不会分发请求到这台后端。

3、如果max_fails=0,即关闭后端服务器健康检查,如果权重一样,那么每次请求都会有机会发到后端不可用的服务器。另外,fail_timeout设置的时间对响应时间没影响,这个响应时间是用接下来的proxy_connect_timeout和proxy_read_timeout来控制。

4、proxy_connect_timeoutnginx与后端连接的超时时间,单位为秒,默认为60秒。我们在nginx错误日志里面看到的(110:Connectiontimedout),就是指nginx与后端连接已经超时。

5、proxy_read_timeout建立连接后,nginx等候读取后端服务器响应的时间,默认为60秒。在一些比较繁忙的后端,比如线程数经常达到峰值了的tomcat,这个值注意不要设得太低,虽然线程数已经用光,但请求已经进入待队列之中。

6、proxy_send_timeoutnginx转发请求到后端的超时时间,默认为60秒,在这段时间内nginx没将请求数据发到后端将关闭连接。这个在网站有比较多像表单(post)之类的需要留意一下.

7、keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要等待keepalive_timeout秒后,才开始关闭这个连接。

Nginx配置文件优化参数

nginx进程数,建议按照cpu数目来指定,一般为它的倍数。

worker_processes 8;

为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit-n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit-n的值保持一致。

worker_rlimit_nofile 102400;

使用epoll的I/O模型。

use epoll;
每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。

worker_connections 102400;

keepalive超时时间。

keepalive_timeout 60;

客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconfPAGESIZE取得。

client_header_buffer_size 4k;

这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。

open_file_cache max=102400 inactive=20s;

这个是指多长时间检查一次缓存的有效信息。

open_file_cache_valid 30s;

open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。

open_file_cache_min_uses 1;

Nginx浏览器缓存优化

浏览器缓存(BrowserCaching)是为了加速浏览并节约网络资源,浏览器在用户磁盘上对最近请求过的文档进行存储。nginx可以通过expires指令来设置浏览器的Header。Expires指令设置:

location~ \.(gif|jpg|jpeg|png|bmp|ico|txt|png|js|css|swf|doc)$ {expires 30d;
}

系统fstab性能优化

当文件被创建,修改和访问时,Linux系统会记录这些时间信息。当系统的读文件操作频繁时,记录文件最近一次被读取的时间信息,将是一笔不少的开销。所以,为了提高系统的性能,可以在读取文件时不修改文件的atime属性。可以通过在加载文件系统时使用notime选项来做到这一点。当以noatime选项加载(mount)文件系统时,对文件的读取不会更新文件属性中的atime信息。设置noatime的重要性是消除了文件系统对文件的写操作,文件只是简单地被系统读取。一般添加在/etc/fstab里面,如下配置:
tmpfs     /dev/shm    tmpfs    defaults            0 0
devpts    /dev/pts    devpts   gid=5,mode=620      0 0
sysfs     /sys        sysfs    defaults            0 0
proc      /proc       proc     defaults,noatime    0 0

http://www.ppmy.cn/news/1225704.html

相关文章

Unity 6 是下一个 LTS 版本即将发布

Unity 公司宣布,即将发布 Unity 6,并表示其为下一个长期支持版本 (LTS)。 Unity 在大会上演示了全新的 Unity 6引擎,并通过 Syncy Studios 采用 Unity 6 制作的《幻想王国(Fantasy Kingdom)》Demo 进行了演示&#xff…

中国净初级生产力年度合成产品NPP(MYD17A3H.006)

中国净初级生产力年度合成产品NPP(MYD17A3H.006)由航天宏图实验室提供,根据NASA MODIS数据(MYD17A3H.006)通过航天宏图 Smoother计算得到的平滑后NPP产品,解决了影像云雾覆盖、像元异常值等问题。对处理后的…

微服务测试怎么做

开发团队越来越多地选择微服务架构而不是单体结构,以提高应用程序的敏捷性、可扩展性和可维护性。随着决定切换到模块化软件架构——其中每个服务都是一个独立的单元,具有自己的逻辑和数据库,通过 API 与其他单元通信——需要新的测试策略和新…

[Linux版本Debian系统]安装cuda 和对应的cudnn以cuda 12.0为例

写在前面 先检查自己有没有安装使用wget的命令,没有的话输入下面命令安装: apt-get install wget -y查看gcc的安装 sudo apt install gcc #安装gcc gcc --version #查看gcc是否安装成功 #若上述命令不成功使用下面的命令尝试之后再执行上面…

【Python数学练习1】

一、题目 中文描述&#xff1a; 给出正整数N&#xff0c;输出满足条件的数对(a,b)的个数&#xff0c;满足gcd(a,b)b, a,b < n 数学描述&#xff1a; 二、解法 解法1&#xff1a; 对应Python代码&#xff1a; def num_fact(n):num 0for i in range(1, n 1):if n % i …

springcloud新闻发布系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;nodejs&#xff0c;idea&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示搜索新闻&#xff0c;新闻分类&#xff0c;新闻列表…

mongodb使用简单文档

1、mongodb安装与卸载 1.1、安装 python -m pip install pymongo 或 pip install pymongo如果要安装指定版本&#xff1a; python -m pip install pymongo3.5.1对已有的版本进行升级&#xff1a; python -m pip install --upgrade pymongo1.2、卸载 pip uninstall pymongo…

Uniapp小程序MBG 开发踩坑日记

最近开发一套微信音乐小程序框架使用vue3&#xff0c;但还是要吐槽一下&#xff0c;有时候会突然报错&#xff0c;怎么也调试不好&#xff0c;过段时间自己又好了&#xff0c;这让开发者体验极差。下面说下遇到的一些问题 Extraneous non-emits event listeners (close) were …