LB与HA解决方案之LVS/DR+keepalived-(主备)

lvs

ipvs (用于调度,工作在内核层)
ipvsadm (是ipvs的管理工具)
keepalived (实现管理ipvs和高可用)

lvs名词术语

1:vip 虚拟ip
2:rip 后端真实服务器ip
3:cip 客户端ip

lvs工作模式

1:nat模式
2:tun模式
3:dr模式,又叫单臂路由 原理:改写请求报文的目标mac地址,由rip将结果直接返回给cip,(注意:需要LB与slave之间在同一物理网段,即属于局域网)
4:fullnat模式

这里以dr模式讲解,适用于返回数据大的情景,如流媒体,实现这个模式关键的是

1:要在slave机器上的lo网卡上绑定vip,目的是不让数据包过来之后被丢弃
2:slave上抑制arp

cip –> vip –> rip –> cip

安装实现

lsmod |grep ip_vs #检查模块是否被加入到内核
yum install ipvsadm #安装ipvs的管理工具

keepalived安装细节haproxy负载均衡那篇文章https://boke.wsfnk.com/archives/62.html
这里只给出具体的配置
vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     acassen@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_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100/24 dev enp4s0
        #这里的dev enp4s0一定要注意,是与后端slave同一网段的那张网卡
        #如果不指定网卡设备,默认将vip设置在心跳网卡上,那么你就等着蒙蔽吧,这坑我踩过
    }
}
virtual_server 192.168.1.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 5
    protocol TCP

    real_server 192.168.1.101 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.1.102 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

检查lvs是否启动
ipvsadm -ln

slave端设置
1:lo:0配vip
2:抑制arp

编写脚本实现slave端的设置
vim yz_arp.sh

#! /bin/sh
# descript : start real server DR
VIP=192.168.1.100
. /etc/rc.d/init.d/functions
case "$1" in
   start)
      echo "start LVS of RealServer DR"
      /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
      /sbin/route add -host $VIP dev lo:0
      echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
      echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
      echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
      ;;
   stop)
      /sbin/ifconfig lo:0 down
      echo "close LVS of RealServer DR"
      echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
      echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
      echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
      ;;
   *)
   echo "Usage : $0 {start|stop}"
   exit 1
esac

给脚本执行权限
chmod +x yz_arp.sh

运行脚本
/root/yz_arp.sh start

压力测试语句

for((i=1;i<=100;i++));do curl 192.168.1.100 >> /dev/null; done


在搭建lvs负载均衡时踩过的坑
1:后端slave忘记设置路由网关
2:前段lvs-M与lvs-B忘记设置网关
3:我的笔记本有一张以太网,一张无线网卡,最初我的业务承载网卡是走的无线网卡,而无线网卡连接的是无线路由器,这里就将网络拓扑变得复杂
导致,三台slave服务器,只能一台使用,我说的是一台开启arp抑制,其他不做配置的情况下,若是全部开启arp抑制,则三台都不行
所以:若是用虚拟机连接路由器做实验,请务必使用以太网卡

声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/64.html

最后编辑于:2020/1/14作者: 辣条①号

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注