DR模式的概述与工作原理
DR模式服务概述:
Direct Routing(直接路由) --在同一个地域,同一个网段
Director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing由与采用物理层(修改MAC地址)技术,因此所有服务器都必须在一个网段中。
LVS DR 模式工作原理: 修改MAC地址
DR模式将报文直接路由给目标真实服务器。在DR模式中,调度器根据各个真实服务器的负载情况,连接数多少等,动态地选择一台服务器,不修改目标IP地址和目标端口,也不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址。然后再将修改的数据帧在服务器组的局域网上发送。因为数据帧的MAC地址是真实服务器的MAC地址,并且又在同一个局域网。那么根据局域网的通讯原理,真实复位是一定能够收到由LB发出的数据包。真实服务器接收到请求数据包的时候,解开IP包头查看到的目标IP是VIP。(此时只有自己的IP符合目标IP才会接收进来,所以我们需要在本地的回环借口上面配置VIP。另:由于网络接口都会进行ARP广播响应,但集群的其他机器都有这个VIP的lo接口,都响应就会冲突。所以我们需要把真实服务器的lo接口的ARP响应关闭掉。)然后真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源IP地址还是VIP。
DR模式实际拓扑图及LVS+DR方式的工作流程图: MAC转换过程
实例场景设备清单: director分发器,DIP: 192.1681.70,
VIP :192.168.1.63
① client发送的请求基本信息: IP:192.168.1.101 向目标vip发出请求,Director接收。此时IP包头及数据帧头信息如下:
② Director分发器根据负载均衡算法选择一台active的realserver(假设是192.168.1.62),将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里。此时IP包头及数据帧头信息如下:
③ realserver(192.168.1.62)在局域网中收到这个帧,脱掉数据帧后发现目标IP(VIP)与本地匹配,于是处理这个报文。随后重新封装报文,发送到局域网。此时回复请求的IP包头及数据帧头信息如下:
④如果client与VS同一网段,那么client(192.168.57.135)将收到这个回复报文。如果跨了网段,那么报文通过gateway/路由器经由Internet返回给用户。
DR模式小结:
1、通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。
2、请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)
3、因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面
4、RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。
5、RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。
6、由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。
一:实验目标
1:正确理解DR的工作原理
2:使用LVS+DR搭建集群实现负载均衡
3:理解LVS的几种调度模式以及调度参数
4:了解ipvsadm命令参数
5:用ab命令测试网站压力
6:实战: 同时处理1000个请求。 一次要执行1000个并发请求。
二:实验拓扑
三:实验环境
1:准备3台
分发器:xuegod63 VIP:eth0:1:192.168.1.63
DIP:eth0:192.168.1.70
Real server xuegod62: RIP:eth0: 192.168.1.62
VIP:lo:1 192.168.1.63
Real server xuegod64: RIP:eth0: 192.168.1.64
VIP:lo:1 192.168.1.63 2:iptables -F , 清除规则
3:selinux关闭
4:red had 6.5版本 64位操作系统
四:实验代码
分发器-xuegod63
1:配置DIP和RIP地址
DIP :[root@xuegod63 ~]# ifconfig eth0 192.168.1.70
VIP :[root@xuegod63 ~]# ifconfig eth0:1 192.168.1.63
[root@xuegod63 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #以配置以下信息
IPADDR=192.168.1.70
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=202.106.46.151
2:生成eth0:1配置文件
[root@xuegod63 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1
[root@xuegod63 network-scripts]# vim ifcfg-eth0\:1 #写入以下内容
DEVICE=eth0:1
NM_CONTROLLED=yes
IPADDR=192.168.1.63
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
NAME="eth0:1"
HWADDR=00:0C:29:12:EC:1E #Mac地址必需要写成和eth0一样,否则出不来eth0:1这个网卡设备
[root@xuegod63 network-scripts]#service network restart
[root@xuegod63 network-scripts]# ifconfig #查看是否有eth0 和eth0:1
inet addr:192.168.1.63 Bcast:192.168.1.255 Mask:255.255.255.0
inet addr:192.168.1.63 Bcast:192.168.1.255 Mask:255.255.255.0
3:配置LVS-DR规则:
[root@xuegod63 network-scripts]# rpm -ivh /mnt/Packages/ipvsadm-1.25-9.el6.x86_64.rpm
[root@xuegod63 ~]# ipvsadm -A -t 192.168.1.63:80 -s rr
[root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.62 -g
[root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.64 -g
注: -g 表示DR模式 , -m 表示IP tun 模式
[root@xuegod63 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.63:80 rr
-> 192.168.2.62:80 Route 1 0 0
-> 192.168.2.64:80 Route 1 0 0
注:三个LVS 模式中,只有NAT模式需要开启路由转发功能。 DR和TUN模式不需要开启。
4:LVS的规则配置文件:/etc/sysconfig/ipvsadm
找到配置文件方法: 因为:/etc/init.d/ipvsadm save 可以保存。所以配置文件一定可以在/etc/init.d/ipvsadm 中找到相关保存路径。
[root@xuegod63 ~]# vim /etc/init.d/ipvsadm
[root@xuegod63 ~]# /etc/init.d/ipvsadm save
[root@xuegod63 ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.1.63:80 -s wrr
-a -t 192.168.1.63:80 -r 192.168.1.62:80 -g
-a -t 192.168.1.63:80 -r 192.168.1.64:80 -g
RealServer:xuegod62:
1, 配置RIP eth0 ,桥接模式
[root@xuegod62 ~]# ifconfig eth0 192.168.1.62/24
2, 回环接口 -vip
[root@xuegod62 ~]# ifconfig lo:1 192.168.1.63 netmask 255.255.255.255
[root@xuegod62 network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@xuegod62 network-scripts]# cat ifcfg-lo:1
DEVICE=lo:1
IPADDR=192.168.1.63
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
[root@xuegod62 ~]# service%