ispsh 发表于 2019-1-1 14:34:03

LB之Haproxy

  软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
  HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
  HAProxy介绍
  反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加回。新的1.3引入了frontend,backend;frontend根据任意 HTTP请求头内容做规则匹配,然后把请求定向到相关的backend。
  实验环境:
  系统:rhel6.5
  server1.example.com:172.25.0.1 和 server2.example.com:172.25.0.2为服务主机
  server3.example.com:172.25.0.3和server4.example.com:172.25.0.4为后端服务器
  安装
  在server1和server2上
  #yum install -y haproxy
  #vim /etc/haproxy/haproxy.cfg
  保留最后的listen模块,上面注释相应模块
  listen westos *:80   //haproxy使用80端口
     balance roundrobin   //负载均衡为rr
     server web1 172.25.0.3:80 check   //服务机为ip为172.25.0.3的,名为web1
     server web2 172.25.0.4:80 check//服务机为ip为172.25.0.4,名为web2
  #/etc/init.d/haproxy start
   在server3和server4上,添加主页并且内容为各自的hostname。启动httpd。
   http://s3.运维网.com/wyfs02/M02/83/1E/wKioL1drZHyj1x0sAACB-7VG1_4645.png-wh_500x0-wm_3-wmp_4-s_3724427074.png
  
  在web上显示haproxy信息
  在server2上
  #vim /etc/haproxy/haproxy.cfg
  在maxconn下面添加
  stats uri /status
  http://s3.运维网.com/wyfs02/M02/83/1E/wKioL1drZKmB0yDhAALMyeSnMBA523.png-wh_500x0-wm_3-wmp_4-s_186004365.png
  #vim /etc/haproxy/haproxy.cfg
  frontend westos *:80
         default_backend web
  backend web
         balance roundrobin
         server web1 172.25.0.3:80 check
         server web2 172,25.0.4:80 check
           //将listen模块分为frontend 和backend。frontend根据任意 HTTP请求头内容做规则匹配,然后把请求定向到相关的backend。
  
  在server web1/2行后面加weight 1/2给web1/2加权重。
  在server行下面加
  server backup 127.0.0.1:8080 backup//备用机为本机,当server3或4都坏掉后通过8080端口启用本机
  #vim /etc/httpd/conf/httpd.conf
  添加Listen 8080    //增加apache监听8080端口
  启动httpd,并添加内容为”please try later”的主页。
  当server3与server4的httpd同时down掉后,
  http://s1.运维网.com/wyfs02/M00/83/1F/wKiom1drZRHCOTzWAABfjzSxkSU579.png-wh_500x0-wm_3-wmp_4-s_670391782.png
  
  在rsyslog中给haproxy添加日志文件
  #vim /etc/rsyslog.conf
  添加
  local2.*      /var/log/haproxy.log
  重启rsyslog服务。
  #tail -f /va/log/haproxy.log
  http://s3.运维网.com/wyfs02/M00/83/1F/wKiom1drZSmxtshLAAJ9OHtc8Nk527.png-wh_500x0-wm_3-wmp_4-s_3350285383.png
  
  #vim /etc/haproxy/haproxy.cfg
  在stats uri /status下面添加
     stats auth admin:westos   //给本机添加认证
  在frontend模块中添加
  acl bad src 172.25.0.251   //阻止源ip为172.25.0.251的主机访问
  真机ip为172.25.0.251,因此出现下图
  http://s2.运维网.com/wyfs02/M01/83/1E/wKioL1drZUDRvGXNAAB36NhGIyE438.png-wh_500x0-wm_3-wmp_4-s_510446603.png
  在acl下继续添加
  block if bad
  errorloc 403 http://172.25.0.2:8080   
  redirect location http://172.25.0.2:8080 if bad//当172.25.0.2:80出现403错误时跳转172.25.0.2:8080
  http://s1.运维网.com/wyfs02/M01/83/1F/wKiom1drZVeggHOgAABczUXemQQ574.png-wh_500x0-wm_3-wmp_4-s_2455707163.png
  注释刚添加的三行
  添加
  acl denyfile path /admin/
  http-request deny if denyfile bad   //拒绝访问172.25.0.2/admin(访问目标为web1或2的amdin)
  

  动静分离:
  注释刚添加的两行
  修改为
  frontend westos *:80
  acl url_static path_beg -i /static /images /javascript /stylesheets
  acl url_static path_end -i .jpg .gif .png .css .js   
  use_backend images if url_static      //当网址以images javascripts结尾时调用images模块
  default_backend upload
  backend images
      balance roundrobin
      server web1 172.25.0.3:80 check
      server backup 127.0.0.1:8080 backup
  backend upload
     server web2 172.25.0.4:80 check
  在server3中的/var/www/html/images文件夹中添加图片
  server2:
  #/etc/init.d/harpoxy reload
  http://s5.运维网.com/wyfs02/M02/83/1E/wKioL1drZZLCVcBTAAK6QY-Bw5I020.png-wh_500x0-wm_3-wmp_4-s_2963762265.png
  
  读写分离:
  添加
  acl read method GET
  acl read method HEAD
  acl write method PUT
  acl write method POST
  use_backend images if read//为读时调用images模块
  use_backend upload if write    //为写时调用upload模块
  在server3/4中添加upload文件夹(包含相应的php文件),在upload中添加upload文件夹。
  #chmod 777 -R /var/www/html/upload
  http://s4.运维网.com/wyfs02/M02/83/1F/wKiom1drZa3B4KorAABymZMX8_A019.png-wh_500x0-wm_3-wmp_4-s_3044565104.png
  通过日志可以看到,server3通过调用images模块读取上传信息,然后server4通过upload模块将文件存到server4的/var/www/html/upload/upload/中。上传后,可以在server4中的upload中找到上传的文件
  
  通过pacemaker调用haproxy
  在server1/2上
  #/etc/init.d/corosync start
  #crm configure
  #primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.0.100 cidr_netmask=32 op minitor interval=30s
  #primitive haproxy lsb:haproxy op monitor interval=30s
  #commit
  #group hagroup vip haproxy
  http://s5.运维网.com/wyfs02/M00/83/1F/wKiom1drZfSCDDmRAAByzXjTKAU920.png-wh_500x0-wm_3-wmp_4-s_3077545927.png
  
  
  
  
  
  
  
  
  



页: [1]
查看完整版本: LB之Haproxy