我对设置 HAProxy 以用作一组小流量 Web 应用程序的负载平衡器很感兴趣。使用量正在增长,并可能在短期内(6 个月左右)变成中等规模。主要我们正在寻找平衡负载,因为有些客户想要他们自己的专用服务器,有些客户需要尽可能低的成本,以便适应我们似乎需要一个负载平衡器。
我查看了 HAProxy 主页和一些博客,但它们确实没有涉及具体细节,或者是使用 Sun 服务器进行应用程序的大型站点
就处理器、内存、存储和分布而言,您使用或会为此类应用程序推荐什么样的硬件和分布?
提前致谢
服务器 web1 10.10.10.10 权重 100
服务器 web2 10.10.10.11 权重 100
服务器 web3 10.10.10.12 权重 90
服务器 web4 10.10.10.13 权重 90
我在网站基础架构设计方面的经验很少。我知道这可能是针对特定情况的。该网站应该:
1) 某些页面(例如登录页面)需要 HTTPS 支持,而其他页面只是 HTTP 页面。
2) 需要多个 Web 服务器,因此需要进行一些负载平衡。
3) 需要 HTTP 缓存和压缩以提高性能。
4) 一些请求(例如图片上传)应该路由到专用的后端服务器。因此,需要基于 URL 的平衡。
我知道 NginX 和 HAProxy 都是不错的开源反向代理和/或负载均衡器。由于 HAProxy 不支持 SSL,而 Nginx 负载均衡不如 HAProxy。我两个都要。
那么,我应该将 Nginx(作为反向代理)放在 HAProxy(作为负载均衡器)的前面,还是相反?
谢谢
我拥有一个像 xyz.com 这样的域,我正在尝试使用 haproxy 重定向其他 ip 的子域。
我在服务器上使用 tomcat,并使用 haproxy 将端口 80 上的传入请求重定向到端口 8080。
Like;
www.xyz.com -> 10.0.0.1
www.xyz.com/abc -> 10.0.0.2
or abc.xyz.com -> 10.0.0.2
Run Code Online (Sandbox Code Playgroud)
为了进行这种重定向,我该如何设置 haproxy?
我有以下设置:
|-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
|-------|--- backend3:8080
Run Code Online (Sandbox Code Playgroud)
我想配置 HAProxy 以添加包含原始 url 的自定义标头。例如,如果用户请求http://example.com/foo?bar=baz,即:
GET /foo?bar=baz HTTP/1.1
Host: example.com:80
Run Code Online (Sandbox Code Playgroud)
我希望 HAProxy 将此请求转换为后端,如下所示:
GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz
Run Code Online (Sandbox Code Playgroud)
该reqadd选项仅允许我添加具有静态值的标题。我能够使用reqrep以下命令从请求中获取路径部分:
reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这仅捕获原始 url 的路径部分,导致以下标题:
x-custom-header: /foo?bar=baz
Run Code Online (Sandbox Code Playgroud)
所以我的问题是在 HAProxy 1.4 中是否有可能Host将 HTTP 请求的标头和第一行组合成一个自定义标头
我需要在具有不同主机名的多个正在运行的服务器之间进行负载平衡。我无法在每个主机上设置相同的虚拟主机。
是否可以只对多个服务器进行一个监听配置并使健康检查应用该http-send-name-header Host指令?我正在使用 HAProxy 1.5。
我想出了这个工作 haproxy.cfg,正如你所看到的,我必须为每个健康检查设置一个不同的主机名,因为健康检查忽略http-send-name-header Host. 我更喜欢使用变量或其他方法并使事情更简洁。
global
log 127.0.0.1 local0 notice
maxconn 2000
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
timeout connect 5000
timeout client 10000
timeout server 10000
stats enable
stats uri /haproxy?stats
stats refresh 5s
balance roundrobin
option httpclose
listen inbound :80
option httpchk HEAD / HTTP/1.1\r\n
server instance1 127.0.0.101 check inter 3000 fall 1 rise 1
server instance2 127.0.0.102 check …Run Code Online (Sandbox Code Playgroud) 我把这个脚本从不同的地方放在一起。我希望它一旦运行就会执行以下操作:
这是它将如何运行?我错过了什么吗?我们有数千条基于 ip 的 acl 规则,存储在 haproxy 引用的文件中,我们需要每分钟重新加载几次。
#!/bin/sh
# hold/pause new requests
iptables -I INPUT -p tcp --dport 80 --syn -j DROP
iptables -I INPUT -p tcp --dport 443 --syn -j DROP
sleep 1
# gracefully restart haproxy
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
# allow new requests to come in again
iptables -D INPUT -p tcp --dport 80 --syn -j DROP
iptables -D …Run Code Online (Sandbox Code Playgroud) 我被要求在数据中心重建我们的负载平衡基础设施。
最初的请求是对 FTP 服务器进行负载平衡。我尝试使用当前的负载平衡器 ( Piranha / LVS)执行此操作,但没有启动并运行。不仅仅是因为这个软件几乎没有文档。由于Piranha被认为已弃用,我在HAProxy尝试了几天后转而使用它,它在Piranha.
所以我已经有了 FTP 负载平衡(被动模式)。现在,我被要求更换数据中心的整个 Piranha Load Balancer。在当前的 Piranha 配置中,我们有几个 Web 服务器、IIS 服务器....aaa 和DNS。
不,事情是这样的:
HAProxy似乎是一个常用的 LB,但它不能处理UDP load balancing. 这是一个无赖,因为我喜欢如何HAProxy运作。所以我用谷歌搜索了很多,遇到了几件事。大多数人似乎将LVS其用作 DNS (TCP/UDP) 的 LB。有的用dlbDNS,有的用lbnamed,有的用netfilter / iptables。
由于我想坚持使用HAProxyFTP、HTTP、IIS 服务器,因此我对将它与LVS.
要求:
具有故障转移功能的
2个 LB 实例 具有故障转移功能的2 个 DNS 服务器(已经存在)
多个后端服务器(http、应用程序等...)
问题:
这可能吗?DNS 服务器上的 UDP 负载平衡是否有必要?是否有任何类型的资源可以告诉我如何开始使用它?或者有没有既能处理 TCP/HTTP 又能处理 UDP 负载均衡的 …
从同一个工作站向同一个 haproxy 服务器发出相同的 url 请求:
CD标志--这两个请求都得到了完整的答复 - 没有数据被截断。
根据此,标志CD是指
客户端在数据传输期间意外中止。这可能是由于浏览器崩溃、客户端和 haproxy 之间的中间设备决定主动断开连接、客户端和 haproxy 之间的网络路由问题或服务器和客户端之间的保持活动会话终止引起的首先由客户。
鉴于我从同一个工作站发出两个查询,我将排除“中间设备”或“路由问题”的任何影响。区别似乎在于两个客户端如何打开和关闭连接。
有什么线索吗?
我有 haproxy 配置,非常适合后端的 vault 服务器,使用 http 配置,它使用 200 OK 代码基于未密封和活动的 vault 服务器进行负载平衡。这适用于http。但是我们将所有内容都设置为 https (tls),因此健康检查不再起作用,haproxy 将我们引导至密封的保险库服务器。如何修改以下配置以支持 https Vault 服务器后端的健康检查?我当前的 http 配置如下:
listen vault
bind 0.0.0.0:443
mode tcp
balance roundrobin
option httpchk HEAD /v1/sys/health
http-check expect status 200
option tcplog
option ssl-hello-chk
server web1 <vault 1 IP>:8200 check
server web2 <vault 2 IP>:8200 check
Run Code Online (Sandbox Code Playgroud)