如何在haProxy配置中访问Docker-Compose创建的复制副本 [英] How to access docker-compose created replicas in haproxy config
本文介绍了如何在haProxy配置中访问Docker-Compose创建的复制副本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个简单的haproxy.cfg,如下所示:
frontend http
bind *:8080
mode http
use_backend all
backend all
mode http
server s1 ws:8080
现在我有了一个如下所示的docker合成文件:
version : '3.9'
services:
lb:
image: haproxy
ports:
- "8080:8080"
volumes:
- ./haproxy:/usr/local/etc/haproxy
ws:
image: myserver
这很好用,但现在我想使用Replica将我的服务器(Ws)实例扩展到4个。 我可以做到这一点,只要提供这个docker合成文件:
version : '3.9'
services:
lb:
image: haproxy
ports:
- "8080:8080"
volumes:
- ./haproxy:/usr/local/etc/haproxy
ws:
image: myserver
deploy:
mode: replicated
replicas: 4
调用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完成此操作,您应该考虑两件事:
- 将HAProxy中的解析程序设置为使用位于
127.0.0.11
的Docker内部DNS。 - 在HAProxy配置中使用
server-template
。
在配置中使用Docker的DNS将允许HAProxy在我们在后端定义服务器模板时将其用作服务发现机制。您可以像这样在HAProxy中创建resolver:
resolvers docker
nameserver dns1 127.0.0.11:53
Server templates是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
。
这篇关于如何在haProxy配置中访问Docker-Compose创建的复制副本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文