【问题标题】:Canary Deployments using Nginx - traffic not routed to the Canary server使用 Nginx 的 Canary 部署 - 流量未路由到 Canary 服务器
【发布时间】:2020-08-31 17:33:24
【问题描述】:

我们的服务部署在 4 个应用服务器中。 我们有 2 个 Nginx 用于负载平衡。 我们正在使用 1 个 Consul 服务器进行服务发现。 我们将其中一个应用服务器用作 Canary 服务器,以使用 split_clients 指令测试金丝雀部署。 使用 Nginx 模板文件,我们控制到 Canary VS 非 Canary 服务器的流量。

我已经使用本地主机上的 curl 在所有 4 台服务器上单独测试了该服务。然后我在一台 Nginx 服务器上测试了 curl 命令。我收到了响应,但它仅从非金丝雀应用服务器返回。没有流量路由到 Canary 服务器。

nginx.conf 文件填充如下:

....
upstream canary_servers{
   server server4:port max_fails=3 fail_timeout=60 weight=1;
}

upstream non_canary_servers{
   server server1:port max_fails=3 fail_timeout=60 weight=1;
   server server2:port max_fails=3 fail_timeout=60 weight=1;
   server server3:port max_fails=3 fail_timeout=60 weight=1;
}

split_clients "app${remote_addr}${date_gmt}" $app_variant{
   * canary_servers;
   70% non_canary_servers;
}
.....

这可能是什么问题?我错过了什么?

【问题讨论】:

    标签: nginx nginx-config canary-deployment


    【解决方案1】:

    上面的问题通过使用*或者实际的%来解决。

    【讨论】:

      【解决方案2】:

      尝试将星号放在最后一行:

      split_clients "app${remote_addr}${date_gmt}" $app_variant{
         70% non_canary_servers;
         * canary_servers;
      }
      

      【讨论】:

      • 出于测试目的,我确实输入了确切的百分比,例如 70% non_canary 和 30% canary。当我使用现有的 jmeter 测试进行测试时。我看到 % 没有按照我的定义完全路由。有时它 71% - 75% 到 non_canary 和其余到金丝雀。 nginx 是否会准确地将 70% 路由到 non_canary 并将 30% 路由到 canary?
      • 不,这不准确。假设您只有 8 个查询。您不能将其拆分为 70%-30%(因为 0.7*8 不是整数)。即使您有许多是 10 的倍数的查询,也必须基于客户端,所以很难做到。
      猜你喜欢
      • 2019-07-08
      • 2022-12-20
      • 1970-01-01
      • 2015-10-25
      • 2021-12-29
      • 2021-04-18
      • 2021-05-04
      • 1970-01-01
      • 2020-08-14
      相关资源
      最近更新 更多