设为首页 收藏本站
查看: 995|回复: 0

[经验分享] haproxy+keepalived实现负载均衡及高可用

[复制链接]

尚未签到

发表于 2018-12-31 11:18:47 | 显示全部楼层 |阅读模式
      HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高性能性、负载均衡,以及基于TCP和HTTP的应用程序代理。相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。
      HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
     包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter在内众多知名网站,及亚马逊网络服务系统都使用了HAProxy。
  
  Haproxy的特性:
  1、可靠性与稳定性都非常出色,可与硬件级设备媲美。
  2、支持连接拒绝,可以用于防止DDoS***
  3、支持长连接、短连接和日志功能,可根据需要灵活配置
  4、路由HTTP请求到后端服务器,基于cookie作会话绑定;同时支持通过获取指定的url来检测后端服务器的状态
  5、HAProxy还拥有功能强大的ACL支持,可灵活配置路由功能,实现动静分离,在架构设计与实现上带来很大方便
  6、可支持四层和七层负载均衡,几乎能为所有服务常见的提供负载均衡功能
  7、拥有功能强大的后端服务器的状态监控web页面,可以实时了解设备的运行状态,还可实现设备上下线等简单操作。
  8、支持多种负载均衡调度算法,并且也支持session保持。
  有关keepalived请参看博客:http://13150617.blog.运维网.com/13140617/1979652
  

  实验:实现基于Haproxy+Keepalived负载均衡高可用架构
DSC0000.gif

  1、准备四台机器:两台用于haproxy主从架构,两台作为后端server

             haproxy-master:两块网卡,桥接模式和仅主机模式都有
                       VIP:172.17.111.10
             haproxy-backup:两块网卡,桥接模式和仅主机模式都有
                       VIP:172.17.111.10
             后端server1:仅主机网卡:RIP:192.168.199.146
             后端server2:仅主机网卡:RIP:192.168.199.143
  2、在haproxy-master上操作
  ①安装keepalived,配置keepalived。
  具体参数含义请参看博客:http://13150617.blog.运维网.com/13140617/1979652
  vim /etc/keepalived/keepalived.conf   
  ! Configuration File for keepalived
   global_defs {   
     notification_email {
       root@localhost  
     }
     notification_email_from Alexandre.Cassen@firewall.loc
     smtp_server 127.0.0.1   
     smtp_connect_timeout 2
     router_id LVS_DEVEL2   
  }
  vrrp_instance VI_1 {
      state MASTER
      interface eth0
      virtual_router_id 33
  #    nopreempt
      priority 100
      advert_int 1
   authentication {
          auth_type PASS
          auth_pass 111111
      }
      virtual_ipaddress {
          172.17.111.10
      }
  }
  systemctl start keepalived  启动服务
  
  ②配置日志服务
  vim /etc/rsyslog.conf
        $ModLoad imudp     开启UDP的日志服务,也可以开启TCP
       $UDPServerRun 514  
        local2.* /var/log/haproxy.log  定义日志标准
  systemctl restart rsyslog  重启日志服务
  ③配置haproxy
  vim /etc/haproxy/haproxy.cfg
    global                      全局配置   
      log        127.0.0.1 local2   日志类型
      chroot      /var/lib/haproxy  修改haproxy的工作目录
      pidfile     /var/run/haproxy.pid 进程id
      maxconn      4000        最大连接数
      user        haproxy        运行用户
      group       haproxy        所属组
      daemon                   让haproxy以守护进程的方式工作
      stats socket /var/lib/haproxy/stats可开启一个unix socket管理接口
    
  defaults
      mode              http  实现http的7层规则
      log               global 日志定义,沿用global的日志定义
      option             httplog 启用日志记录HTTP请求
      option             dontlognull 日志中将不会记录空连接
      option http-server-close      强制短连接
      option forwardfor     except 127.0.0.0/8 添加xforward日志标记
      option            redispatch      出错时重新分配
      retries            3            重试次数
      timeout http-request   10s           请求超时时间
      timeout queue        1m           队列超时
      timeout connect      10s           连接超时
      timeout client       1m            客户端超时
      timeout server       1m            服务器端超时
      timeout http-keep-alive 10s           持久连接
      timeout check       10s            检查超时
      maxconn           3000           最大连接
  
  listen stats   定义一个统计报告服务
          mode http #基于http协议
          bind 0.0.0.0:1080 #监听1080端口
          stats enable #开启统计报告服务
          stats hide-version #隐藏统计报告版本信息
          stats uri /haproxyadmin #统计报告访问url
          stats realm Haproxy\ Statistics #页面登陆信息
          stats auth admin:admin #验证账号信息
          stats admin if TRUE #验证模式
  
  frontend  http-in   定义一系列监听的套接字
      bind *:80
      default_backend      app
  
  backend app    定义一系列“后端”服务器
      balance  roundrobin
      option  httpchk /index.php   检查页面
      server  app1 192.168.199.146:80 check inter 3000 rise 3 fall 3
      server  app2 192.168.199.143:80 check inter 3000 rise 3 fall 3
  
  systemctl start haproxy   启动haproxy服务
  
  ④开启转发
     echo 1 > /proc/sys/net/ipv4/ip_forward
  
  3、在haproxy-backup上操作
   ①安装keepalived,配置keepalived
     vim /etc/keepalived/keepalived.conf
     配置基本同上,只需要修改state的状态为BACKUP
    systemctl start keepalived 启动服务
   ②配置日志服务
     完全同上
   ③配置haproxy
     完全同上
   ④开启转发
     echo 1 > /proc/sys/net/ipv4/ip_forward
  
  4、测试keepalived高可用:当主服务器正常工作时,VIP在主服务器上,当关闭主服务器的keepalived服务,VIP会漂移到从服务器上,而且网站照常可以访问

  关闭主服务器后IP漂移:


  测试haproxy:
  访问:http://172.17.111.10:1080/haproxyadmin 查看统计报告,都正常

  

  实验二、通过ACL指定可访问的用户
  在frontend中加入
      acl myhost src 172.16.100.1  指定可访问的ip
      acl myport dst_port 80     指定目标端口
      block if ! myhost myport   拒绝其他主机访问
  重启haproxy服务:systemctl restart haproxy
  测试:在添加此acl之前,其他主机可以访问
       添加此acl之后就不能访问了

  实验三、根据用户访问内容实现动静分离

  在frontend中加入
       acl url_static  path_beg  -i /data /images /javascript /stylesheets /themes 匹配开头
      acl url_static  path_end  -i .jpg .gif .png .css .js .jpeg 匹配后缀
      use_backend static   if url_static  如果符合条件就匹配到static中所定义的服务器
  

  backend static  定义“后端”服务器
       balance     roundrobin   轮询
       server  static1 192.168.199.146:80 check   
       server  static2 192.168.199.143:80 check
  重启haproxy服务:systemctl restart haproxy
  效果:所有的图片等静态页面就会被分配到这两个server里
  

  实验四、实现真实日志记录
  defaults里添加
       option forwardfor except 127.0.0.0/8
  那么查看nginx的日志就会看到访问该服务器的真实的客户端IP

  
  实验五、实现会话保持
  在backend中的server中插入cookie,比如
   server  app1 192.168.199.146:80 cookie haha check inter 3000 rise 3 fall 3
   server  app2 192.168.199.143:80 cookie hehe check inter 3000 rise 3 fall 3
      那么访问过app1服务器的主机就会被标记为haha(在cookie中插入此标记),下次访问时直接被调度到同一台机器,但是在到达服务器之前cookie会被清理。如果该服务器宕机了,那么会被重新标记到别的服务器。
  

感谢浏览,如有疑问,欢迎留言。






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657912-1-1.html 上篇帖子: MooseFS分布式文件系统+keepalived高可用+unison和intoify实时双机同步(三) 下篇帖子: lvs+keepalived实现实时监控节点健康状态,并根据算法接管资源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表