centos7之LVS-DR模式传统部署

介绍

优缺点以及适用场景

复制代码
优点:能负载更多的Realserver减轻LB的压力,性能高于tun模式。
缺点:不支持端口转发(VIP:80必须代理RIP:80),Realserver和LVS需要在同一网段下。
适用:适用于大多数公司,也是大多数公司用的最多的模式。

DR模式:路由模式原理,ip不变主要改MAC地址

复制代码
1.客户端把请求数据包发给DirectorServer
2.DirectorServer拆包查看(源ip:CIP源MAC:CIP-MAC, 目标ip:VIP 目标MAC:VIP-MAC),这个包是给自己的就会收下数据包。
3.DirectorServer通过算法(rr wrr)找一台合适的RealServer,修改数据包(源ip:CIP源MAC:DIP-MAC, 目标ip:VIP 目标MAC:RIP-MAC),封装发给后端Realserver
4.RealServer收报/拆包发现目标MAC是给自己的就会收下数据包。
5.RealServer会把需要回复的数据加入数据包中并修改数据包(源ip:VIP 源MAC:vip-MAC,目标ip:CIP 目标MAC:CIP-MAC),封包发给客户端

DR模式中后端RealServer为什么要抑制ARP广播

复制代码
arp工作在数据链路层和网络层,只有找到对方的MAC地址后才能进行TCP三次握手建立链接
当客户端发起arp广播时会询问"vip对应的MAC地址是谁?",LB和RS都有vip,都会对回复arp响应,这样就会出现数据包不经过lvs转发直接发送给后端RealServer的情况。

1、传统部署

lvs基于四层ip+端口转发,不支持基于url和目录的转发

一、准备环境

二、部署

1、LB部署脚本

复制代码
# yum -y install ipvsadm
# cat /usr/local/sbin/lvs_dr.sh 
#!/bin/bash
# 开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.1.200
rs1=192.168.1.11
rs2=192.168.1.12
#注意这里的网卡名字
ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
# 让vip走虚拟网卡
route add -host $vip dev ens33:2
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
------------------------------
-A: 表示添加一条虚拟服务器记录
-D: 表示删除虚拟服务ipvsadm -D -t 172.168.1.100:80 删除后它下面的规则也都没有了
-a: 表示添加一条真实服务器的映射规则
-d: 表示删除后端realserver,删除时不要指定权重和模式
-s:表示算法
-t: 表示增加tcp端口
-r:表示增加realserver地址和tcp端口
-g: 表示DR模式
-w: 表示权重

2、RealServer部署脚本

复制代码
# yum -y install nginx
# cat /usr/local/sbin/lvs_dr_rs.sh 
#/bin/bash                                                                               
vip=192.168.1.200
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
# 让vip走虚拟网卡
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
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

3、执行脚本

复制代码
[root@lb ~]# bash /usr/local/sbin/lvs_dr.sh
[root@web1 ~]# bash /usr/local/sbin/lvs_dr_rs.sh
[root@web2 ~]# bash /usr/local/sbin/lvs_dr_rs.sh

4、监控检测脚本

复制代码
# cat /usr/local/sbin/lvs_dr_check.sh 
#!/bin/bash
VIP=192.168.1.200:80
RIP1=192.168.1.11:80
RIP2=192.168.1.12:80
while true
do
    for IP in $RIP1 $RIP2
    do
        curl -s http://$IP > /dev/null 2>&1
        if [[ $? -eq 0 ]]
        then
            # 检测后端realserver没问题则加入集群
            ipvsadm -Ln |grep -q $IP || ipvsadm -a -t $VIP -r $IP
        else
            # 如果检测后端realserver有问题则踢出集群,删除的时候不要指定模式和权重
            ipvsadm -Ln |grep -q $IP && ipvsadm -d -t $VIP -r $IP
        fi
    done
    sleep 1
done

5、注意:不要在LB上用curl测试命令,因为每台服务器上都有vip,直接用curl访问是无法成功的,最好用客户端浏览器/cmd访问。(用linux做客户端最好没有缓存)

相关推荐
liulilittle35 分钟前
SNIProxy 轻量级匿名CDN代理架构与实现
开发语言·网络·c++·网关·架构·cdn·通信
tan77º1 小时前
【Linux网络编程】Socket - UDP
linux·服务器·网络·c++·udp
小白爱电脑2 小时前
光纤的最小弯曲半径是多少?
网络
花落已飘3 小时前
多线程 vs 异步
linux·网络·系统架构
qq_171538855 小时前
TCP/IP协议精解:IP协议——互联网世界的邮政编码系统
网络·网络协议·tcp/ip
珹洺6 小时前
计算机网络:(七)网络层(上)网络层中重要的概念与网际协议 IP
网络·tcp/ip·计算机网络
兮动人6 小时前
获取终端外网IP地址
java·网络·网络协议·tcp/ip·获取终端外网ip地址
怦然星动_7 小时前
eNSP中实现vlan间路由通信(路由器)
网络·智能路由器
zyx没烦恼9 小时前
TCP相关实验
服务器·网络·tcp/ip
HumanRisk15 小时前
降低网络安全中的人为风险:以人为本的路径
网络·安全·web安全