HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速而且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点一般又须要会话保持或七层处理。HAProxy运行在当前的硬件上,彻底能够支持数以万计的并发链接。而且它的运行模式使得它能够很简单安全的整合进您当前的架构中, 同时能够保护你的web服务器不被暴露到网络上。javascript
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持很是大的并发链接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,不多能处理数千并发链接。事件驱动模型由于在有更好的资源和时间管理的用户空间(User-Space) 实现全部这些任务,因此没有这些问题。此模型的弊端是,在多核系统上,这些程序一般扩展性较差。这就是为何他们必须进行优化以使每一个CPU时间片(Cycle)作更多的工做css
HAProxy的优势:前端
一、HAProxy是支持虚拟主机的,能够工做在四、7层(支持多网段);java
二、可以补充Nginx的一些缺点好比Session的保持,Cookie的引导等工做;web
三、支持url检测后端的服务器;算法
四、它跟LVS同样,自己仅仅就只是一款负载均衡软件;单纯从效率上来说HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;sql
五、HAProxy能够对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;apache
六、HAProxy的算法较多,达到8种;vim
七、HAProxy 支持链接拒绝 : 由于维护一个链接的打开的开销是很低的,有时咱们很须要限制***蠕虫(attack bots),也就是说限制它们的链接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS***的网站开发了并且已经拯救了不少站点,这个优势也是其它负载均衡器没有的。后端
八、HAProxy 支持全透明代理(已具有硬件防火墙的典型特色): 能够用客户端IP地址或者任何其余地址来链接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
九、细微的头部处理 : 使得编写基于header的规则更为简单,同时能够处理URI的某部分。
十、快而可靠的头部处理 : 使用彻底RFC2616 兼容的完整性检查对通常的请求所有进行分析和索引仅仅须要不到2ms 的时间。
十一、模块化设计 : 容许更多人加入进此项目,调试也很是简单. poller已经分离, 已经使得它们的开发简单了不少. HTTP已经从TCP分离出来了,这样增长新的七层特性变得很是简单. 其余子系统也会很快实现模块化
投机I/O 处理 : 在一个套接字就绪前就尝试从它读取数据。poller仅推测哪一个可能就绪哪一个没有,尝试猜想,而且若是成功,一些开销很大的系统调用就能够省去了。若是失败,就会调用这些系统调用。已知的使用Linux epoll()已经净提高起码10%了。
十二、 ACLs : 使用任意规则的任意组合做为某动做的执行条件。
下面是关于haproxy的简单配置:
安装haproxy
yum install haproxy -y
更改配置文件
vim /etc/haproxy/haproxy.cfg listen westos *:80 #监听端口为80 balance roundrobin #算法 server wb1 172.25.9.4:80 check #realserver开启的服务为apache server wb1 172.25.9.5:80 check /etc/init.d/haproxy start #启动服务
设定监控页面:
vim /etc/haproxy/haproxy.cfg stats uri /status (能够加如defaults里也能够另起监听端口) /etc/init.d/haproxy restart
将监控页面的前端与后端分离:
vim /etc/haproxy/haproxy.cfg frontend westos *:80 default_backend web #默认的后端为web backend web balance roundrobin server web1 172.25.9.4:80 check server web1 172.25.9.5:80 check /etc/init.d/haproxy restart
为监控页面添加用户
vim /etc/haproxy/haproxy.cfg stats auth admin:westos /etc/init.d/haproxy restart
添加备机
vim /etc/haproxy/haproxy.cfg server backup 127.0.0.1:8080 backup #这里的8080为更改后的apache服务 /etc/init.d/haproxy restart
当realserver全挂了后显示备机的网页
添加haproxy的日志
打开UDP监听端口
vim /etc/rsyslog.conf $ModLoad imudp $UDPServerRun 514
添加日志记录:
local2.* /var/log/haproxy.log /etc/init.d/rsyslog restart
经过tail -f /var/log/haproxy.log
能够实时观测日志:
设定acl控制列表
vim /etc/haproxy/haproxy.cfg frontend westos *:80 acl bad src 172.25.9.250 #设定250主机不能访问#redirect location http://172.25.9.4:80 if bad #重定向250的访问 block if bad errorloc 403 http://172.25.9.2:8080 #将403错误重定向#acl denyfile path /admin/ #设定拒绝访问的目录#http-request deny if denyfile bad #http也拒绝访问 /etc/init.d/haproxy restart
动静分离
当访问的页面以static等目录开始以.jpg等结束时访问的是p_w_picpaths不然访问web
vim /etc/haproxy/haproxy.cfg frontend westos *:80 acl url_static path_beg -i /static /p_w_picpaths /javascript /stylesheets acl url_static path_end -i .jpg .gif .png .css .js use_backend p_w_picpaths if url_static default_backend web backend p_w_picpaths balance roundrobin server web1 172.25.9.4:80 check backend web server web1 172.25.9.5:80 check /etc/init.d/haproxy restart
读写分离:
当写的时候访问web(如上传文件),不然访问p_w_picpaths
vim /etc/haproxy/haproxy.cfg acl read method GET acl read method HEAD acl write method PUT acl write method POST use_backend web if write default_backend p_w_picpaths backend p_w_picpaths balance roundrobin server web1 172.25.9.4:80 check backend web server web1 172.25.9.5:80 check /etc/init.d/haproxy restart