docker - haproxy 背后的牧场主
问题描述
我有一些用 Rancher 管理的小型集群。只有两个工人:node1和node2。
我可以添加一个stack1,为这个堆栈或全局添加一个负载平衡器,它工作正常。但是我的DNS有些问题。
例如,我可以将stack1.domain.com指向node1.domain.com。我的负载均衡器在 node1 上运行(甚至在我的集群的所有节点上),所以它可以工作。
但是如果有一天我需要关闭我的 node1,我必须快速将 DNS stack1.domain.com 指向 node2.domain.com 这不是一个好主意。
我的第一个想法是在我的 Rancher 集群前面使用一个小型 haproxy 服务器。
因此,我将 stack1.domain.com 指向haproxy.domain.com,然后将其 haproxy 后端到 node1 和 node2。
但它不起作用。
我可以放这样的东西
frontend http *:80
acl stack1 hdr(host) -i stack1.domain.com
use_backend bck_s1 if stack1
backend bck_s1
mode http
balance roundrobin
server n1 node1.domain.com:80 check
server n2 node2.domain.com:80 check
也许它可以工作。但是,如果我还需要添加在 80 端口上侦听的 stack2,则无法使用此模式。
我可以添加bck_s2,但它会指向同一个node1/node2。所以牧场主会不明白我要stack1还是stack2?
可以使用不同的端口来解决它,但这似乎不是一个好主意。当然我可以听 stack1 到 80 端口,stack2 到 8080,但是如果我有 stack3, 4,... 它变得太复杂了。
我有一个想法来添加一些后端路径。像这样 :
backend bck_s1
mode http
balance roundrobin
server n1 node1.domain.com:80/s1 check
server n2 node2.domain.com:80/s1 check
在这种情况下,我可以根据规则 /s1、/s2 等在 Rancher 上放置一个负载均衡器。但使用 haproxy 似乎不可能做到这一点。我对吗?
所以问题。
1)是否可以使用haproxy实现它以及如何做到这一点?
2)我可以使用其他一些解决方案吗?
解决方案
您可以配置通配符条目,而不是在 中使用特定条目haproxy.domain.com
,指向两个节点以及为后端配置运行状况检查。这样,当您关闭 node-1 时,HA 代理可以检测到它,并且不再将流量引导到该节点。这种方式在 HA 代理端会更加动态,您不需要更改 DNS。
参考: - HAPROXY 中 ACL 的子域中的通配符
推荐阅读
- ruby-on-rails - 如何找到属于当前用户的工作并在 Rails 中显示?
- android - 我应该把自动数据库更新的代码放在哪里?
- node.js - 两个 POST/GET 请求都会在 Postman 中产生 404 错误。是我的 Express 路由问题吗?
- regex - 如何在给定 DFA 的情况下解析输入字符串以进行匹配
- node.js - 错误 [ERR_HTTP_HEADERS_SENT]:NODEJS APP
- c - 查找学生数组中某个字段的最大数量
- hadoop - Kafka-Connect HDFS - Protobuf 到 Parquet
- python - 当打印语句确认它们的大小相同时,获取“ValueError:标签数量与样本数量不匹配”
- python - 查找相似特征/产品组合的模式(最好在python中)
- python-3.x - tkinter canvas - 从事件中提取对象 ID?