zoukankan      html  css  js  c++  java
  • haproxy+keepalived实现高可用负载均衡

    https://www.cnblogs.com/daixiang/p/5575477.html

    一、haproxy介绍:

      HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

      在linux内核版本为2.6或打了epoll补丁的linux2.4上运行haproxy能获得其最好的性能。

    二、keepalived介绍:  

      keepalived理论工作原理

          keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。

          keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web 服务器的状态。 Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:

          Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器 发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。

          Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

          Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

             vip即虚拟ip,是附在主机网卡上的,即对主机网卡进行虚拟,此IP仍然是占用了此网段的某个IP。

      keepalived的用途:

          Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

          在lvs+keepalived高可用负载均衡架构中,lvs本身不支持对后端real server进行健康状态检测,而keepalived的诞生不仅能是lvs均衡器实现了高可用,而且还能对lvs后端的real server进行健康状态检测。如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

    配置过程:

    在配置之前,先将HA中个节点进行时间同步,主机名之间相互解析,以及配置双机互信。

    在haproxy1.daixiang.com上配置:

    1
    2
    3
    4
    5
    6
    [root@haproxy1 ~]# vim /etc/hosts
        172.16.0.1 haproxy1.daixiang.com haproxy1
        172.16.0.2 haproxy2.daixiang.com haproxy2<br>
    [root@haproxy1 ~]# ssh-keygen -t rsa -P ''
    [root@haproxy1 ~]# ssh-copy-id haproxy2
    [root@haproxy1 ~]# ntpdate s2c.time.edu.cn

    在haproxy2.daixiang.com上配置:

    1
    2
    3
    4
    5
    6
    7
    [root@haproxy2 ~]# vim /etc/hosts
        172.16.0.1 haproxy1.daixiang.com haproxy1
        172.16.0.2 haproxy2.daixiang.com haproxy2
     
    [root@haproxy2 ~]# ssh-keygen -t rsa -P ''
    [root@haproxy2 ~]# ssh-copy-id haproxy1
    [root@haproxy2 ~]# ntpdate s2c.time.edu.cn

    安装haproxy和keepalived:

      在haproxy1和haproxy2节点上进行同样的操作:

    1
    2
    3
    [root@haproxy1 ~]# yum install keepalived haproxy -y
    [root@haproxy1 ~]# cd /etc/keepalived/
    [root@haproxy1 keepalived]# cp keepalived.conf{,.bak}

    配置keepalived:双主模型

     View Code

      将此配置文件同步到另一个haproxy2.daixiang.com上:

    1
    [root@haproxy1 keepalived]# scp keepalived.conf haproxy2:/etc/keepalived/

      在haproxy2.daixiang.com上修改keepalived.conf配置文件:

     View Code

      重启keepalived:

    1
    2
    [root@haproxy1 keepalived]# service keepalived restart
    [root@haproxy1 keepalived]# ssh haproxy2 'service keepalived restart'

    配置haproxy:

    先将原始配置文件进行备份:

    1
    2
    3
    4
    [root@haproxy1 ~]# cd /etc/haproxy/
    [root@haproxy1 haproxy]# cp haproxy.cfg{,.bak}
     
    ##节点2也进行同样的操作

    编辑其配置文件修改其内容如下:

    将此配置文件同步当另一个haproxy节点上去: 

    1
    [root@haproxy1 haproxy]# scp haproxy.cfg haproxy2:/etc/haproxy/

    重启haproxy服务:

    1
    2
    [root@haproxy1 haproxy]# service haproxy restart
    [root@haproxy1 haproxy]# ssh haproxy2 'service haproxy restart'

    查看这两个节点获取ip的情况:

    haproxy1.daixiang.com:

     View Code

    haproxy2.daixiang.com:

     View Code

    在后端的real server提供测试页面,测试的结果如下:

    请求以.html结尾的文件,haproxy将请求代理至后端static组中的server处理:

    请求以.php结尾的文件,haproxy将请求代理至后端dynamic组中server处理:

    注意:本文在haproxy.cfg的配置文件中,将dynamic组中的server配置了基于cookie的session绑定,所以,用同一浏览器看不出负载均衡的效果来。换个浏览器再访问一次或者清空浏览器的cookie记录就能显示效果,如下图。

     

    haproxy的统计页面输出效果:

          

  • 相关阅读:
    Linux部署web项目
    bash: mysql: command not found(解决方法)
    mysql登录遇到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    mysqld:未被识别的服务(解决方法)
    Xshell4连接,Linux系统中文显示乱码解决办法
    F5双机冗余配置
    H3C S10512虚拟化配置
    cisco3900板卡sm-es3g-24-p使用方法
    详解Cisco ACS AAA认证-1(转)
    cisco路由器license的相关命令简单梳理(转)
  • 原文地址:https://www.cnblogs.com/dhcn/p/12600252.html
Copyright © 2011-2022 走看看