首页 > 其他分享 >四月学习之LVS DR模型详解

四月学习之LVS DR模型详解

时间:2023-04-15 19:32:14浏览次数:39  
标签:LVS RS DR VIP 详解 172.16 root eth1 eth0

一、概述

通过修改请求报文的目标MAC地址,然后根据算法挑选出合适的RS节点,进行转发。(请求进入DS Server时做MAC地址替换,后端返回数据报文时无需经过DS Server节点,直接返回给客户端即可)

1、DR基础图解

四月学习之LVS DR模型详解_数据

2、DR底层实现

四月学习之LVS DR模型详解_Ethernet_02

四月学习之LVS DR模型详解_Ethernet_03

1、路由器如何找到VIP以及MAC地址呢
路由器通过ARP广播获取VMAC,然后封装CIP、VIP、CMAC、VMAC,通过交换机转发至目标主机
2、RS处理请求直接返回给CIP,不经过DS,那么RS如何将数据包回传给CIP
由于CIP请求的时VIP,而响应是通过RIP响应给CIP,所以数据报文一定会被丢弃,那么就需要在所有的RS的接口上配置VIP的地址,由RS上的VIP响应给CIP即可
3、所有RS节点都配置VIP,那么路由器在广播的时候,岂不是所有的VIP都会响应
方式1:在路由器上静态绑定VIP和VMAC的关系。(但可能没有操作权限)
方式2:在所有RS节点上配置ARP抑制,简单来说就是路由器广播获取VMAC时,所有的RS都不应答,其次所有的RS都不对外宣布自己的VIP
4、VIP、DIP、RIP需要再同一网段中吗
一般来说DIP和RIP在同一物理网络中,并不一定在同一网段中。

3、DR访问流程


1、当用户请求到达DS节点,此时请求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP
2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3、IPVS比对数据包请求的服务是否为集群服务,是则将请求报文中的源MAC修改为DMAC,将目标MAC修改为RMAC,然后将数据包通过POSTROUTING链
   发出,此时的源IP和目的IP均未修改,仅将源MAC修改为DMAC,目标MAC修改为RMAC
4、RS拆解数据报文发现请求的IP地址是本机,则会接收该数据报文,而后构建响应报文向外发出,此时的源IP是VIP,目标IP是CIP
5、响应报文最终送达至客户端

4、DR特性总结

1、请求报文必须由DS节点转发,但响应报文必须不经过DS节点

2、RS不能将网关指向DS节点的DIP

3、DS和RS节点必须位于同一物理网络中

4、DR模型不支持地址转换,也不支持端口映射 #意味着ipvsadm设置的端口和后端端口必须一致

5、RS可以是常见的操作系统Windows、Linux、MacOS

6、RS在lo接口上配置VIP

5、DR ARP参数

arp_ignore (控制系统在收到外部的arp请求时,是否应答)
0默认值,将本机所有接口的所有信息向每个连接的网络进行通告
1只应答本地主机访问网络接口(eth0-->lo,才给予响应

arp_announce (控制系统是否对外宣布自己的地址)
0默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1"尽量避免"将接口信息向非直接连接网络进行通告
2"必须避免"将接口信息向非本网络进行通告

6、DR模型场景实践

四月学习之LVS DR模型详解_Ethernet_04

1、客户端:
	eth0: 10.0.0.10 gateway:
	eth1: 关闭
[root@client ~]# ifdown eth1
[root@client ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.10
PREFIX=24

2、路由器:
	eth0: 10.0.0.200	gateway: 10.0.0.2
	eth1: 172.16.1.200
	开启forward
eth0:
[root@route ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.200
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
eth1:
[root@route ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.200
PREFIX=24
开启forward
[root@route ~]# sysctl -p
net.ipv4.ip_forward = 1
清理IPtables规则
[root@route ~]# iptables -t nat -F 
[root@route ~]# iptables -t nat -L -n

3、RS1节点:  R2节点,除了eth1的IP不一样,其他所有操作一致;
	eth0: 关闭
	eth1: 172.16.1.5  gateway: 172.16.1.200
	nginx
	lo:0: 172.16.1.100
	arp参数:
3.1.关闭eth0接口;
[root@proxy01 ~]# ifdown eth0
3.2.配置eth1IP地址:
[root@proxy01 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-eth1 
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.5
PREFIX=24
GATEWAY=172.16.1.200
[root@proxy01 ~]# ifdown eth1 && ifup eth1
3.3.配置Nginx
[root@proxy01 ~]# cat /etc/nginx/conf.d/lvs.qingchen.net.conf 
server {
	listen 80;
	server_name lvs.qingchen.net;
	root /opt;

	location / {
		index index.html;
	}
}
3.4.配置VIP地址;
[root@proxy01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
[root@proxy01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=172.16.1.100
NETMASK=255.0.0.0
ONBOOT=yes
NAME=loopback
[root@proxy01 ~]# ifdown lo:0 && ifup lo:0
3.5.配置arp抑制:不对外宣告本机VIP地址,也不响应其他节点发起ARP请求本机的VIP
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/default/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/default/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
3.6检查RS节点路由信息
route -n
0.0.0.0  127.16.1.200 0.0.0.0 UG 100 0  0 eth1

4、LVS:
	eth0: 关闭
	eth1: 172.16.1.3 gateway: 172.16.1.200
	vip:  172.16.1.100
配置LVS规则,配置DR模型:
[root@lvs01 ~]# ipvsadm -A -t 172.16.1.100:80 -s rr
[root@lvs01 ~]# ipvsadm -a -t 172.16.1.100:80 -r 172.16.1.5:80 -g
[root@lvs01 ~]# ipvsadm -a -t 172.16.1.100:80 -r 172.16.1.6:80 -g
[root@lvs01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.1.100:80 rr
  -> 172.16.1.5:80                Route   1      0          0         
  -> 172.16.1.6:80                Route   1      0          0  

5、端口路由器的映射:
[root@route ~]# iptables -t nat -A PREROUTING -d 10.0.0.200 -p tcp --dport 80 -j DNAT --to 172.16.1.100:80
[root@route ~]# iptables -L -n -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            10.0.0.200           tcp dpt:80 to:172.16.1.100:80

6、客户端验证
curl -HHost:lvs.qingchen.net http://10.0.0.200

四月学习之LVS DR模型详解_Ethernet_05

四月学习之LVS DR模型详解_IP_06

标签:LVS,RS,DR,VIP,详解,172.16,root,eth1,eth0
From: https://blog.51cto.com/u_13236892/6192422

相关文章

  • redis的 CLIENT LIST 详解
    redis>CLIENTLISTaddr=127.0.0.1:43143fd=6age=183idle=0flags=Ndb=0sub=0psub=0multi=-1qbuf=0qbuf-free=32768obl=0oll=0omem=0events=rcmd=clientaddr=127.0.0.1:43163fd=5age=35idle=15flags=Ndb=0sub=0psub=0multi=-1qbuf=0qbuf-free=0......
  • Android MediaCodec 解码 mp4
    上篇博文:AndroidMediaCodec功能讲解本文示例源代码:MediaCodec解码播放mp4文件上篇博文中,我们讲解了MediaCodec的基础知识,本篇文章我们通过使用MediaCodec解码并播放mp4文件,来讲下MediaCodec的使用。解码并播放mp4文件主要涉及到了以下5大方面的功能:解码视频......
  • C#-斑马打印机Helper(COM/LPT/DRV/ZPL/EPL)_适用于标签、票据、条码打印
      原文:http://www.zzvips.com/article/207824.html、https://blog.csdn.net/sqzhao/article/details/524889391、ZebraHelperusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.IO;usingSystem.Diagnostics;usingSyst......
  • Python之虚拟环境venv实战详解
     安装配置虚拟环境virtualenv官方给出的建议是最好在一开始就创建虚拟环境。在不同环境下,我们使用不同命令,即可创建出一个名为venv的虚拟环境最简的方式是使用python指令之间创建#windowspython-mvenvvenv#linux/macospython3-mvenvvenvWindows重点讲解......
  • Shell $命令详解
    5Shell特殊变量$0:脚本文件名$n(n>=1):第几个参数$*:所有参数$@:所有参数$#:参数个数$$:进程ID 6.$*与$@区别不加“”没有区别,都表示所有的参数。加了“”区别如下$*:所有参数是个整体$@:每个参数是个整体#!/bin/bashecho"printeachparamfrom\"\$*\""for......
  • 内存对齐详解 (C++代码)
    内存对齐详解(C++代码)目录内存对齐详解(C++代码)Test1:结构体对齐Test2:时间开销对比我每天都有读一下面经的习惯,从里面抽一些我不太懂的内容使用dfs的思想去探索,感谢有了GPT4,探索之路变得有趣和高效许多。今天这个Topic如下,是腾讯日常实习面经中的内容编译内存相关:C+......
  • os.path.dirname;os.path.abspath;os.walk方法详解
    os.path.dirname:os.path.dirname(path):用来获取文件的路径   os.path.dirname(__file__):用来获取当前py文件的上层目录例如:当前文件所处位置为:D:/AutoTestSys/script/AutoFunction/test1.pyprint(os.path.dirname(__file__))返回的结果为: D:/AutoTestSys/script/Aut......
  • OpenStack详解
    OpenStack是当今最具影响力的云计算管理工具——通过命令或者基于Web的可视化控制面板来管理IaaS云端的资源池(服务器、存储和网络)。它最先由美国国家航空航天局(NASA)和Rackspace在2010年合作研发,现在参与的人员和组织汇集了来自100多个国家的超过9500名的个人和850多......
  • Android MediaCodec 功能讲解
    上篇博文:AndroidMediaPlayer功能讲解MediaCodec是Android系统提供的用于对音视频进行编解码的类,它通过访问底层的codec来实现编解码的功能。Codec意为编解码器。MediaCodec是Androidmedia基础框架的一部分,是比MediaPlayer更底层的实现。MediaCodec通常同MediaExt......
  • maven各标签详解
    <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><!--父项目......