**LVS-DR模式工作原理:
原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
1), DR模式, 全程目标地址, 原地址不变, 因为DR模式工作于2层
2), 请求报文从客户端发出:
原地址: CIP 源MAC CMAC 目标地址: VIP 目标mac: xxx
3), 请求报文到达机房防火墙之后, 会在防火墙的内网口进行广播, 找到VIP在哪儿 然后把包丢出去
原地址: CIP 目标地址: VIP
源MAC: FMAC 目标MAC: VMAC
4), 报文到达director之后, 解包, 发现目标mac是自己, 开始解析这个报文
处理完成, 通过自定义的一个调度算法, 转发报文到达其中一台RS上
原地址: CIP 目标地址: VIP
源mac: DMAC 目标MAC: RMAC
5), 数据报文到达RS之后, 进行节封装, 发现目标mac是自己, 开始解析, 发现VIP也有,开始处理
6), 处理完成之后, 数据直接通过RS流向客户端**
拓扑:VIP=192.168.2.133 DIP=192.168.2.130
RIP1=192.168.2.131 RIP2=192.168.2.132
1.分发器添加生成ens33:1配置文件
[root@Qj01 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1
[root@Qj01 network-scripts]# vim ifcfg-ens33:1
[root@Qj01 network-scripts]# ifconfig
2.分发器配置LVS规则:
[root@Qj01 network-scripts]# ipvsadm -A -t 192.168.2.133:80 -s rr
[root@Qj01 network-scripts]# ipvsadm -a -t 192.168.2.133:80 -r 192.168.2.131 -g
[root@Qj01 network-scripts]# ipvsadm -a -t 192.168.2.133:80 -r 192.168.2.132 -g
[root@Qj01 network-scripts]# 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.2.133:80 rr
-> 192.168.2.131:80 Route 1 0 0
-> 192.168.2.132:80 Route 1 0 0 [root@Qj01 network-scripts]# ipvsadm -S > /etc/sysconfig/ipvsadm
3.两台RS服务器上添加回环接口
[root@Qj02 ~]# ifconfig lo:1 192.168.2.133 netmask 255.255.255.255
[root@Qj03 ~]# ifconfig lo:1 192.168.2.133 netmask 255.255.255.255
4.两台RS服务器上关闭ARP转发
同一个广播域: 配置了多个相同的VIP 是不允许的, 要想实现,就必须让外面的网络, 无法发现这个VIP的存在
因此 在Linux里面, 可以修改内核参数, 实现接口IP的广播不响应、不广播
arp_ignore = 1 表示只回答目标IP是访问本地网络对应接口的arp请求
arp_announce = 2 只宣告本机网卡直连网络所在的ip的arp广播
(1)临时生效
[root@Qj02 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
[root@Qj02 ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
[root@Qj03 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
[root@Qj03 ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
(2)永久生效:(注意realserver的实际link ok的网卡是不是ens33)
[root@Qj02 ~]# vim /etc/sysctl.conf #最后添加
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
[root@Qj03 ~]# vim /etc/sysctl.conf #最后添加
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
或:
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
安装web页面测试
**注意:
网络转发:
基于2层的数据报文的转发, 要比基于3层的网络转发效率要高
lvs-DR 是基于2层的转发, 所以在LVS中所有的模式, 效率是最好的
1):基于mac的数据报文转发, 是效率最好的, 但是是根据交换机的MAC地址表来实现的
MAC表主要告诉你, 到xxxx地方该走那个端口
如果交换不知道对方在哪儿, 这个时候, 他就要进行广播, 就问xxxx在哪儿, 如果对应的设备给了回应, 那么交换机也就更新了自己的MAC地址表 记录到xxxx需要走这个端口
2):2层设备不具有路由功能, 那么广播也就不具有跨路由的功能, 所有要实现mac地址广播, 必须在同一物理网段
3):vlan具有隔离广播的功能, 所有要能处理mac地址广播, 就应该在同一个VLAN中
因此: 如果要实现LVS-DR模式
1): 所有的设备应该在同一个物理网段
2): 所有的设备都应该在同一个广播域中**