简介
Director routing(直接路由)
Director 分配请求到不同的RS(real server),RS处理请求后直接回应给客户端,这样Director负载均衡器仅处理一半的连接,加大了负载均衡的可伸缩性。采用物理层(MAC),所以需要在同一网段。
工作原理:
分发器收到客户端请求后,根据负载均衡分发规则选取一台RS,选取对方IP对应的MAC地址作为目标MAC,然后将IP包装成帧转发给这台RS,RS发现mac是自己,开始解析报文,处理完成之后,直接发给client。
数据包、数据帧流程:Client-->VIP-->RS-->Client
因为DR基于MAC层,所以不具备路由功能,必须在同一网段,同一广播域。
实验拓扑:
配置分发器DR:
修改网卡IP
DR:设置VIP
#!/bin/bash
cd /etc/sysconfig/network-scripts
#config network
cp ifcfg-ens33 ifcfg-ens33:1
sed -i 's/ens33/ens33:1/' ifcfg-ens33:1
sed -i '/UUID/d' ifcfg-ens33:1
sed -i 's/11/111/g' ifcfg-ens33:1
#restart
systemctl restart network
[root@DR ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm
[root@DR ~]# ipvsadm -A -t 192.168.0.111:80 -s rr
[root@DR ~]# ipvsadm -a -t 192.168.0.111:80 -r 192.168.0.12 -g
[root@DR ~]# ipvsadm -a -t 192.168.0.111:80 -r 192.168.0.13 -g
选项:-A 添加虚拟服务器 -t 表示TCP服务 VIP:PORT
-s指定调度算法 rr表示round-robin轮循
-a 表示添加realserver地址 -r 表示real server的IP地址
-g表示DR模式 -m 表示 IP tun模式
查看规则
[root@DR ~]# 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.0.111:80 rr
-> 192.168.0.12:80 Route 1 0 0
-> 192.168.0.13:80 Route 1 0 0
配置RS:
[root@RS1 network-scripts]# cat ifcfg-lo:1
DEVICE=lo:1
IPADDR=192.168.0.111
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
启动80端口
[root@RS1 ~]# echo 192.168.0.12 > /var/www/html/index.html
[root@RS1 ~]# systemctl restart httpd
关闭ARP转发
同一个广播域不允许配置多个VIP,所以让外面网络无法发现这个VIP。修改内核参数,实现接口IP的广播不响应,不广播。
arp_ignore = 1 表示只回答目标IP是访问本地网络对应接口的arp请求
arp_announce = 2 只宣告本机网卡直连网络所在的ip的arp广播
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
永久生效:
[root@RS1 ~]# tail -2 /etc/sysctl.conf
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
[root@RS1 ~]# sysctl -p
参数说明:
arp_ignore=1:只回答,目标的IP地址,是访问本网络接口(eth0),的arp请求。
arp_announce=2:在eth0接口上收到一个VIP的arp请求,内核判断这个VIP地址是不是eth0接口上的IP。如果一样,则回复这个包,如果不一样,就丢弃不回应。
RS2:一切同上
客户端访问测试:集群负载成功