HAProxy是一个自由及开放源代码的软件,由
c语言编写,提供高可用性、负载均衡以及基于TCP和HTTP的应用程序代理。它特别适用于负载特大的web站点,这些站点通常需要会话保持或七层处理。HAProxy运行在当前的硬件上,能够支持数以万计的并发连接。其运行模式使得它可以简单安全地整合到您的架构中,同时保护您的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动、单一进程模型,这种模型能够支持非常大的并发连接数。多进程或
多线程模型由于内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间实现所有这些任务,所以没有这些问题。然而,在多核系统上,这些程序的扩展性通常较差,因此必须进行优化,以使每个CPU时间片做更多的工作。
知名网站如
GitHub、Bitbucket、Stack Overflow、
Reddit、
Tumblr、
Twitter和Tuenti等都使用了HAProxy。此外,
亚马逊网络服务系统的OpsWorks产品也使用了HAProxy。
安装
tar zxvf haproxy-1.4.8.tar.gz
cd haproxy-1.4.8
uname -a //查看linux内核版本
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install
prefix=/usr/local/haproxy
配置
配置HAProxy Session亲缘性的三种方式
haproxy负载均衡保持客户端和服务器Session亲缘性的三种方式:
1 用户IP 识别
haproxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于
Nginx 的IP hash 指令)
配置指令 balance source
haproxy 将WEB服务端发送给客户端的cookie中插入(或添加前缀)haproxy定义的后端的服务器COOKIE ID。
配置指令例举 cookie SESSION_COOKIE insert indirect nocache
用
FireBug可以观察到用户的请求头的cookie里 有类似" Cookie jsessionid=0bc588656ca05ecf7588c65f9be214f5; SESSION_COOKIE=app1" SESSION_COOKIE=app1就是haproxy添加的内容
3 session 识别
haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。
配置指令例举 appsession JSESSIONID len 64 timeout 5h request-learn
配置举例:
#vi /usr/local/haproxy/haproxy.cfg
mode http
cookie SESSION_COOKIE insert indirect nocache
server REALsrv_70 184.82.239.70:80 cookie 11 check inter 1500 rise 3 fall 3 weight 1
server REALsrv_120 220.162.237.120:80 cookie 12 check inter 1500 rise 3 fall 3 weight 1
mode http
balance source
backend APPSESSION_srv
mode http
appsession JSESSIONID len 64 timeout 5h request-learn
server REALsrv_70 184.82.239.70:80 cookie 11 check inter 1500 rise 3 fall 3 weight 1
server REALsrv_120 220.162.237.120:80 cookie 12 check inter 1500 rise 3 fall 3 weight 1
启动
#启动haproxy
/usr/local/haproxy/haproxy -f
#查看是否启动
[zhangy@BlackGhost haproxy]$ ps -ef|grep haproxy
4859 ? 00:00:00 haproxy
4860 ? 00:00:00 haproxy
测试
[root@BlackGhost haproxy]# /usr/local/bin/webbench -c 100 -t 30 http://localhost:1080/phpinfo
PHP说明
HAProxy监听的端口是1080,代理192.168.18.2:10000,127.0.0.1:10000
统计监听的是8888端口 http://localhost:8888/haproxy-stats
版本发布
2012年12月28日 : HAproxy 1.5-dev17 发布。
2012年05月15日,HAproxy 1.5.0 dev10 发布。
2012年05月22日,HAproxy 1.4.21 发布,Web负载均衡。
2012年06月04日,HAproxy 1.5 dev11 发布,该版本修复了 dev8 的很多 bug ,合并和一些新特性,包括服务器的软起动和停止,同时增加选项用于对整个 URI 进行哈希而不只是路径,同时增加选项用于当主服务器恢复时停止备用服务器的功能等等,如果你正在使用 dev8 请立即升级。
2012年08月23日,HAproxy 1.4.22 发布,Web负载均衡。
2012年09月10日,HAproxy 1.5 dev12 发布。
2012年09月11日,HAproxy 1.5.0 dev12 发布,该版本最主要的是增加客户端和服务器端的原生 SSL 支持,其他方面包括新的 ACL 和模式,支持老的 Linux 内核上的 IPv6 透明模式,可通过 nice 关键字来修改会话的调度优先级等等。
2012年11月22日,HAproxy 1.5.0 dev13 发布。
2012年12月24日,HAproxy 1.5.0 dev15 发布。
2012年12月28日,HAproxy 1.5.0 dev17 发布。
2019年04月25日,HAproxy 1.8-stable 发布。
2019年04月25日,HAproxy 1.9-stable 发布。
2019年03月26日,HAproxy 2.0-dev 发布。
参考资料
Warning: Invalid argument supplied for foreach() in
/www/wwwroot/newbaike1.com/id.php on line
362