[关闭]
@delight 2015-01-10T06:29:19.000000Z 字数 3238 阅读 3139

cometd使用haproxy做负载均衡的配置指南

haproxy push websocket cometd

下载安装

Ubuntu14.04直接用apt安装就是最新的稳定版,其他旧版本Ubuntu需要使用ppa获得:

  1. sudo add-apt-repository ppa:vbernat/haproxy-1.5

然后update,install即可。
(PS: 如果连add-apt-repository都不能用,先执行sudo apt-get install python-software-properties

使用

理论上直接用sudo service haproxy start|stop|restart|status|reload就可以,不过ubuntu直接安装后这个命令是没法用的…需要编辑/etc/init.d/haproxy,然后把ENABLED=0改成ENABLED=1,然后删除

  1. if [ -e /etc/default/haproxy ]; then
  2. . /etc/default/haproxy
  3. fi

这几行。当然,也可以直接使用sudo haproxy -f /etc/haproxy/haproxy.conf来启动,加上-d参数可以在前台运行调试。

配置

如果同时使用两种transport(websocket和http),需要注意long-polling的session保持问题。如果只使用websocket,需要注意的只有timeout的设置问题。

典型配置如下[1],默认路径为/etc/haproxy/haproxy.conf:

  1. global
  2. log 127.0.0.1 local0 #see /etc/rsyslog.d/haproxy.conf
  3. chroot /var/lib/haproxy
  4. pidfile /var/run/haproxy.pid
  5. uid 99
  6. gid 99
  7. daemon #run as service
  8. nbproc 1 #only one instance allowed
  9. maxconn 120000
  10. defaults
  11. mode http
  12. log global
  13. option httplog #log http info
  14. option http-server-close #Don't keepalive between haproxy and server
  15. option redispatch #if health check failed, dispath new server
  16. option forwardfor #for server get Ip of client
  17. retries 3 #connect to server fail max times before redispatch
  18. timeout connect 10s #timeout tcp connection between haproxy and backend servers
  19. timeout client 50s #timeout client inactivity
  20. timeout server 50s #timeout for server to process the request
  21. timeout queue 30s #timeout for request in queue when server reach max connection
  22. timeout http-keep-alive 2s
  23. timeout http-request 15s
  24. default-server inter 5s rise 2 fall 3
  25. stats uri /stats
  26. stats refresh 10s
  27. stats auth baina:P@55word
  28. frontend ft_web
  29. bind *:80
  30. timeout client 10m
  31. timeout client-fin 5s
  32. maxconn 120000
  33. option http-pretend-keepalive #without this, handshake can't be established
  34. default_backend cometd
  35. backend cometd
  36. timeout server 10m
  37. timeout tunnel 10m
  38. balance roundrobin
  39. # balance source
  40. option httpchk GET /cometd HTTP/1.1\r\nHost:\ \r\nConnection:\ upgrade\r\nUpgrade:\ websocket
  41. http-check expect status 101
  42. cookie SERVERID insert
  43. appsession SERVERID len 25 timeout 15m #for Long-polling keep session
  44. server bayuex-srv1 10.232.2.118:80 maxconn 40000 weight 10 cookie bayuex-srv1 check
  45. server bayeux-srv2 10.235.30.6:80 maxconn 40000 weight 10 cookie bayeux-srv2 check
  46. server bayeux-srv3 10.45.160.213:80 maxconn 40000 weight 10 cookie bayexu-srv3 check

存活检测通过httpchk选项来完成,cometd要求必须使用http1.1,因此header中必须要有Host,这里留空。

这里通过插入cookie来满足long polling的session保持需求,这要求client每次post都必须携带server发给client的cookie。当然这个问题也可以通过balance source hash ip来解决,但是后者可能会导致负载均衡度不高。

注意,如果使用long polling,切记加上option http-pretend-keepalive,不然server会把Connection: close发给client,握手直接被终结.

rsyslog

上述配置中,log 127.0.0.1 local0这句是用来配置log的,如果使用syslog,在/etc/syslog.conf中添加

  1. local0.* /var/log/haproxy/haproxy.log

即可指定到具体文件。

ubuntu使用rsyslog,因此对应的配置方法如下[2],默认路径/etc/rsyslog.d/haproxy.conf

  1. $ModLoad imudp
  2. $UDPServerRun 514
  3. $template Haproxy,"%msg%\n"
  4. local0.* -/var/log/haproxy.log;Haproxy
  5. & ~

为使配置生效,请将文件名改为49-haproxy.conf
日志的格式[3]可以通过配置$template参数来完成,这里写了最简单的一种输出格式。

日志滚动通过配置/etc/logrotate.d/haproxy来实现,默认有一个按日滚动的策略,一般够用了。
其格式如下:

  1. /var/log/haproxy.log {
  2. daily #按日滚动
  3. rotate 10 #保留10个
  4. missingok
  5. notifempty
  6. compress
  7. delaycompress
  8. postrotate
  9. invoke-rc.d rsyslog rotate >/dev/null 2>&1 || true
  10. endscript
  11. }

DDOS防范

haproxy可以用来做ddos防范,具体可参见:
http://blog.sina.com.cn/s/blog_704836f40101f4qh.html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注