博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LVS之DR模式原理与实践
阅读量:5905 次
发布时间:2019-06-19

本文共 2859 字,大约阅读时间需要 9 分钟。

LVS常用的工作模式有DR、TUN、NAT、FULLNAT,其中DR模式的转发性能最好,但组网要求最为苛刻。本文将试着分析LVS DR模式原理,举例实际配置方式。

LVS DR模式组网

DR模式的组网要求LVS和Real server在同一网段二层互通。因为LVS DR模式在负载均衡转发报文时,只修改目的mac为real server的mac,lvs要能将报文转发给real server,就必须满足LVS和real server是同网段二层互通。

两种LVS DR实际应用场景的组网原理图

  • 1、客户端和LVS、real server三者同网段

    LVS之DR模式原理与实践

  • 2、客户端与LVS、real server不同网段、LVS和real server同网段
    LVS之DR模式原理与实践

报文转发过程

1)client发送请求到vip,real-server配置限制对vip应答arp,而lvs会对vip响应arp,因此client将请求发到LVS。

2)LVS机器收到发往vip的报文后,根据目的IP和目的port匹配ipvs规则,将报文目的mac改为real server的mac,同时将源mac改为LVS的mac后,发送到real server。
3)real server收到之后,mac/IP都是本机的,就将报文交由系统处理。
4)回程报文因real server收到的报文源IP就是client IP,real server直接将请求回给client。如果client和real server是同一个网段,响应报文直接通过二层透传发送给client,报文目的mac即为client mac;如果client和real server不是同一个网段,响应报文先发送到gateway,再走三层转发返回client。

DR模式负载均衡配置

因为LVS和real server都配置了VIP,client或者网关设备都可能arp学到LVS和real server的mac,也就会发生IP冲突,且无法实现负载均衡功能。为了避免这种情况发生,可通过内核参数arp_ignore和arp_announce的配置,只允许LVS应答VIP的arp请求,抑制real server应答VIP的arp请求和发送免费arp。(抑制ARP还可使用arptables)

  • 实验规划:
    virtual server: 192.168.0.2
    real server1: 192.168.0.3
    real server2: 192.168.0.4
    vip: 192.168.0.101

Virtual Server配置

virtual server在网卡子接口上配置vip,配置dr转发的ipvs规则。提高配置效率,将这些操作定义为shell脚本如下

#!/bin/bashvip='192.168.1.100'mask='255.255.255.255'port='80'iface='eth1:1'rs1='192.168.0.3'rs2='192.168.0.4'case $1 instart)    ifconfig $iface $vip netmask $mask broadcast $vip up    iptables -F    # 配置ipvs规则    ipvsadm -A -t ${vip}:${port} -s wrr    ipvsadm -a -t ${vip}:${port} -r ${rs1} -g -w 1    ipvsadm -a -t ${vip}:${port} -r ${rs2} -g -w 1    #realserver不配置端口,dr模式不支持端口映射     ;;stop)    ipvsadm -C    ifconfig $iface down    ;;*)    echo "Usage $(basename $0) start|stop"    exit 1    ;;esac

RealServer 配置脚本

Realserver的vip配置在lo口,与arp_ignore、arp_announce参数的修改相配套,抑制了RealServer不应答vip的arp请求,而接受lvs-dr转发过来的报文。提高配置效率,将这些操作定义为shell脚本如下

#!/bin/bashvip=192.168.0.101mask=255.255.255.255case $1 instart)    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce    ifconfig lo:0 $vip netmask $mask broadcast $vip up    route add -host $vip dev lo:0    ;;stop)    ifconfig lo:0 down    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce    ;;*)    echo "Usage: $(basename $0) start|stop"    exit 1    ;;esac

Linux 内核参数arp_ignore和arp_announce作用说明

arp_ignore - INTEGER

0:默认值,表示可使用本地任意接口上配置的任意地址进行arp应答;
1:仅当请求的目标IP配置在本地主机接受到报文的接口上时,才给予响应;
2:仅当目的IP配置在收到报文的接口上,且arp请求的源IP和该接口同一网段,才响应arp请求;
3:如ARP请求的IP作用域是主机则不响应,如果作用域是全局或者链路则响应ARP
4-7:保留
8:不应答所有本地IP
arp_announce - INTEGER
0:默认值,允许使用本机上所有接口的IP作ARP通告。
1:尽量避免使用本地IP向非本网卡直接连接网络进行ARP通告。
2:必须避免使用本地IP向非本网卡直接连接网络进行ARP通告。

转载于:https://blog.51cto.com/13599730/2312603

你可能感兴趣的文章
JAVA中转换问题
查看>>
Nginx安装及配置详细教程
查看>>
【JEECG技术文档】MiniDao支持ID自增主键策略
查看>>
H盘和I盘都损坏了提示磁盘未被格式化怎么办
查看>>
java设计模式之中介者模式
查看>>
PHP多种序列化/反序列化的方法
查看>>
解决全站字符编码问题--动态代理和静态代理
查看>>
arailsdemo x
查看>>
Lucene的高级使用之高亮显示
查看>>
一些关于企业文化的要点(翻译)
查看>>
Wireshark 【OSI二层】抓包过滤规则和显示过滤规则实例
查看>>
Rails 命令及用法
查看>>
CentOS 6.5 部署Kafka集群
查看>>
基础的 Linux 命令使用方法实例
查看>>
linux 是否支持中文
查看>>
linux菜鸟基础学习 (三) 文件权限
查看>>
50HZ转60HZ变频电源规格
查看>>
2019第十二届亚洲(北京)国际物联网展览会
查看>>
金融财务数据分析报告PPT模板
查看>>
图片转换文字,这种方法最简单,最便捷!
查看>>