• 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
  • 相关阅读:
    【数据结构】——单链表(增删查改)
    kafka连接图形化工具(Offset Explorer和CMAK)
    STM32 LWIP Server、Client如何判断网络异常
    vim 编辑器使用学习
    二维下,行政区划借助 geoserver样式配置,实现伪3d效果
    【Spring Boot 使用记录】kafka自动配置和自定义配置及消费者
    轻松上手的VsCode:你的理想代码编辑器!
    Qt配置使用MSVC编译器
    通过nginx实现https多域名绑定统一服务器访问不同项目
    【算法】欧拉筛 输出任意范围内的质数
  • 原文地址:https://blog.csdn.net/weixin_45817985/article/details/134440165