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

举报
互联网老辛 发表于 2021/06/09 01:34:36 2021/06/09
【摘要】 前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。 HAProxy相比LVS的使用要简单很多,但跟LVS一样,HAProxy自己并不能实现高可用,一旦HAProxy节点故障,将会影响整个站点。 本文带来的是HAProxy...

前言

软件负载均衡一般通过两种方式来实现:

  • 基于操作系统的软负载实现

  • 基于第三方应用的软负载实现

LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。

HAProxy相比LVS的使用要简单很多,但跟LVS一样,HAProxy自己并不能实现高可用,一旦HAProxy节点故障,将会影响整个站点。

本文带来的是HAProxy基于KeepAlived实现Web高可用及动静分离。

相关介绍

HAProxy

HAProxy是一款提供高可用性、负载均衡以及基于TCP和HTTP应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。

HAProxy适用于那些负载较大的web站点,这些站点通常又需要会话保持或七层处理。

HAProxy可以支持数以万计的并发连接,并且HAProxy的运行模式使得它可以很简单安全的整合进架构中,同时可以保护web服务器不被暴露到网络上。

KeepAlived

Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。

VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。

通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。

高可用解决方案

实验拓扑


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

配置过程

HA集群配置前提

  • 时间同步

  • 基于主机名互相通信

  • SSH互信

时间同步,可用ntpdate向时间服务器同步

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

基于主机名互相通信


   
  1. [root@node1 ~]# vim /etc/hosts
  2. 172.16.10.123   node1.scholar.com node1
  3. 172.16.10.124   node2.scholar.com node2
  4. [root@node1 ~]# vim /etc/sysconfig/network
  5. HOSTNAME=node1.scholar.com
  6. [root@node1 ~]# uname -n
  7. node1.scholar.com
  8. #两个节点都需如上操作

SSH互信


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

安装所需程序


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

配置KeepAlived


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

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


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

修改另一个节点配置文件


   
  1. [root@node2 ~]# vim /etc/keepalived/keepalived.conf
  2. vrrp_instance VI_1 {
  3.    state BACKUP
  4.    interface eth0
  5.    virtual_router_id 51
  6.    priority 99
  7.    advert_int 1
  8.    authentication {
  9.        auth_type PASS
  10.        auth_pass ab007
  11.    }
  12.    virtual_ipaddress {
  13.        192.168.12.21
  14.    }
  15. }
  16. vrrp_instance VI_2 {
  17.    state MASTER
  18.    interface eth0
  19.    virtual_router_id 61
  20.    priority 100
  21.    advert_int 1
  22.    authentication {
  23.        auth_type PASS
  24.        auth_pass sr200
  25.    }
  26.    virtual_ipaddress {
  27.        192.168.12.22
  28.    }
  29. }

配置HAProxy


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

将配置文件同步至另一节点


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

WEB端配置

准备测试页面


   
  1. #static server
  2. [root@scholar ~]# vim /var/www/html/index.html
  3. <h1>172.16.10.125</h1>
  4. [root@scholar ~]# service httpd start
  5. Starting httpd:                                            [  OK  ]
  6. #dynamic server
  7. [root@scholar ~]# vim /var/www/html/index.php
  8. <h1>172.16.10.20</h>
  9. <?php
  10.     $link = mysql_connect('127.0.0.1','root','');
  11.     if ($link)
  12.       echo "Success...";
  13.     else
  14.       echo "Failure...";
  15.     mysql_close();
  16.     phpinfo();
  17. ?>
  18. [root@scholar ~]# service httpd start
  19. Starting httpd:                                            [  OK  ]
  20. [root@scholar ~]# service mysqld start
  21. Starting mysqld:                                           [  OK  ]

启动服务


   
  1. [root@node1 ~]# service haproxy start; ssh node2 'service haproxy start'
  2. Starting haproxy:                                          [  OK  ]
  3. Starting haproxy: [  OK  ]
  4. [root@node1 ~]# service keepalived start; ssh node2 'service keepalived start'
  5. Starting keepalived:                                       [  OK  ]
  6. Starting keepalived: [  OK  ]

动静分离及高可用测试

查看各节点IP情况

静态页面

动态页面

静态页面

动态页面

查看状态页面

模拟一个节点故障


   
  1. [root@node1 ~]# service haproxy stop
  2. Stopping haproxy:                                          [  OK  ]
  3. [root@node1 ~]# service keepalived stop
  4. Stopping keepalived:                                       [  OK  ]

查看各节点IP信息

VIP转移了,继续访问测试

访问不受任何影响,至此高可用及动静分离目的实现。

HAProxy基于KeepAlived实现Web高可用及动静分离实验就先说到这里了。

本次实验因资源有限只提供了两台web服务器,如有多台可设置轮询实现负载均衡,这里就不做多介绍了。

文章来源: zmedu.blog.csdn.net,作者:互联网老辛,版权归原作者所有,如需转载,请联系作者。

原文链接:zmedu.blog.csdn.net/article/details/103259788

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。