LVS负载均衡企业实战之DR模式;有未处理问题

文章目录

    • 一、工作流程图解:
    • 二、DR模式特点&配置要点
    • 三、LVS负载均衡之DR模式配置详解
        • 1、配置virtual server
        • 2、shell脚本实现virtual server一键配置
        • 3、shell脚本实现RS添加子网卡并抑制ARP的响应
    • 四、未处理实验问题

DR模式全称为Direct Routing,即为直连路由模式。客户端发消息有负载均衡器进行均衡,然而回复时,是RS直接给用户回复。

一、工作流程图解:

LVS负载均衡企业实战之DR模式;有未处理问题_第1张图片工作流程详述:用户请求LVS服务器的VIP,请求到达LVS服务器时,LVS将请求的报文的目标IP(即VIP)保持不变,目标MAC修改为后端Realserver服务器的MAC地址,转发给后端服务器;然后后端RealServer服务器收到报文,若目标MAC不是本地则丢弃报文,目标MAC是本地则处理请求。后端处理请求的服务器最终将数据直接返回给用户,不再经过LVS服务器。

二、DR模式特点&配置要点

1)LVS服务器单网卡即可配置负载均衡;
2)要求LVS必须和后端Realserver服务器在一个局域网;
3)LVS和后端Realserver服务器上均配置VIP地址,故上述流程详述中识别后端服务器是靠MAC地址;LVS的VIP直接配置在真实物理网卡上,后端Realver机器的VIP配置在lo网卡上,避免冲突。
4)LVS服务器不需要开启路由转发功能;
5)Realserver上的VIP地址必须要抑制VIP的ARP响应。

三、LVS负载均衡之DR模式配置详解

1、配置virtual server

(1)配置ip_vs模块

ipvsadm -A -t 172.16.193.100:80 -s wrr
ipvsadm -a -t 172.16.193.100:80 -r 172.16.193.201:80 -g -w 2
ipvsadm -a -t 172.16.193.100:80 -r 172.16.193.202:80 -g -w 1

(2)LVS服务器添加子网卡(VIP)
注:此处是给LVS服务器添加VIP,所以需要选择物理网卡的子网卡

cp ifcfg-ens33 ifcfg-ens33:1

vim ifcfg-ens33:1
#写入以下内容
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
DEVICE="ens33:1"
ONBOOT="yes"
IPADDR=172.16.193.100
NETMASK=255.255.255.0

systemctl restart network

LVS负载均衡企业实战之DR模式;有未处理问题_第2张图片添加子网卡成功!
注:我使用的苹果电脑的终端,添加了子网卡的网卡不能用ssh连接!

2、shell脚本实现virtual server一键配置

#!/bin/sh
#2020年 04月 12日 星期日 17:55:15 CST
#by author wujincheng
#conf LVS virtual server
interface="ens33:1"
VIP="172.16.193.100"
mask="255.255.255.0"
port="80"
LB="wlc"
RS1="172.16.193.201"
RS2="172.16.193.202"
case "$1" in
start)
    ifconfig ${interface} ${VIP} netmask ${mask} broadcast ${VIP} up
    iptables -F
    ipvsadm -A -t ${VIP}:${port} -s ${LB}
    ipvsadm -a -t ${VIP}:${port} -r ${RS1} -g -w 2
    ipvsadm -a -t ${VIP}:${port} -r ${RS2} -g -w 1
    ;;
stop)
    ipvsadm -D -t ${VIP}
    ifconfig ${interface} down
    ;;
*)
    echo "Usage:$0 {start|stop}"
    exit 1
    ;;
esac

3、shell脚本实现RS添加子网卡并抑制ARP的响应

把下面的脚本放到各个后端服务器,执行一下即可!

#!/bin/sh
#LVS real server
VIP=172.16.193.100
start)
    ifconfig lo:0 $VIP netmask 255.255.255.0 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
    sysctl -p >/dev/null 2>&1
    echo "RealServer Start OK"
;;
stop)
    ifconfig lo:0 down
    route del $VIP >/dev/null 2>&1
    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 "RealServer Stoped OK"
;;
*)
    echo "Usage: $0 {start|stop}"
    exit 1
;;
esac

脚本重点释疑:
arp_ignore参数(1)含义:只响应目标IP是本地真实网卡上配置的IP
arp_announce参数(2)含义:忽略报文的源IP地址,使用主机上能够跟用户通信的真实网卡发送数据

自己的理解:
arp_ignore参数,因为Nginx上的三台机器我们都需要配置抑制arp响应这个脚本,所以就是当用户访问VIP这个IP地址时,只会是LVS的VIP去响应,后端三个服务器因为被抑制而无法响应

arp_announce参数,当LVS将报文送到后端服务器,让其处理后,将处理后的数据返回给用户时,按理来说应该使用被请求IP(VIP)作为源IP,返回处理后的数据,但是配置了这个参数便使用真实网卡的IP作为源IP,返回处理后的数据。

四、未处理实验问题

如上这样配置,并不能达到效果,根本就无法访问。后面经过我的不懈努力排错,发现了问题出在下面这个地方。

RS中回环网卡如果绑定了子网卡,会造成本机与世隔绝。局域网中任何主机都ping不同它。

你可能感兴趣的:(Linux运维)