一、实验原理:
过程如下:
1)client 向目标 vip 发出请求,LB(调度器) 接收。
2)VS 根据负载均衡算法选择一台 active 的 real server,将此 RIP 所在网卡的 mac 地址作为目标 mac 地址,发送到局域网里。
3)real server在局域网中收到这个帧,拆开后发现目标 IP(VIP)与本地匹配,于是
处理这个报文;随后重新封装报文,发送到局域网。
4)客户访问的是VIP,那么如果服务器端没有这个VIP,发还给客户的包肯定不被信任,所以给服务器集群都加VIP,然后让后端服务器使用VIP将包发还给客户。
注意:
- VIP为调度器与服务器共享,此时VIP是对外可见的,用户访问的就是VIP,用来接受用户请求报文。
- 它是通过在调度器LB上修改数据包的目的MAC地址实现转发,注意源地址仍然是CIP,目的地址仍然是VIP地址;
- 请求的报文经过调度器,而服务器响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)
- 因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面;由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么服务器就得使用和VIP相同的端口提供服务(即RS和LB必须拥有相同的IP,处于一个vlan下)。
- 服务器主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。(如果不做arp抑制,那么访问100这个VIP并不能始终指向调度器、而是具有随机性)
注: DR模式工作在数据链路层,不支持端口转发;
二、部署
(1)实验环境:
本次实验所有主机均为rhel7.3,并且selinux为disabled、防火墙为关闭状态;
主机名 角色 IP
server1 LB(调度器) 172.25.40.1
server2 RS(真实后端服务器) 172.25.40.2
server3 RS(真实后端服务器) 172.25.40.3
(2)实验过程
server1:(调度器)
关闭http服务
yum install ipvsadm #安装ipvsadm调度器
ipvsadm -l #查看ipvsadm策略
ipvsadm -C #清除ipvsadm策略
ipvsadm -A -t 172.25.40.100:80 -s rr
#添加VIP以及端口80,-t 协议为tcp,rr算法轮询模式的策略。
ipvsadm -a -t 172.25.40.100:80 -r 172.25.40.2:80 -g
#给真实服务机添加VIP,-g 指定DR模式
ipvsadm -a -t 172.25.40.100:80 -r 172.25.40.3:80 -g
ipvsadm -l
ip addr add 172.25.40.100/24 dev eth0
#将VIP加入本机server1。
ip addr show
Real Server:
yum install httpd #安装apache
vim /var/www/html/index.html #编写初始化网页
systemctl restart httpd #重启apache
ip addr add 172.25.40.100/24 dev eth0 #将VIP加入本机
ip addr show
测试:
curl 172.25.40.100
此时看似已经达到了轮询效果,其实并没有。因为调度器其实并没有实现调度,而是后端服务器自己抢占的包,,所以我们需要删除已经绑定的MAC地址:
arp -an | grep 172.25.40.100 #查看绑定的MAC地址
arp -d 172.25.40.100 #清除访问的MAC地址
对后端Real Server均进行配置:
server2:
yum install arptables #安装网络控制进程
arptables -A INPUT -d 172.25.40.100 -j DROP
#将此IP下的请求忽略,只遵从调度器的调配
arptables -A OUTPUT -s 172.25.40.100 -j mangle --mangle-ip-s 172.25.40.2
#将发出去的数据包时伪装成VIP发送
arptables -L #查看加入的策略
ip addr add 172.25.40.100/24 dev eth0 ##server2 加入VIP
ip addr show
server 3:
yum install arptables #安装网络控制进程
arptables -A INPUT -d 172.25.40.100 -j DROP
#将此IP下的请求忽略,只遵从调度器的调配
arptables -A OUTPUT -s 172.25.40.100 -j mangle --mangle-ip-s 172.25.40.3
#将发出去的数据包时伪装成VIP发送
arptables -L #查看加入的策略
ip addr add 172.25.40.100/24 dev eth0 #server3 加入VIP
测试:
curl 172.25.40.100
若采用加权轮询算法:
但是当其中一台 real server 宕机后,仍会采用负载均衡机制,且显示该真实服务器主页内容为报错,并不会自动屏蔽出错的服务器,没有健康检机制,这就用到下一篇的内容 lvs+ldirectord 。