如何访问 docker-compose 在 haproxy 配置中创建的副本

2024-03-03

我有一个简单的 haproxy.cfg,如下所示:

frontend http
    bind *:8080
    mode http
    use_backend all

backend all
    mode http
    server s1 ws:8080

现在我有一个 docker-compose 文件,如下所示:

version : '3.9'

services:
    lb:
        image: haproxy
        ports:
            - "8080:8080"
        volumes:
            - ./haproxy:/usr/local/etc/haproxy
    ws:
        image: myserver

这工作正常,但现在我想使用副本将我的服务器 (ws) 实例扩展到 4 个。 我可以做到这一点,提供这个 docker-compose 文件:

version : '3.9'

services:
    lb:
        image: haproxy
        ports:
            - "8080:8080"
        volumes:
            - ./haproxy:/usr/local/etc/haproxy
    ws:
        image: myserver
        deploy:
            mode: replicated
            replicas: 4

Calling docker-compose up给了我这个:

Recreating test_server_ws_1 ... done
Recreating test_server_ws_2 ... done
Recreating test_server_ws_3 ... done
Recreating test_server_ws_4 ... done
Recreating test_lb_1 ... done

但是我现在如何在我的 haproxy.cfg 中引用这 4 个副本?使用除ws:8080会给我

lb_1  | [ALERT]    (1) : parsing [/usr/local/etc/haproxy/haproxy.cfg:11] : 'server s1' : could not resolve address 'ws_1'.

只需在配置中使用 ws 作为地址(像以前一样)将始终转发到 ws_4。

如何正确配置 haproxy 以转发到 ws_1、ws_2、ws_3 和 ws_4 ?


要使用 docker-compose 完成此任务,您应该考虑两件事:

  1. 将 HAProxy 中的解析器设置为使用 Docker 的内部 DNS127.0.0.11.
  2. Use a server-template在您的 HAProxy 配置中。

在配置中使用 Docker 的 DNS 将允许 HAProxy 在我们在后端定义服务器模板时将其用作服务发现机制。您可以创建resolver https://cbonte.github.io/haproxy-dconv/2.4/configuration.html#5.3.2-resolvers在 HAProxy 中像这样:

resolvers docker
    nameserver dns1 127.0.0.11:53

服务器模板 https://cbonte.github.io/haproxy-dconv/2.4/configuration.html#4-server-template是 HAProxy 中一个非常强大的功能,允许配置根据解析器的 DNS 响应来更新(添加/删除)服务器。您可以使用以下内容创建服务器模板:

backend all
    mode http
    server-template nginx- 4 ws:80 check resolvers docker init-addr libc,none

您可以阅读有关中使用的每个标志的信息server-template但我将引导您完成配置中的相关内容。第一项是服务器名称前缀nginx-,您可以将其设置为您想要的任何字符串,HAProxy 将根据解析器的响应总数在其后附加一个数字。下一项4是您希望 HAProxy 配置的最大服务器数,您可以根据需要调整该值更高或更低。接下来是您为后端服务配置的服务器:端口。最后将此后端的解析器设置为docker.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问 docker-compose 在 haproxy 配置中创建的副本 的相关文章

随机推荐

  • 如何在 tidyverse 中转置数据框?

    使用基本的 R 我可以转置数据框 比如说mtcars 其中具有同一类的所有列 as data frame t mtcars 或者用管道 library magrittr mtcars gt t gt as data frame 如何在 ti
  • 在 JQuery AJAX 发布之前暂停

    因为我正在处理的页面是一个内联网页面 所以我的 AJAX 调用和响应非常快 出于可用性目的 我想要短暂的 1 2 秒暂停来显示加载动画 下面是我尝试过的 但动画几乎不可见 document ready function wait hide
  • CSS?这个箭头是怎么做出来的?

    这让我发疯 我一直在使用 Firefox 检查器来尝试找出这个箭头是如何在进展现场 http headwaythemes com 我通过检查器删除块来削减代码 并将其简化为 无论我在哪里检查 我都可以not找到任何这样的形状 没有背景图像
  • windows mingw下使用zlib

    我似乎无法让 zlib 在 Windows 下的 mingw 上执行任何操作 我下载了zlib http sourceforge net projects mingw files beta MinGW zlib zlib 1 2 3 1 m
  • 设计在不同的屏幕上破碎[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我设计了一个网页 其中很少有HTML元素没有响应 这些元素是动态生成的jQuery我相信 应该有一种方法可以让他们看起来反应灵敏 Me
  • 如何针对 TextReader 使用正则表达式?

    在 可能 非常大的文本中查找模式的最佳方法是什么 我可以使用正则表达式 但它接受字符串作为参数 有没有办法将它与 TextReader 或某种流一起使用 不 正则表达式可能需要进行回溯 由于流只能向前读取 这意味着无论如何它都必须将整个流保
  • 无法在 Docker 容器内从 Google API 交换 AccessToken

    我有一个用 Go 编写的网络应用程序 使用 oauth2 包golang org x oauth2 通过 Google 登录用户 按照本教程操作https developers google com identity sign in web
  • Facebook API - uids 和电子邮件 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试开发一个应用程序 用户 X 已登录 Facebook 应用程序有一组电子邮件地址 可能是用户 X 的朋友 应用程序获取用户
  • 为什么要在 Objective C 构造函数中使用 [super init]?

    假设我有一个名为 Item 的类 它是 NewsItem 和 TwitterItem 的超类 如果我想创建一些 NewsItem 我必须使用 在构造函数内 self super init 如果是 为什么 在 Java C 中我会这样做 Ne
  • Flexbox 实现水平滚动

    我正在使用 Flexbox 布局制作一个购物中心网站 但 Flexbox 在某些区域会导致问题 Flexbox 似乎在某些区域进行水平滚动 但我不希望这样 您的问题是横幅中的图像太宽 无法适应大多数视口 因此它们迫使页面变宽 没有简单的方法
  • 在 R 中重复多个 NULL

    在我的模拟中 我需要一个如下所示的向量 vec NULL NULL NULL NULL 2 2 2 2 4 4 4 4 但是 在 R 中 当我使用rep NULL 4 它什么也不返回 例如 vec all c rep NULL 4 rep
  • SwiftUI 垂直未对齐的文本

    我有一些垂直未对齐的文本 我不知道为什么 代码 struct IBANInputView View State var securityDigits State var bankCode State var accountNumber va
  • CSS 动画在 Chrome 中不起作用

    对项目的一些见解 一个完整的交互式网站 动画将在其中播放 然后它们会停止 一旦它们停止并且动画上发生鼠标悬停事件 它将播放直到动画完成 70 当单击另一个对象时 在本例中 案例文本 它将完成它的循环 我的项目合作伙伴在 Google Web
  • 语法与运算符结合性之间的关系

    一些编译器书籍 文章 论文谈论语法的设计及其运算符的结合性的关系 我是自上而下的忠实粉丝 尤其是递归下降 解析器 到目前为止我编写的大多数 如果不是全部 编译器都使用以下表达式语法 Expr Term Term Term Factor Fa
  • 适用于 emacs 的交互式拼写检查程序

    我最近切换到 emacs24 并升级到 Ubuntu 12 04 我似乎无法让 hunspell 再次正常工作 我发现 hunspell 总体上比 aspell 更好 Hunspell 只想使用澳大利亚词典而不是英语美国词典 否则会冻结我的
  • 如何将 selenium webelelements 转换为 python 中的字符串列表

    我从 Scopus 网站收集了强制性数据 我的输出已保存在名为 文档 的列表中 当我对这个列表的每个元素使用 type 方法时 python 返回这个类
  • 接受 Flask url 中的整数列表而不是一个整数

    我的 API 有一个通过 url 中传递的 int id 来处理用户的路由 我想传递一个 id 列表 这样我就可以向 API 发出一个批量请求 而不是多个单个请求 我如何接受 id 列表 app route user
  • 运行应用程序时,在 VSCode 中启动 ASP.NET Core 应用程序中的特定 URL

    如果重要的话 可以在 Mac 上运行 在 Visual Studio 中 您可以在运行或调试 ASP NET Core 项目时使用此方法启动特定 URL 使用 launchUrl 属性 这是一个示例 launchSettings json
  • Laravel 按日期时间格式中的小时进行分组

    如何按一天中的时间对网站上的 注册 进行分组 我已经尝试过了 但它不起作用 regs DB table registrations gt select createddatetime DB raw COUNT id gt groupBy D
  • 如何访问 docker-compose 在 haproxy 配置中创建的副本

    我有一个简单的 haproxy cfg 如下所示 frontend http bind 8080 mode http use backend all backend all mode http server s1 ws 8080 现在我有一