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


    介绍

    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
    • 2
    • 3
    • 4

    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;
    
    • 1

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

    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    
    • 1

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

    worker_rlimit_nofile 102400;
    
    • 1

    使用epoll的I/O模型。

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

    worker_connections 102400;
    
    • 1

    keepalive超时时间。

    keepalive_timeout 60;
    
    • 1

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

    client_header_buffer_size 4k;
    
    • 1

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

    open_file_cache max=102400 inactive=20s;
    
    • 1

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

    open_file_cache_valid 30s;
    
    • 1

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

    open_file_cache_min_uses 1;
    
    • 1

    Nginx浏览器缓存优化

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

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

    系统fstab性能优化

    当文件被创建,修改和访问时,Linux系统会记录这些时间信息。当系统的读文件操作频繁时,记录文件最近一次被读取的时间信息,将是一笔不少的开销。
    
    所以,为了提高系统的性能,可以在读取文件时不修改文件的atime属性。可以通过在加载文件系统时使用notime选项来做到这一点。
    
    当以noatime选项加载(mount)文件系统时,对文件的读取不会更新文件属性中的atime信息。设置noatime的重要性是消除了文件系统对文件的写操作,文件只是简单地被系统读取。
    
    一般添加在/etc/fstab里面,如下配置:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    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
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    JavaScript:DOM操作节点
    代码随想录训练营day55
    m基于matlab的BTS天线设计,带GUI界面
    IMX6Q的SD卡启动使用教程(1):uboot与kernel编译移植
    一文教你如何快速备考云计算HCIE 3.0 !
    AppleID切换验证手机
    Mybatis-plus进阶篇(二)
    J2EE基础:通用分页01
    Python结合文件名称将多个文件复制到不同路径下
    修复MybatisX1.4.17版本插件误报@Mapkey is required错误
  • 原文地址:https://blog.csdn.net/weixin_45817985/article/details/134440165