docker - 在另一个Nginx负载平衡器之后使用多个Docker Nginx负载平衡器,这是否被认为是不好的做法?

标签 docker nginx docker-compose load-balancing

我公司中有一个开发/实验服务器,我们的项目主要是Java Web应用程序,因此当我希望它将我们的项目移动到Docker并水平扩展以测试我们的无状态服务器时,我确实为每个项目创建了docker-compose与自己的Nginx负载平衡器。结果,我最终得到了6个可伸缩项目,每个项目都有一个Nginx,因此我将所有Nginx附加到同一网络,并创建了主Nginx,该主Nginx附加到主机的端口80,并在所有正在运行的Nginx之间进行平衡。
问题:我遇到了定义上游的问题,因为它要求服务启动,有时某些项目正在维护中,并导致Nginx崩溃。
解决方案:在我的主Nginx后面添加单独的Nginx可以帮助我随时运行每个项目,并且仅在Nginx代理传递中使用变量名,因此,在任何Java项目的上游关闭的情况下,我仍然可以运行主Nginx。
每个nginx都有一个块

upstream mydocker-service{
  ...
}
并且主要的Nginx包含多个
set $stream mydocker-service;
用作proxy_pass。
最后,我最终由6个Nginx负责每个项目的上游,并由主Nginx负责将请求重定向为proxy_pass到每个Nginx。
我们的项目不是Spring,也无法转移到Spring。
所以我的问题是,这被认为是一种不好的做法,我做对了吗?我有什么更好的解决方案可以使用而无需额外开销,因为我只有一个实例,所以可以做kubernetes吗?

最佳答案

如果我正确理解了您想要的内容,则可能应该制作一个1节点的群集。 Swarm将提供扩展服务的负载平衡,并且您不需要为每个项目使用nginx实例。要启用集群,您所需要做的就是运行docker swarm init,然后您将使用docker stack deploy -c yourcomposefile.yml yourstackname部署服务。要扩展服务,可以使用撰写文件中的副本设置,也可以运行docker service scale yourservicename=3(将服务扩展到3个副本)。

关于docker - 在另一个Nginx负载平衡器之后使用多个Docker Nginx负载平衡器,这是否被认为是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64020197/

相关文章:

Linux 中的 Docker 机器错误

docker - 访问 Docker 容器内的共享库

ruby-on-rails - Nginx 正好在 60 秒后超时

NginX GeoIP 模块配置 - Conf 第一行不允许 load_module

docker - 通过docker-compose启动spring配置服务器时的503状态

postgresql - Postgres 不在 docker 中初始化数据库

java - 无法连接到公开的 Docker 端口

regex - 在 Nginx 重写中处理多个参数

mysql - 如何更改 Docker MySql 实例运行的默认端口?

docker - 如何跨docker-compose.yml文件链接容器