HAproxy_第1张图片

        HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

        HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作

HAProxy的优点:

1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段);

2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;

3、支持url检测后端的服务器;

4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;

5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;

6、HAProxy的算法较多,达到8种;

7、HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制***蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS***的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。

8、HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。

9、细微的头部处理 : 使得编写基于header的规则更为简单,同时可以处理URI的某部分。

 

10、快而可靠的头部处理 : 使用完全RFC2616 兼容的完整性检查对一般的请求全部进行分析和索引仅仅需要不到2ms 的时间。

 

11、模块化设计 : 允许更多人加入进此项目,调试也非常简单. poller已经分离已经使得它们的开发简单了很多. HTTP已经从TCP分离出来了,这样增加新的七层特性变得非常简单其他子系统也会很快实现模块化 

投机I/O 处理 : 在一个套接字就绪前就尝试从它读取数据。poller仅推测哪个可能就绪哪个没有,尝试猜测,并且如果成功,一些开销很大的系统调用就可以省去了。如果失败,就会调用这些系统调用。已知的使用Linux epoll()已经净提升起码10%了。

 

12、 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 #启动服务

HAproxy_第2张图片

HAproxy_第3张图片

设定监控页面:

 vim /etc/haproxy/haproxy.cfg 
   stats uri /status (可以加如defaults里也可以另起监听端口)
 /etc/init.d/haproxy restart

HAproxy_第4张图片

将监控页面的前端与后端分离:

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

HAproxy_第5张图片

为监控页面添加用户

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

HAproxy_第6张图片

当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 可以实时观测日志:

HAproxy_第7张图片

设定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