我试图build立一个HAProxy,它将监听80端口,并将任何stream量的位置redirect到两个服务器,同时进行健康check 。 服务器具有不同的URL,所以afaik我不能使用server <name> <ip>:<port> check行,因为我希望客户端的浏览器读取https:///ssl1.blah.com或https:// ssl2。 blah.com 这是我的haproxy.cfg: global log 127.0.0.1 local0 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 #debug #quiet user haproxy group haproxy defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen webfarm *:80 mode http […]
我目前正在使用nginx来反向代理请求从长期轮询到上游的Web客户端。 由于我们正在进行长轮询(而不是websockets),所以当客户端连接时,它会以串行方式与服务器build立多个http连接,每次服务器发送一些数据时重新build立一个连接(或者超时,确定服务器无话可说10秒)。 我想要做的是限制并发的Web客户端的数量。 由于客户端不断地发出新的HTTP请求,而不是保持单个请求的打开,所以计算Web客户端的总数(因为与并发连接的http客户端的总数不相同)是有点棘手的。 我想到的方法是跟踪起始IP地址的http请求,并将IP地址存储在TTL为20秒的地方。 如果一个请求的IP地址不被识别,那么我们检查未过期的存储IP地址的总数; 如果这小于最大值,那么我们允许通过这个请求。 如果一个请求带有一个IP地址,我们可以在查找表中find一个尚未过期的IP地址,那么这个IP地址也可以通过。 所有允许通过的请求都将其IP添加到表中(如果不存在),并且TTL再次刷新为20秒。 实际上,我用nginx和Redis 2.0 Nginx模块 (以及nginx lua模块来简化条件分支),使用redis来存储我的IP地址和TTL( SETEX命令),这样一来,用DBSIZE命令检查表的大小。 这工作,但performance是可怕的。 nginx和redis结束了使用大量的CPU,机器只能处理less量的并发请求。 在1.5版本中添加到Haproxy(通过serverfault提供的一个佣金 )的新的stick-table和跟踪计数器似乎是实现这种限速的理想select,因为粘贴表可以跟踪IP地址并自动过期条目。 但是,我没有看到一个简单的方法来获得棒表中未到期条目的总数,这将是必要的知道连接的Web客户端的数量。 我很好奇,如果有人有任何build议,对于nginx或haproxy,甚至没有提到的其他东西,我还没有想到。
我们build立了一个特殊的兴趣社交networking,需要为webapp服务器设置适当的服务器设置。 我们已经为webapp 5物理服务器 (2xE5645CPU,24GB Ram,RAID,4xGbit NIC)提供服务,其中一个服务器需要为我们的移动访问者(iOS,Android)提供API。 我们的web应用程序需要PHP,APC,Memcached和MySQL。 此外,我们有4个更多的物理服务器(2xE5620,12 GB RAM,RAID,4x千兆网卡): 彗星推服务器(聊天的自定义服务器) 队列/邮件服务器(beanstalkd) 静态networking服务器(G-WANnetworking服务器),带有12x2TB的2xDAS(Raid 6总共40TB) 专门用于HTTPS的Apache web服务器(如果SSL受保护的页面将放置在LB集群上,此服务器也可用于LB群集,这是否更好?)。 一开始我们只想在LB / HA上安装webapp服务器,因为目前我们没有更多的服务器可用。 最后是一个低成本的服务器(X3430,4 GB Ram,RAID,2 Gbit NIC),用于监控所有硬件。 我们有2台HP Procurve 2900pipe理型48端口千兆交换机。 上述所有设备都保留在我们的networking中心机架中。 我们在所有服务器上使用RHEL 6。 我有很多想法,但是我不确定哪个是最好的方法。 我的方向是在两个盒子上安装HA Proxy和Apache webserver,在两个盒子上安装MySQL数据库服务器,并在API和Web服务上使用Apache和MySQL。 使用其中一台专用networking的交换机连接所有服务器并用于内部通信(MySQL,上传后的文件传输)。 将每个服务器的多个NIC端口连接到交换机是否有帮助? HA Proxy是我们案子的最佳方式吗? 或者在2或3盒上使用nginx会更好,并且使用它来进行负载均衡和服务PHP,并且对于HA部分有LVS或类似的东西? 我为所有的解决scheme开放,5 + 1服务器可以灵活使用。 谢谢你的帮助。 更新:经过更多的研究,我认为这将是很难find一个解决scheme有所有服务器HA。 我的设置的实际想法是: nginx作为负载均衡的代理(我将使用中规格框之一) 3私人networking上的Apachenetworking服务器 2私有网上的MySQL服务器主/从 在上面的解决scheme中,Apache Web服务器也将托pipe支付SSL站点,我不确定是否nginx可以处理这个不同的后端服务器的SSL证书。 更新2:我做了更多的研究,Redhat提供了一个基于LVS的负载平衡附加组件。 http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtual_Server_Administration/ch-lvs-overview-VSA.html这个插件看起来不错,但我仍然不知道哪个方向是正确的一? 在前面使用nginx还是使用LVS或其他的更好? 有人告诉我,我可以使用现有的HP Procurve […]
我在集群中使用HAProxy 1.3.15,后面有一些运行IIS7(Win2k8)的服务器。 偶尔,当我检查“状态”时,我看到时间量“UP”已经复位。 我在服务器上看不到任何错误或重置,但我仍然觉得很奇怪。 所以,我想我有两个问题: HAProxy如何确定服务器是否为了报告而“UP”? 正常运行时间信息有多可靠?
我正在尝试使用Haproxy的通道来支持SSL。 SSL证书根据stunnelconfiguration进行定位。 我也能够获得https连接,但每次使用https时,会话都会丢失。 我不使用tomcat 8443端口来获取安全的内容。 只有使用stunnel和haproxy才有可能获得https连接? 而且我的要求是一旦用户login后有https连接。
我对负载平衡的概念完全陌生,所以我希望这个问题不是一个“愚蠢的问题”,因为我一直在四处搜寻,即时了解这一点。 所以,据我了解,为了负载平衡,我需要一个具有IP地址的单独的机器,我可以指挥所有的stream量。 我最初以为我需要租用3个专用服务器,一个用于负载均衡,另外两个用作后端服务器。 专用的服务器对于负载平衡器来说太多了吗?或者托pipe公司在那个过程中有特殊types的计算机? 然后我读了别的地方,我可以在两台服务器上安装一个负载均衡软件,并且以一种不需要我租用另一台机器/专用服务器进行负载均衡的方式进行configuration。 所以我有点混淆了如何实际实现一个负载平衡器,以及我是否需要一个专用的服务器作为负载平衡机的唯一目的。 另外,我被推荐使用HAproxy,所以我会朝着负载平衡的方向。
我试图设置haproxy路由到后端取决于在http请求中使用的子域。 例如,我有一个运行在端口8000上的常规Web服务器和一个应用服务器,该服务器在同一个IP地址上等待8001端口上运行的websocket连接。 我现在想要的是,如果用户点击app.mydomain.com:80他被redirect到8001端口,如果他点击www.mydomain.com(或任何其他子域),他被redirect到端口8000上的networking服务器。 我想出了一个简单的configuration,我认为应该做到这一点(它基于这个问题松散): frontend all 0.0.0.0:80 timeout client 86400000 acl aclMS1 hdr_dom(host) -i app use_backend beMS1 if aclMS1 default_backend beWEB backend beMS1 timeout server 86400000 server srvMS1 localhost:8001 maxconn 200 check backend beWEB server webserver localhost:8000 maxconn 200 check 但是,这似乎是行不通的。 我总是在我的web服务器端口8000端口。我做错了什么?
如何实现node.js能够处理250k连接作为彗星服务器(客户端我们使用socket.io)? 将nginx用作代理/负载均衡是否是正确的解决scheme? 或者HA-Proxy会是更好的方法吗? 有没有人有100k +连接的真实世界的经验,可以分享他的设置? 像这样的设置是正确的(每个服务器的四核CPU – >每个服务器启动4个node.js的实例?): nginx (as proxy / load balancing server) / | \ / | \ / | \ / | \ node server #1 node server #2 node server #3 4 instances 4 instances 4 instances
我有一个标准的erlang应用程序build立在otp原则上。 我打算把我的erlang节点放在生产中,如下所述: 接收公共ip(haproxy)上的所有stream量 haproxy他们到一个可用的后端erlang节点 所有这些工作都非常好,但是在基于会话的http事务的情况下,erlang节点接收到一个请求的机会之一,谁的会话相关的进程驻留在另一个erlang节点上。 我的问题与处理这种情况的最佳策略有关: 第一个选项是configurationhaproxy基于源(即IP地址)来平衡,这将始终保证从一个IP的会话的所有请求去相同的后端erlang节点 第二个select是configurationhaproxy基于一些会话相关的cookie参数(基本上给我像情况1一样)平衡) 最后,因为我的erlang节点可以很好地相互通信,所以也可以简单地configurationhaproxy以循环方式进行平衡,当一个erlang节点接收到一个请求时,其会话进程驻留在另一个erlang节点上,它可以在内部进行通信erlang节点使用rpc:call()并提供请求。 1),2)是非常直接的使用和设置,但是我读和testing基于source / cookie / url_param的平衡并不能确保后端之间的平衡。 3)可以使用erlang内部的mnesia复制function来实现。 与3)我可能会结束一个情况下,一个erlang节点内部通信到另一个erlang节点,然后才最终响应请求。 我想知道什么是可取的,为什么? 将长期考虑我的otp应用程序处理大量的实时数据(xmpp协议)将是一个更好的select。
我在CentOS 5.8上使用HAProxy 1.3.26来代理所有请求到一个专用服务器。 我使用HAProxy只是将HTTP和HTTPS代理到一台服务器,所以没有负载平衡。 我的haproxy.cfg相当简单: global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy daemon defaults log global option dontlognull option httpclose option forwardfor clitimeout 60000 srvtimeout 60000 contimeout 5000 retries 3 option redispatch listen http 192.168.0.1:80 mode tcp option tcplog maxconn 10000 server web01 192.0.1.13:80 maxconn 5000 listen https […]