问题标签 [haproxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
72888 浏览

haproxy - 全局 maxconn 和服务器 maxconn haproxy 的区别

我对我的 haproxy 配置有疑问:

正如你所看到的,它是直截了当的,但我对 maxconn 属性的工作方式有点困惑。

在服务器上的监听块中有全局和 maxconn。我的想法是这样的:全局的管理 haproxy 作为一项服务将一次排队或处理的连接总数。如果数字超过该数字,它要么终止连接,要么在某个 linux 套接字中池化?我不知道如果数字超过 4000 会发生什么。

然后你将服务器 maxconn 属性设置为 15。首先,我将其设置为 15,因为我的 php-fpm,这是转发到一个单独的服务器上,只有这么多可以使用的子进程,所以我确保我是在这里汇集请求,而不是在 php-fpm 中。我认为这更快。

但回到主题,我对这个数字的理论是这个块中的每个服务器一次只能发送 15 个连接。然后连接将等待打开的服务器。如果我打开了 cookie,连接将等待正确的打开服务器。但我没有。

所以问题是:

  1. 如果全局连接数超过 4000 会怎样?他们会死吗?或者以某种方式在Linux中汇集?
  2. 全局连接是否与服务器连接相关,除了服务器连接的总数不能大于全局?
  3. 在计算全局连接时,不应该是在服务器部分添加的连接数量,加上一定百分比的池吗?显然你对连接有其他限制,但实际上你想发送多少个代理?

先感谢您。

0 投票
0 回答
1288 浏览

haproxy - HAproxy:摘要认证

我们已经设置了一个负载均衡器来平衡 2 台服务器。配置如下所示:

全局
maxconn 40960
用户 haproxy
组 haproxy
守护进程

默认
日志全局
选项 dontlognull
重试 3
超时客户端 10 秒
超时服务器 10 秒
超时连接 4 秒
maxconn 40960

监听 webpool lbIP:80
模式 http
cookie SERVERID 插入间接
平衡
轮询 服务器 slave1 slave1IP:80 cookie A 检查端口 8981
服务器 slave2 slave2IP:80 cookie B 检查端口 8982

服务器 slave1 和 slave2 需要摘要认证。当客户端发送请求时,第一个请求被平衡到 slave1。这将返回 401:未经授权。第二个请求平衡到slave2并且会成功,它返回一个200:OK。问题是身份验证总是发生在 slave1 上,而响应总是来自 slave2。我希望两个请求(身份验证和返回数据)都进入一个连接/从站。

是否可以在 HAproxy 中进行配置?

谢谢约翰

0 投票
1 回答
4957 浏览

failover - HAProxy - 故障转移后保持会话粘性

我有一种情况,我必须在节点发生故障的情况下保持会话粘性。配置是:

  • 在 JBoss 4.2.3(同构集群)上运行我们的企业应用程序的三个节点(as1、as2、as3)
  • HAProxy 为每个节点执行循环(一个 TCP 服务器和一个 Tomcat)
  • 复制的 tomcat 会话(用于故障转移时的 SSO)
  • 启用坚持会话(appsession 指令)

我的问题是,当我放下其中一个节点(即 as3)时,会话粘性立即中断:会话在没有重新身份验证的情况下失败(Tomcat 共享会话),但从现在开始,每个请求都从不同的服务器(as1 as2 as1 as2 as1 as2 ...)。

如何确保故障转移请求在故障转移时坚持到第一个可用服务器?

0 投票
1 回答
405 浏览

nginx - URL 特定平衡

我的问题有两个关于 haproxy 的部分。

问题一:

我正在使用的服务处理上传大量 XML 文档,以及下载也相当大的结果。工作人员使用上传的 XML 文档生成响应,稍后可以从工作人员那里下载。这是一个粗略的设置:

--request--> www.domain.com --> worker(1 or 2).domain.com

www.domain.com 是一个静态内容服务器,也是 haproxy 所在的位置。所有请求最初都会来到这里。静态内容(html、图像等)应由 www.domain.com 上的 nginx 提供。

但是,具有特定 URL 的请求(例如 www.domain.com/[upload]/[id1] 或 www.domain.com/[download]/[id1])需要由工作人员自己处理。这里的另一个问题是转发需要基于 url 具有粘性。

例如:

假设一个 XML 文件被上传到 www.domain.com/upload/123。haproxy 将看到 url 包含上传,并将请求路由到 worker1.domain.com 或 worker2.domain.com。稍后,当向 www.domain.com/download/123 发出 GET 请求时,我需要 haproxy 将其路由到最初提供具有相同 id (123) 的上传请求的工作人员。基本上,我不能将给定 ID 的上传请求发送到 worker1,然后将相同 ID 的下载请求发送到 worker2。使用 haproxy 可以实现这样的事情吗?

问题2:

假设我正在将文件上传到 www.domain.com/upload,并且 haproxy 将其路由到 worker1.domain.com,那么整个文件会通过 haproxy 吗?也就是说,worker1.domain.com 会收到文件,而 haproxy 是否也会因为它在进行转发而受到相同的带宽影响?

非常感谢你!

0 投票
1 回答
283 浏览

ruby-on-rails - Rails 3.1 的日志条目过于冗长

更新:HAProxy 不能识别 Rails 不是问题,这是我的错误。但真正的问题是每个请求都会阻塞日志。更新了整个问题。

每次 rails 进程收到请求时,它都会在 rails.xxxx.log 中生成如下一行:

我如何让他们沉默?

0 投票
4 回答
5433 浏览

node.js - 终止大量 SSL 连接具有成本效益

我最近设置了一个基于 Node.js 的 Web 套接字服务器,该服务器经过测试可以在一个小型 EC2 实例 (m1.small) 上每秒处理大约 2,000 个新连接请求。考虑到 m1.small 实例的成本,以及将多个实例放在支持 WebSocket 的代理服务器(如 HAProxy)后面的能力,我们对结果非常满意。

但是,我们意识到我们尚未使用 SSL 进行任何测试,因此研究了一些 SSL 选项。很明显,在代理服务器上终止 SSL 连接是理想的,因为代理服务器可以检查流量并插入诸如 X-Forward-For 之类的标头,以便服务器知道请求来自哪个 IP。

所以我研究了许多解决方案,例如 Pound、stunnel 和 stud,所有这些都允许终止 443 上的传入连接,然后传递到端口 80 上的 HAProxy,然后将连接传递到 Web 服务器。然而不幸的是,我发现向 c1.medium(高 CPU)实例上的 SSL 终止代理服务器发送流量非常快地消耗了所有 CPU 资源,而且每秒只有 50 个左右的请求。我尝试使用上面列出的所有三个解决方案,它们的性能与我假设的大致相同,它们都依赖于 OpenSSL。我尝试使用 64 位超大 High CPU 实例 (c1.xlarge),发现性能仅随成本线性扩展。因此,根据 EC2 的定价,我需要为每秒 200 个 SSL 请求支付大约 600 美元/米,而不是 2 个 60 美元/米,每秒 000 个非 SSL 请求。当我们开始计划每秒接受 1,000 或 10,000 个请求时,前一个价格在经济上很快变得不可行。

我还尝试使用 Node.js 的 https 服务器终止 SSL,其性能与 Pound、stunnel 和 stud 非常相似,因此该方法没有明显优势。

因此,我希望有人可以提供帮助,建议我如何绕过我们必须承担的提供 SSL 连接的荒谬成本。我听说 SSL 硬件加速器提供了更好的性能,因为硬件是为 SSL 加密和解密而设计的,但是由于我们目前对所有服务器都使用 Amazon EC2,除非我们有单独的数据,否则不能使用 SSL 硬件加速器以物理服务器为中心。当成本如此之高时,我只是想看看亚马逊、谷歌、Facebook 等公司如何通过 SSL 提供所有流量。那里必须有更好的解决方案。

任何建议或想法将不胜感激。

谢谢马特

0 投票
1 回答
1431 浏览

amazon-ec2 - 对 Amazon EC2 上的 Weblogic 10gR3 RMI 服务器的请求进行负载平衡

我正在参与开发基于 RMI 的分布式解决方案,并部署在多个 Weblogic 10gR3 (10.3.0.0) 节点上。其中一个节点托管 RMI 服务器,其他节点通过外部 JNDI 提供程序访问它。在尝试通过添加额外的 RMI 服务器来改进我们的基础架构时,我们遇到了一些问题。

我们基础架构的详细信息:
-RMI 服务器在托管服务器上运行,端口为 7005。-
RMI 客户端通过远程 JNDI 提供程序访问它,该提供程序指向以下内容:t3://hostname:7005

我发布了迄今为止我们在创建额外的 RMI 服务器时所做的尝试,以及为什么它不起作用:

1) 使用 Amazon ELB --> 这不是一个选项,因为它需要向整个 Internet 开放我们的运行时端口 (7005),这显然是一个安全漏洞。

2) 配置多端点 JNDI 提供程序(类似于:t3://hostname1:7005,hostname2:7005),这显然适用于 JMS 队列 --> 所有请求都被定向到在 hostname1 上运行的 RMI 服务器,并且该应用程序实际上运行良好。但是,当故意使 hostname1 后面的服务器崩溃时,没有请求被定向到 hostname2。(他们应该被重定向吗?)

3) 使用软件负载均衡器,例如 HAproxy --> 在通过 HTTP 层进行均衡时,请求被解释为“t3 10.3.0.0”,从而导致 HAproxy 上出现 HTTP 502 错误。在 TCP 层进行平衡时,我们遇到了几个“丢失对象”错误,好像单个 TCP 连接正在用于多个 HTTP 请求,并且在第一个终止后,后续请求无法访问远程对象(只是猜测)。

4) 我们不愿意使用集群的 WebLogic 环境。

5)我们还没有考虑使用像spring-remoting-cluster这样的高级框架。

任何线索/建议?提前致谢!

0 投票
1 回答
308 浏览

haproxy - haproxy 去钓鱼

我正在使用 haproxy 将到端口 A 的流量引导到端口 B 上运行的服务。当服务关闭时,我想让 haproxy 立即转到钓鱼页面。我浏览了 haproxy 文档,但找不到如何实现这一点。有人可以阐明我的问题吗?谢谢!

0 投票
3 回答
6078 浏览

proxy - 以编程方式将节点添加到像 Haproxy 这样的负载均衡器?

我很确定这个问题已经解决了,但是我在任何地方都找不到任何关于它的信息......

系统管理员如何以编程方式将新节点添加到现有和正在运行的负载均衡器?假设我有一个负载均衡器正在运行并且已经在两个 EC2 实例之间平衡我的 API 服务器,突然出现流量峰值,我需要负载均衡器中的第三个节点,但我睡着了......如果我能有一些东西可能监控 RAM 使用情况和一些关键性能指标,告诉我什么时候应该有另一个节点,如果它可以单独向负载均衡器添加一个新节点,那就更好了......

我相信这对于node-http-proxyDistribute来说是可能的,甚至是微不足道的,但我想知道这是否可以通过 HAproxy 和/或 Nginx 来做......我知道亚马逊的弹性负载平衡可能是我最好的选择,但我想自己做(我想从机架空间、EC2、Joyent 和其他可能的实例中生成实例,因为它很方便)。

再一次,产生一个节点很容易,我想知道如何将它添加到 haproxy.cfg 或与 Nginx 类似的东西,而不必重新加载整个代理,并以编程方式进行。Bash 脚本是我最好的选择,但它仍然必须重新加载整个代理,这很糟糕,因为它失去了连接......

0 投票
1 回答
397 浏览

haproxy - 歪斜haproxy的可能性?

haproxy 是一个负载均衡代理。但是,我的用例是让 haproxy 将流量引导到服务器 A,并且仅当服务器 A 关闭时,haproxy 才应该将流量引导到服务器 B,除了显示“正在建设”或“暂时不可用”的页面之外,它基本上什么都不做每一个来的请求。