LVS+Keepalived之DR模式配置

LVS+Keepalived之DR模式配置

理论基础

LVS直接配置DR模式,会存在一个问题,LVS负载均衡器是单点,容易发生单点故障,这样就会造成所有的服务都无法访问,这是不能容忍的。

解决单点故障的方法当然是一变多!但是入口的IP地址只能有一个,怎么变多?怎么实现多点?有2种形式:

  • 主备模型:备用机要以最快的速度接管原来的VIP(virtual IP),只有主机对外提供服务,只有主机挂了的时候,备机才顶上去。
  • 主主模型:所有的LVS都是主,现在要借用其他形式搞定只有一个的入口IP地址,比如动态DNS。主和主之间是协作的形式。

这里我们主要讨论主备模型,有两个点需要考虑:方向性、效率性。

怎么知道主机挂没挂?

  1. 可以由备机按照一定的时间间隔轮询主机,但是这样会对主或多或少造成一些压力。
  2. 可以由主机发广播到所有的备机,但是网络是不可靠的,所以有一种重试机制。

如果已经确定主机挂了,谁来作为新的主机?使用加权重的方式,为每个备设置不同的权重,当主挂了以后,权重大的备机成为新的主。

如果后台的某一个Real Server挂掉了,负载均衡服务器无法感知,还会对这台转发包,这样就会造成一部分人的业务请求异常,另一部分人的业务正常。

那么怎么知道Real Server挂了?可以用ping吗?不可以用ping命令,ping命令基于网络层的ICMP协议,只能检验网络能不能通,而web服务是位于应用层的,能ping通不能代表web服务正常可用。那怎么知道Real Server挂没挂?最简单的方式是“访问一下”,“访问一下”这个操作,它的底层验证的是应用层的HTTP协议,你发一个请求,返回的是200ok,就说明是可用的。

LVS内核中有模块:ipvs负载均衡模块。你想要检测各个RS是否可用的话,可以直接去修改模块的源码,也可以使用第三方实现。第三方可以是人,也可以是自动化(也就有了自动化运维)。

这个自动化的程序就是keepalived!它可以代替人工,实现自动运维。解决LVS单点故障,实现HA。

keepalived要干的活:

  1. 监控自己的LVS服务
  2. 处于Master角色的路由器会一直发送VRRP(Vritrual Router Redundancy Protocol)数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,如果Master挂了,一堆Backup推举选出一个新的Master。
  3. 不需要再手动配置VIP,添加LVS(ipvs模块)配置,只需要写到配置文件中即可。
  4. 对后端的Real Server做健康检查,及时剔除不可用的节点。

最后,keepalived不仅仅用来解决LVS单点故障问题,它是一个通用的环境,主要作为linux上的HA的实现。例如,当你并发量不大的时候,nginx可以作为公司的负载均衡来使用,此时nginx成为了单点故障,这个问题也可以用keepalived来解决。

实验配置

服务器IP及部署角色如下:

  • node01:192.168.252.10,负载均衡器MASTER。
  • node04:192.168.252.14,负载均衡器BACKUP。
  • node02:192.168.252.11,Real Server,上面部署httpd,对外提供服务。
  • node03:192.168.252.12,Real Server,上面部署httpd,对外提供服务。

在这里插入图片描述

  1. node02和node03的配置如下,并启动httpd服务。
#!/bin/bash

VIP=192.168.252.100

echo 1 > /proc/sys/net/ipv4/conf/ens32/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens32/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

ifconfig lo:1 $VIP netmask 255.255.255.255
  1. node01和node04安装keepalived,yum install -y keepalived

修改/etc/keepalived/keepalived.conf配置文件内容如下:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   # 严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址
   #vrrp_strict # 这里一定要注释,否则keepalived会无法启动
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER # node04这里改为BACKUP
    interface ens32 # 网卡设置
    virtual_router_id 51
    priority 100 # 权重,node04设置为50,如果有多个备,要设置为不同的权重,当主挂了后,权重大的成功为主
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.252.100/24 brd 192.168.252.255 dev ens32  label ens32:1  # VIP
    }
}

# ipvsadm -A -t 192.168.252.100:80 -s rr
virtual_server 192.168.252.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    # ipvsadm -a -t 192.168.252.100:80 -r 192.168.252.11
    real_server 192.168.252.11 80 {
        weight 1
        HTTP_GET {
            url { # keepalived监控http://192.168.252.11:80,返回状态码200说明keepalived还存活
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.252.12 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

}

验证步骤:

  1. 关闭node01的网络,这样lvs就不能提供服务,验证node04是否成为新的主机,ifconfig ens32 down
  2. 启动node01的网络,这样lvs又能提供服务了,这时会发现node01又成为主了。
  3. 关闭node02中的httpd,这样会发现ipvsadm中关于node02的Real Server记录会被删除,所有的请求都会转发到node03。
  4. 启动node02中的httpd,ipvsadm中又有node02的Real Server记录,请求也能成功转发到node02。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

morris131

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值