LVS负载均衡的DR模式,隧道模式,LVS+keepalived高可用,健康检测

LVS(Linux Virtual Server),Linux虚拟服务器,是一个虚拟的服务器集群系统。是使用集群技术和Linux操作系统实现的一个高性能、高可用的服务器。

1.LVS DR模式:
DR模式,即(Direct Routing)直接路由模式
工作过程: 当一个client发送一个WEB请求到VIP(调度器),LVS服务器根据VIP选择对应的real-server的Pool,根据算法,在Pool中选择一台Real-server,LVS在hash表中记录该次连接,然后将client的请求包发给选择的Real-server,最后选择的Real-server把应答包直接传给client;当client继续发包过来时,LVS根据更才记录的hash表的信息,将属于此次连接的请求直接发到刚才选择的Real-server上;当连接中止或者超时,hash表中的记录将被删除。 client(cip->vip) DR( cip->vip;转换mac地址为RS的MAC地址) RS将最后的结果返回给client。
注意:LVS和Real-server必须在相同的网段:(相同的广播域内)
DR模式在转发client的包时,只修改了包目的MAC地址为选定的Real-server的mac地址,所以如果LVS和Real-server在不通的广播域内,那么Real-server就没办法接收到转发的包。
在三种方式中DR最为高效,NAT性能最低;
DR模式数据流过程:
在这里插入图片描述

1.ipvsadm:
ipvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS),是运行在LVS下的提供负载平衡功能的一种技术。Ipvs具体实现是由ipvsadm这个程序来完成;
1-1:下载ipvsadm,默认配置策略文件 /etc/sysconfig/ipvsadm-config;
1-2:使用 ipvsadm -ln 来查看策略; 在调度器上:设定虚拟ip,指定轮循方式(ipvsadm -A -t 172.25.12.100:80 -s rr); 添加真实服务器:ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.2:80 -g ,ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.3:80 -g;添加完成后重启服务;
在这里插入图片描述

1-3:在真实服务器RS上(server2,server3)安装httpd服务,开启并创建默认发布目录;

1-4:在真实主机上curl 172.25.12.100 测试调度器:由于RS上没有相应对应的172.25.12.100 ,tcp三次挥手不能正常完成,curl失败,但 在 调度器中ipvsadm -ln 可以看见 调度器能正常使用;
在这里插入图片描述
调度次数分别为:3和4:
在这里插入图片描述
1-5:在RS真实服务器中添加vip后,调度器可以正常使用:
在这里插入图片描述
注:此时调度器和RS(真实服务器)都有172.25.12.100 ,因此会产生错误,由于调度器上先添加的172。25。12。100,因此默认mac地址为调度器地址,所以可以正常调度;通过arp -an |grep 100 可以查看对应的mac地址,arp -d 删除mac地址缓存:
在这里插入图片描述

1-6:使用arptables,可以通过mac地址屏蔽的方式解决上述问题:用法与iptables类似:

yum install -y arptables
arptables -A INPUT -d 172.25.12.100 -j DROP 使用户请求不能直接到达rs;
arptables -A OUTPUT -s 172.25.12.100 -j mangle --mangle-ip-s 192.168.43.20 使rs以用户请求的IP返回数据
arptables-save > /etc/sysconfig/arptables 保存策略

2.DR 模式容易遇到的两个问题(可以使用keepalived+lvs解决):
问题1:LVS本身不具备健康检查,当后端服务器down掉之后,用户会访问到错误信息
问题2:LVS调度器自身down掉后怎么办?(LVS的冗余)

2-1:.keepalived通过自身checker模块实现后端服务器的健康检查,通过VRRP协议集群的方式是实现主备冗余;

**2-2:**由于是集群的处理方式,因此需要将所有的配置都交给keepalived来处理:

首先需要使用 ipvsadm -C 清理掉之前手动书写的协议;

使用 ip addr del 172.25.12.100/24 dev br0 删除掉之前手动添加的vip;

开启另一台主机server4作为备用调度器,并在server1和server4上安装 : yum install keepalived -y;

安装完成之后修改keepalived 的配置文件(设定之前的lvs策略,让集群知道怎样处理):

  1  Configuration File for keepalived
  2 
  3 global_defs {
  4    notification_email {
  5        root@localhost
  6    }
  7    notification_email_from keepalived@localhost
  8    smtp_server 127.0.0.1
  9    smtp_connect_timeout 30
 10    router_id LVS_DEVEL
 11    vrrp_skip_check_adv_addr
 12    #vrrp_strict
 13    vrrp_garp_interval 0
 14    vrrp_gna_interval 0
 15 }
 16 
 17 vrrp_instance VI_1 {
 18     state MASTER
 19     interface eth0
 20     virtual_router_id 63
 21     priority 100
 22     advert_int 1
 23     authentication {
 24         auth_type PASS
 25         auth_pass 1111
 26     }
 27     virtual_ipaddress {
 28         172.25.12.100
 29   }
 30 }
 31 
 32 virtual_server 172.25.12.100 80 {
 33     delay_loop 6
 34     lb_algo rr
 35     lb_kind DR
 36     #persistence_timeout 50
 37     protocol TCP
 38 
 39     real_server 172.25.12.2 80{
 40         weight 1
 41         TCP_CHECK {
 42             connect_timeout 3
 43             nb_get_retry 3
 44             delay_before_retry 3
 45         }
 46     }
 47 
 48     real_server 172.25.12.3 80{
 49         weight 1
 50         TCP_CHECK {
 51             connect_timeout 3
 52             nb_get_retry 3
 53             delay_before_retry 3
 54         }
 55     }
 56 }

参数解析:
5:邮件收件人;
7:从keepalived发出邮件
12:注释掉,表示在一定时间内连接同一主机(常用于lftp等)
18:表示该机的keepalived状态;MASTER为主调度器,BACKUP为备用;
21:keepalived通过优先级来判断MASTER和BACKUP,当MASTER down掉之后,会降低优先级来寻找新的MASTER,此时BACKUP会成为新的MASTER,
当原MASTER重新恢复之后,高的优先级会让MASTER重新抢回来;BACKUP 优先级设为50(低于MASTER即可);
27,28:虚拟ip的地址;
39~55: 真实主机的ip信息和端口配置;

2-3: 在BACKUP端修改相应的配置文件信息,开启MASTER和BACKUP端的keepalived;
server1开启keepalived后会自动添加100的虚拟ip,自动书写lvs策略:
在这里插入图片描述

arp -an | grep 100 过滤100的mac地址,keepalived开启后负载均衡正常(在server2和server3中需要有虚拟ip 100):
在这里插入图片描述

在server3中stop httpd后,访问不会出错,lvs策略会自动取消:
在这里插入图片描述
在这里插入图片描述

在server1中关掉keepalived后,server4会自动成为新的MASTER:
在这里插入图片描述
虽然 lvs + keepalivd 完成了lvs的健康检测问题和冗余(单点)问题,但它的性能并不能有显著提升(还是只有一台调度器工作,其余的属于热备份)

当重新开启server1的keepalived时:server1会重新成为MASTER端,server4成为BACKUP端;
在这里插入图片描述
在这里插入图片描述

附加:
iptables的优先级高于ipvs ;即:只有iptables放行的请求才会进入input;然后由ipvs判断是否有lvs策略;

还可以通过配合脚本的形式完成lvs的健康检查:

#!/bin/bash

VIP=172.24.12.100
PORT=80
RS=(17.25.12.1 172.25.12.2)
LOG=checklvs.log

addrs(){
   ipvsadm -a -t $VIP:$PORT -t $1:$PORT -g
    echo "add $1 to ipvs" >> $LOG
}
delrs(){
     ipvsadm -d -t $VIP:$PORT -r $1
     echo "del $1 to ipvs" >> $LOG
}

checkrs(){
    for i in ${RS[*]}
     do
           num=`curl -I -s -o /dev/null -w %{http_code} http://$i`
           if [ $num -eq 200 -a $(ipvsadm -ln |grep $i |wc -l) -eq 0 ];then 
               addrs $i
           elif [ $num -ne 200 -a $(ipvsadm -ln |grep $i |wc -l) -ne 0 ];then
               delrs $i
           fi
     done
}

while true
do 
   checkre
   sleep 5
done

脚本只能完成健康检查,不能完成调度器冗余;

lvs的三种方式中:DR效率最高(但只能在同一个vlan,只能单点调度(一个是热备份),RS上绑定了VIP 风险较大(可以进行server mac地址屏蔽,有可能会遗漏)),隧道与DR类似(可以广域网上,RS上配置较为复杂(需要ipip模块)RS上绑定了VIP 风险较大),NAT效率最低(优点:不需要在server端中进行部署,缺点:需要大量的路由策略作支持,增加维护成本(因为NAT的数据流是源路来,源路返回的))
新转发模式:FULL NAT:可以实现跨两个vlan实现负载均衡,引入两个网段的内网ip(localip),进出都需要进行SNAT和DNAT;需要重新编译内核才能实现。其他三种是内核自带;和NAT的数据流都是源路来,原路返回;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值