标签: haproxy

http在现代时代保持活力

所以根据haproxy作者,谁知道关于http的一两件事:

发明了Keep-alive是为了在CPU速度慢100倍时降低服务器上的CPU使用率.但是没有说的是,持久连接消耗大量内存,而除了打开它们的客户端之外,任何人都无法使用.今天在2009年,CPU非常便宜,根据架构或价格,内存仍然限制在几千兆字节.如果一个站点需要保持活着,那么就存在一个真正的问题.高负载站点通常会禁用keep-alive以支持最大数量的并发客户端.没有保持活动的真正缺点是获取对象的延迟略有增加.浏览器将非keepalive站点上的并发连接数加倍,以弥补这一点.

(来自http://haproxy.1wt.eu/)

这符合其他人的经验吗?即没有保持活力 - 结果现在几乎不值得注意?(它可能值得注意的是,使用websockets等 - 无论如何,无论保持活动状态如何,连接都保持"开放" - 对于响应速度非常快的应用程序).对于远离服务器的人来说效果是否更大 - 或者在加载页面时是否有许多工件要从同一主机加载?(我认为像CSS,图像和JS这样的东西越来越多地来自缓存友好的CDN).

思考?

(不确定这是否是serverfault.com的事情,但我不会发帖,直到有人告诉我把它移到那里).

webserver http keep-alive haproxy

92
推荐指数
2
解决办法
3万
查看次数

HAProxy将http重定向到https(ssl)

我正在使用HAProxy进行负载平衡,只希望我的网站支持https.因此,我想将端口80上的所有请求重定向到端口443.

我该怎么做?

编辑:我们想在https上重定向到相同的网址,保留查询参数.因此,http://foo.com/bar将重定向到https://foo.com/bar

ssl https redirect http haproxy

89
推荐指数
7
解决办法
14万
查看次数

全局maxconn和服务器maxconn haproxy之间的区别

我对我的haproxy配置有疑问:

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 syslog emerg
    maxconn     4000
    quiet
    user        haproxy
    group       haproxy
    daemon
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will 
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode        http
    log         global
    option      abortonclose
    option      dontlognull
    option      httpclose
    option      httplog
    option      forwardfor
    option      redispatch
    timeout connect 10000 # default 10 second time out if a backend is not found
    timeout client 300000 # 5 min timeout for …
Run Code Online (Sandbox Code Playgroud)

haproxy

86
推荐指数
1
解决办法
6万
查看次数

Java SSLContextImpl $ TLS10Context随机"peer not authenticated"异常

当使用SSL连接到HAProxy服务器时,我会出现随机出现的连接失败.我已经确认这些故障发生在JDK版本1.7.0_21和1.7.0_25上,但不是1.7.0_04或1.6.0_38.

例外是

 Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397)
    at SSLTest2.main(SSLTest2.java:52)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Run Code Online (Sandbox Code Playgroud)

这些故障仅在使用TLS SSL上下文而非默认上下文时发生.以下代码在循环中运行了一千次,并且在循环完成之前发生了故障(大约2%的连接失败):

SSLContext sslcontext = SSLContext.getInstance("TLS");   
sslcontext.init(null, null, null);
SSLSocketFactory factory = sslcontext.getSocketFactory(); 
SSLSocket socket = (SSLSocket)factory.createSocket("myserver", 443);

//socket.startHandshake();
SSLSession session = socket.getSession();
session.getPeerCertificates();
socket.close();
Run Code Online (Sandbox Code Playgroud)

但是,如果我以这种方式创建SSL上下文,我在上面提到的任何Java版本上都没有连接失败:

SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
Run Code Online (Sandbox Code Playgroud)

第一种方式使用SSLContextImpl$TLS10Context和后来使用SSLContextImpl$DefaultSSLContext.查看代码,我没有看到任何会导致异常发生的差异.

为什么我会得到失败以及使用getDefault()呼叫的优点/缺点是什么?

注意:首先使用Apache HttpClient(版本4)看到了异常.此代码是再现HttpClient所遇问题的最小子集.

这是我在添加时看到的错误-Djavax.net.debug=ssl:

main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1 ALERT:  fatal, …
Run Code Online (Sandbox Code Playgroud)

java ssl haproxy sslsocketfactory

50
推荐指数
1
解决办法
4459
查看次数

Amazon EC2中的负载均衡?

我们已经在亚马逊EC2上与HAProxy争夺了几天; 到目前为止,这种体验一直很好,但我们仍然在努力从软件负载均衡器中挤出更多性能.我们并不完全是Linux网络高手(我们通常是.NET商店),但我们到目前为止仍然拥有自己的,试图设置适当的ulimits,检查内核消息和tcpdumps是否存在任何异常情况.到目前为止,我们达到了大约1,700个请求/秒的平台,此时客户端超时比比皆是(我们一直在使用和调整httperf以此目的).一位同事和我正在收听最新的Stack Overflow播客,其中Reddit创始人注意到他们的整个站点都运行在一个HAProxy节点上,并且到目前为止它还没有成为瓶颈.确认!要么以某种方式没有看到许多并发请求,我们正在做一些可怕的错误,或者EC2的共享性质限制了Ec2实例的网络堆栈(我们使用的是大型实例类型).考虑到Joel和Reddit创始人都认为网络可能是限制因素这一事实,我们看到的限制是否可能?

任何想法都非常感谢!

编辑事实上,实际问题看起来并不是负载均衡器节点!罪魁祸首实际上是运行httperf的节点,在这个例子中.由于httperf为每个请求构建并断开套接字,因此它在内核中花费了大量的CPU时间.当我们提高请求率时,TCP FIN TTL(默认为60秒)会使套接字保持太长时间,并且ip_local_port_range的默认值对于此使用方案来说太低了.基本上,在客户端(httperf)节点持续创建和销毁新套接字几分钟后,未使用的端口数量用尽,后续"请求"在此阶段出错,产生的请求数/秒数较少且数量较多错误.

我们也看过nginx,但我们一直在使用RighScale,他们已经有了HAProxy的插件脚本.哦,当然,除非证明是绝对必要的,否则我们的截止日期太紧了[当然].幸运的是,在AWS上允许我们并行测试使用nginx的另一个设置(如果有保证),并在稍后进行切换.

此页面相当好地描述了每个sysctl变量(在这种情况下调整了ip_local_port_range和tcp_fin_timeout).

scaling load-balancing amazon-ec2 haproxy

46
推荐指数
2
解决办法
1万
查看次数

在漆膜前面或在其他方面的Haproxy?

我可以想象两个设置:

负载平衡然后缓存

                          +-- Cache server #1 (varnish) -- App server #1
                         /
Load Balancer (haproxy)-+---- Cache server #2 (varnish) -- App server #2
                         \
                          +-- Cache server #3 (varnish) -- App server #3
Run Code Online (Sandbox Code Playgroud)

缓存然后负载平衡

                                                       +-- App server #1
                                                      /
Cache Server (varnish) --- Load Balancer (haproxy) --+---- App server #2
                                                      \
                                                       +-- App server #3
Run Code Online (Sandbox Code Playgroud)

第一个设置的问题是有多个缓存,这会浪费大量内存并使缓存更加复杂.

第二个设置的问题是可能会出现性能损失和两个单点故障(varnish和haproxy)而不是一个(haproxy)?

我很想接受第二种设置,因为haproxy和varnish都应该快速而稳定:您的意见是什么?

architecture haproxy varnish

44
推荐指数
2
解决办法
2万
查看次数

HAProxy + WebSocket断开连接

我正在使用HAProxy将子域上的请求发送到node.js应用程序.

我无法让WebSockets工作.到目前为止,我只能让客户端建立WebSocket连接,但之后很快就会出现断开连接.

我在ubuntu上.我一直在使用的各种版本socket.ionode-websocket-server.客户端是Safari或Chrome的最新版本.HAProxy版本是1.4.8

这是我的HAProxy.cfg

global 
    maxconn 4096 
    pidfile /var/run/haproxy.pid 
    daemon 

defaults 
    mode http 

    maxconn 2000 

    option http-server-close
    option http-pretend-keepalive

    contimeout      5000
    clitimeout      50000
    srvtimeout      50000

frontend HTTP_PROXY
    bind *:80 

    timeout client  86400000

    #default server
    default_backend NGINX_SERVERS

    #node server
    acl host_node_sockettest hdr_beg(host) -i mysubdomain.mydomain

use_backend NODE_SOCKETTEST_SERVERS if host_node_sockettest


backend NGINX_SERVERS 
server THIS_NGINX_SERVER 127.0.0.1:8081

backend NODE_SOCKETTEST_SERVERS
timeout queue   5000
timeout server  86400000

server THIS_NODE_SERVER localhost:8180 maxconn 200 check
Run Code Online (Sandbox Code Playgroud)

我已经浏览了网络和邮件列表但无法获得任何建议的解决方案.

(ps这可能是针对serverfault,但是还有其他的HAProxy问题,所以我选择在这里发帖)

reverse-proxy haproxy websocket node.js

43
推荐指数
3
解决办法
4万
查看次数

验证haproxy.cfg

有没有办法在重新启动HaProxy服务之前验证HaProxy haproxy.cfg文件?例如:较大的haproxy.cfg文件中可能存在小的拼写/语法错误.我搜索了几个论坛,但无法找到与验证haproxy.cfg文件有关语法错误的任何内容.

截至目前,我在将更改上载到Production Server之前,在开发人员计算机上使用了试错法.

提前致谢..

haproxy

42
推荐指数
2
解决办法
6万
查看次数

HAProxy - 基于URL的路由与负载平衡

我是HAProxy的新手,我有一个关于HAProxy配置的问题,这有助于我在采取正确方法时做出关键决定.这将极大地帮助我决定架构.

我有3个应用程序.比方说app1,app2,app3.

每个应用程序由URL区分如下:

www.example.com/app1/123 -> app1
www.example.com/app2/123 -> app2
www.example.com/app3/123 -> app3
Run Code Online (Sandbox Code Playgroud)

我打算在2个不同的地区拥有每个应用的2个实例:

Region 1 - app1, app2, app3
Region 2 - app1, app2, app3
Run Code Online (Sandbox Code Playgroud)

我看到2种方法来配置这个,但我不确定这是最好的做法:

  • 方法1:让HAProxy1首先使用url模式区分请求.来自HAProxy1的请求将被路由到另一个HAProxy服务器,以设置单个应用程序(在本例中为3个HAProxy服务器),以实现负载平衡.

  • 方法2:有一个很好的HAProxy服务器,它按方法1中的说明执行这两个操作.也就是说,具有根据url隔离请求的配置,然后通过单独的过滤器传递每个请求,就像为每个应用程序设置的内容一样,以实现负载平衡.

我不确定haproxy是否支持方法2.任何想法或建议非常感谢.请稍微说清楚.

configuration routing haproxy

35
推荐指数
1
解决办法
6万
查看次数

在Spring Boot中使用Tomcat启用http2

Tomcat 8.5,这将是默认的Spring Boot 1.4,(将在明天发布)支持http2.

如何http2Spring Boot应用程序中启用?

java tomcat haproxy spring-boot http2

34
推荐指数
5
解决办法
2万
查看次数