HAProxy基于KeepAlived实现Web高可用及动静分离

HAProxy基于KeepAlived实现Web高可用及动静分离,第1张

HAProxy基于KeepAlived实现Web高可用及动静分离

前言

软件负载均衡一般有两种实现方式:基于 *** 作系统的软负载实现和基于第三方应用的软负载实现。LVS是基于Linux *** 作系统的软负载,而HAProxy是基于第三方应用的软负载。与LVS相比,HAProxy的使用简单得多,但与LVS一样,HAProxy本身无法实现高可用性。一旦HAProxy节点出现故障,将会影响整个站点。本文介绍的是HAProxy在KeepAlived的基础上实现了Web的高可用性和动静分离。

相关介绍

HAProxy

HAProxy是一个代理软件,提供高可用性、负载平衡和基于TCP和HTTP的应用程序。HAProxy是完全免费的。在HAProxy的帮助下,您可以快速可靠地提供基于TCP和HTTP应用程序的代理解决方案。HAProxy适用于那些负载较重的网站,通常需要会话维护或者七层处理。HAProxy可以支持数万个并发连接,其运行模式使得集成到架构中变得简单安全,同时可以保护web服务器不暴露在网络中。

保持活动状态

Keepalived采用VRRP(虚拟路由器冗余协议)热备份协议,通过软件实现linux服务器的多机热备份功能。VRRP是路由器的备份解决方案,多台路由器组成一个热备用组。通过共享的虚拟IP地址向外界提供服务;每个热备组中只有一个主服务器同时提供服务,其他服务器处于冗余状态。如果当前在线的服务器出现故障,其他服务器将自动接管(优先级决定替换顺序)虚拟IP地址以继续提供服务。

高可用性解决方案

实验拓扑

#系统环境:CentOS6.6 #Static Server:httpd #Dynamic Servicer:LAMP

配置过程

高可用性集群配置前提

时间同步,基于主机名的相互通信,SSH相互信任

请确保两个节点之间的时间同步,并使用ntpdate与时间服务器同步。

[root@node1 ~]# ntpdate cn.pool.ntp.org

基于主机名相互通信

[root@node1 ~]# vim /etc/hosts     172.16.10.123   node1.scholar.com node1 172.16.10.124   node2.scholar.com node2     [root@node1 ~]# vim /etc/sysconfig/network HOSTNAME=node1.scholar.com     [root@node1 ~]# uname -n node1.scholar.com     #两个节点都需如上 *** 作

宋承宪互信

[root@node1 ~]# ssh-keygen -t rsa -P '' [root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2 [root@node2 ~]# ssh-keygen -t rsa -P '' [root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1 [root@node1 ~]# date; ssh node2 'date' #测试 Wed Jun 24 15:58:46 CST 2015 Wed Jun 24 15:58:46 CST 2015

安装所需的程序

[root@node1 ~]# yum install keepalived haproxy -y #两个节点都安装

配置保持活动状态

[root@node1 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 {        #定义VRRP实例,实例名自定义     state MASTER            #指定Keepalived的角色,MASTER为主服务器,BACKUP为备用服务器     interface eth0          #指定HA监测的接口     virtual_router_id 51    #虚拟路由标识(1-255),在一个VRRP实例中主备服务器ID必须一样     priority 100            #优先级,数字越大越优先,主服务器优先级必须高于备服务器     advert_int 1            #设置主备之间同步检查时间间隔,单位秒     authentication {        #设置验证类型和密码         auth_type PASS      #验证类型         auth_pass ab007     #设置验证密码,同一实例中主备密码要保持一致     }     virtual_ipaddress {     #定义虚拟IP地址         192.168.12.21     } }   vrrp_instance VI_2 {     state BACKUP     interface eth0     virtual_router_id 61     priority 99     advert_int 1     authentication {         auth_type PASS         auth_pass sr200     }     virtual_ipaddress {         192.168.12.22     } }

将配置文件同步到另一个节点

[root@node1 ~]# scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/ keepalived.conf                                        100%  787     0.8KB/s   00:00

修改另一个节点配置文件。

[root@node2 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 {     state BACKUP     interface eth0     virtual_router_id 51     priority 99     advert_int 1     authentication {         auth_type PASS         auth_pass ab007     }     virtual_ipaddress {         192.168.12.21     } } vrrp_instance VI_2 {     state MASTER     interface eth0     virtual_router_id 61     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass sr200     }     virtual_ipaddress {         192.168.12.22     } }

配置HAProxy

[root@node1 ~]# vim /etc/haproxy/haproxy.cfg  global     # to have these messages end up in /var/log/haproxy.log you will     # need to:     #    by adding the '-r' option to the SYSLOGD_OPTIONS in     #    /etc/sysconfig/syslog     #     # 2) configure local2 events to go to the /var/log/haproxy.log     #   file. A line like the following can be added to     #   /etc/sysconfig/syslog     #     #    local2.*                       /var/log/haproxy.log     log         127.0.0.1 local2      #日志将通过rsyslog进行归档记录     chroot      /var/lib/haproxy      #运行的安装路径     pidfile     /var/run/haproxy.pid  #pid文件存放的位置     maxconn     4000                  #最大连接     user        haproxy               #运行haproxy的用户     group       haproxy               #运行haprixy的组     daemon                            #以后台模式运行haproxy     # turn on stats unix socket     stats socket /var/lib/haproxy/stats #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults     mode                    http                #工作模式     log                     global              #记录日志     option                  httplog             #详细记录http日志     option                  dontlognull         #不记录健康检查的日志信息     option http-server-close                    #启用服务器端主动关闭     option forwardfor       except 127.0.0.0/8  #传递客户端IP     retries                 3                   #请求重试次数     timeout http-request    10s                 #http请求超时时间     timeout queue           1m                  #一个请求在队列里的超时时间     timeout connect         10s                 #连接服务器超时时间     timeout client          1m                  #客户端超时时间     timeout server          1m                  #客户端超时时间     timeout http-keep-alive 10s                 #持久连接超时时间     timeout check           10s                 #心跳检测超时时间     maxconn                 3000                #最大连接数 #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend  proxy *:80     #定义ACL     acl url_static       path_beg       -i /static /p_w_picpaths /javascript /stylesheets     acl url_static       path_end       -i .jpg .gif .png .css .js     acl url_dynamic      path_end       _i .php .jsp     use_backend dynamic          if url_dynamic   #调用后端服务器并检查ACL规则是否被匹配     default_backend             static #--------------------------------------------------------------------- # static backend for serving up p_w_picpaths, stylesheets and such #--------------------------------------------------------------------- backend static           #后端调度     balance     source   #调度算法     server      s1 172.16.10.125:80 inter 1500 rise 2 fall 3  check  #---------------------------------------- listen statistics     mode http                           #http 7 层模式     bind *:8080                         #监听地址     stats enable                        #启用状态监控     stats auth admin:admin              #验证的用户与密码     stats uri /admin?status             #访问路径     stats hide-version                  #隐藏状态页面版本号     stats admin if TRUE                 #如果验证通过了就允许登录     stats refresh 3s                    #每3秒刷新一次     acl allow src 192.168.12.0/24       #允许的访问的IP地址     tcp-request content accept if allow #允许的地址段就允许访问     tcp-request content reject          #拒绝非法连接 #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- backend dynamic     balance     source     server      s2 172.16.10.12:80 check inter 1500 rise 2 fall 3  #check inter 1500是检测心跳频率 #rise2 2次正确认为服务器可用 #fall3 3次失败认为服务器不可用

将配置文件同步到另一个节点

[root@node1 ~]# scp /etc/haproxy/haproxy.cfg node2:/etc/haproxy/ haproxy.cfg                                       100% 4471     4.4KB/s   00:00

Web端配置

准备测试页

#static server [root@scholar ~]# vim /var/www/html/index.html  <h1>172.16.10.125</h1> [root@scholar ~]# service httpd start Starting httpd:                                            [  OK  ] #dynamic server [root@scholar ~]# vim /var/www/html/index.php <h1>172.16.10.20</h> <?php      $link = mysql_connect('127.0.0.1','root','');      if ($link)        echo "Success...";      else        echo "Failure...";      mysql_close();      phpinfo(); ?> [root@scholar ~]# service httpd start Starting httpd:                                            [  OK  ] [root@scholar ~]# service mysqld start Starting mysqld:                                           [  OK  ]

启动服务

[root@node1 ~]# service haproxy start; ssh node2 'service haproxy start' Starting haproxy:                                          [  OK  ] Starting haproxy: [  OK  ] [root@node1 ~]# service keepalived start; ssh node2 'service keepalived start' Starting keepalived:                                       [  OK  ] Starting keepalived: [  OK  ]

静态和动态分离以及高可用性测试

检查每个节点的IP状态

静态页面

动态页面

静态页面

动态页面

查看状态页面

模拟节点故障

[root@node1 ~]# service haproxy stop Stopping haproxy:                                          [  OK  ] [root@node1 ~]# service keepalived stop Stopping keepalived:                                       [  OK  ]

检查每个节点的IP信息

VIP已被转移。继续参观测试。

访问不受影响,从而达到高可用、动静分离的目的。

结束

以上就是HAProxy基于KeepAlived实现web高可用、动静分离的实验。由于资源有限,本实验只提供了两台网络服务器。如果有多台服务器可以设置轮询来实现负载均衡,这里就不介绍了。如果在部署过程中遇到什么问题,可以留言交流。以上仅供个人学习。如有错漏,请勿喷~~~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/782369.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存