【问题标题】:Docker swarm reverse proxy+load balancing with NginxDocker swarm 反向代理+Nginx 负载均衡
【发布时间】:2020-01-19 17:02:13
【问题描述】:

我有一个包含 2 个服务的 docker compose 文件:joomla 和 phpmyadmin。

我需要一个反向代理,其行为如下:

路径:/ --> joomla 服务

路径:/managedb --> phpmyadmin 服务

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://joomla;
    }
    location /managedb {
        proxy_pass http://phpmyadmin;
    }
}

一切正常,但是我需要添加负载平衡来平衡 docker swarm 中的 3 台机器之间的工作。

它们都是同一 LAN 上的虚拟机,静态 IP 为 192.168.75.11/12/13。

Nginx 添加负载均衡的方式应该如下:

upstream joomla_app {
        server 192.168.75.11;
        server 192.168.75.12;
        server 192.168.75.13;
}
upstream phpmyadmin_app {
        server 192.168.75.11;    
        server 192.168.75.12;
        server 192.168.75.13;
}
server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://joomla_app;
    }
    location /managedb {
        proxy_pass http://phpmyadmin_app;
    }
}

但是,由于唯一暴露的端口是 Ngxinx 80 端口,因为我也需要它作为反向代理,所以上面的代码显然不起作用。

那么在这种情况下如何添加负载均衡呢?

提前谢谢你!

【问题讨论】:

    标签: docker nginx docker-swarm


    【解决方案1】:

    在 docker swarm 中,您不需要自己的负载均衡器,它有一个内置的。只需扩展您的服务即可。 Swarm 名称解析器会将 joomla 和 phpmyadmin 解析为一个虚拟 ip,该虚拟 ip 将成为该服务的 swarm lb,或者如果您将服务配置为在 dnsrr 模式下工作,则在将 servicename-hostname 解析为容器 ip 时将使用 dns 循环方法。

    但是,如果您想在 swarm 中跨节点分发服务,那就另当别论了。在这种情况下,您可以为每个服务设置放置限制或将它们设置为“全局”而不是复制 - 请参阅https://docs.docker.com/engine/swarm/services/#control-service-placement

    【讨论】:

    • 非常感谢!其实我以为是swarm本身来处理平衡,但我不确定,也找不到太多关于它的信息。
    • @FrancescoStucci 很高兴为您提供帮助,请接受答案。
    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2022-01-03
    • 2020-10-06
    • 2013-05-01
    相关资源
    最近更新 更多