当 replicas 大于 1 时,Nginx 将会指向哪个容器

45次阅读
没有评论

问题描述

在使用 docker-compose 时,有一个疑问是当 replicas 大于 1 时,Nginx 将会指向哪个 Django 容器。用户在 compose 文件中定义了一个 Nginx 容器和五个 Django 容器。在 Nginx 的配置文件中,用户使用了一个 upstream 来指向 Django 容器。用户想知道这个 upstream 会指向哪个 Django 容器,是否会进行负载均衡。用户在部署到 AWS ECS 上时,发现似乎进行了负载均衡,但是想进一步了解其工作原理,因为它的行为似乎并不总是一致。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
根据用户的描述,当 replicas 大于 1 时,Nginx 会对这五个 Django 容器进行负载均衡。如果用户使用的是 ECS / Compose 集成,并且使用 compose up 命令启动这个 stack,大致会发生以下操作:
1. 创建一个 ECS 集群。
2. 为 web 任务和 nginx 任务创建任务定义。
3. 创建一个 web 服务(包含 5 个任务)。
4. 创建一个 nginx 服务(包含 1 个任务)。
5. 通过 ALB(应用负载均衡器)将 nginx 服务公开给公众(因为用户暴露了 80 端口)。
6. 基于 ECS 服务发现创建一个内部机制,以便在集群内部解析 web(这就是 nginx 能够访问名为 web 的实体的方式)。

ECS 服务发现利用 CloudMap/Route53,在这五个条目(web 任务)之间进行轮询。您可以在此处阅读更多信息:https://docs.amazonaws.cn/en_us/AmazonECS/latest/developerguide/service-discovery.html

正文完