【问题标题】:NGINX: Force nginx to use all workers for load balanceNGINX:强制 nginx 使用所有工作人员进行负载平衡
【发布时间】:2019-12-20 23:41:12
【问题描述】:

我正在使用 nginx,我需要测试是否所有工作人员都正确共享数据,但目前只有一名工作人员正在处理所有请求。

我的worker_process 设置为 4,但仍然有一名工作人员正在处理所有请求。

我可以通过将 worker_connections 的数量更改为非常低的值并在 while 循环中使用 curl 命令向 nginx 发送垃圾邮件来强制它包含其他工作人员。也许max_conns 可以工作,但我使用的是免费版的 nginx。

有没有更实用的方法可以强制 nginx 使用不同的 worker?

我目前的设置是这样的。任何帮助,将不胜感激。

worker_processes  4;

events {
    worker_connections  5;
    multi_accept off;
    use        epoll;
}

server {
     listen       8081;
     server_name *.localhost;

     # max_conns = 3;

     set $upstreamserver "127.0.0.7:8080

    location =/worker {
        content_by_lua '
            ngx.say(ngx.worker.id())
            ngx.say(ngx.var.pid)
            ngx.say(ngx.worker.count())
        ';
    }

    location /basic_status {
        stub_status;
    }

    location / {        
            proxy_buffering             off;
            proxy_redirect              off;
        proxy_pass                  http://upstreamserver;
    }

【问题讨论】:

    标签: nginx lua


    【解决方案1】:

    您似乎遇到了 epoll 的限制,而不是 nginx 或 Lua。 This article 详细解释了发生了什么。

    如果您真的想在工作人员之间更均匀地分配负载,上述文章建议在 listen 指令 (docs) 上使用 reuseport 选项。

    server {
         listen       8081 reuseport;
         ...
    }
    

    虽然在某些极端情况下延迟可能会增加,但这并不是所有情况下的最佳选择。

    【讨论】:

    • 很好,谢谢 - 不知道那个选项。我只是在开发中进行测试,所以这正是我所需要的
    • 我已经对该选项进行了更多测试。负载均匀分布在工作人员之间,它会稍微减慢响应时间(我正在向服务器发送垃圾邮件)工作人员正在共享一个线程安全表。我认为,该选项会影响员工之间的数据共享。当我触发数据更新时,2/4 工作人员会接受更改。如果我触发 3 或 4 次,那么一切都会恢复同步。如果没有该选项和极端垃圾邮件,一个更新就足够了。仍然对测试有好处,谢谢只是想分享如果有人有类似的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2016-04-04
    相关资源
    最近更新 更多