1.工作原理
在vs(虚拟服务器–也是模型中的调度器lvs)和rs(真实的服务器–apache)上都设置有同一个vip(虚拟ip),vs和rs都有两个ip地址,除了vip之外的ip,他们是统一个网段的能够相互通信,在vs上设置轮询策略,在rs设置上丢掉访问vip的请求的策略,那么在client访问vip的时候,就只能唯一经过vs的vip,也就是只能通过vs请求资源,因为他们处于同一个网段,所以使用MAC地址进行通信,在vs上修改请求的源MAC和目的MAC,不改变源cip和目的ip(vip),所以rs处理完请求后,所以rs直接通过网关直接返回数据包(源vip,目的cip)给客户端,不经过vs。
拓扑结构:
2.实验环境
redhat 7.5
server1(lvs) | 172.25.60.1/24 |
---|---|
server2(apache) | 172.25.60.2/24 |
server3(apache) | 172.25.60.3/24 |
网关都为:172.25.60.250/24(物理机ip)
三台虚拟机上再添加一个ip做vip(172.25.60.100/24)
ip addr add 172.25.60.100/24 dev eth0
注: lvs上的vip是用于接收客户端请求的,真实服务器上的vip是用于给各户端回数据包的。
3.配置DR模式
(1)lvs(server1)配置规则:
ipvsadm -A -t 172.25.60.100:80 -s rr //rr:轮询
ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.2:80 -g //-g:DR模式
ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.3:80 -g
systemctl restart ipvsadm ##重启服务后会将规则写进文件/etc/sysconfig/ipvsadm
##不重启规则未写进文件中,只能临时生效,重启系统后就没有了
##ipvsadm的常用命令:
ipvsadm -l //解析查看规则
ipvsadm -ln //不解析查看
ipvsadm -C //清空ipvsadm
此时lvs就配置好了。但三台虚拟机上都有vip(172.25.60.100),现在用物理机直接测试,会出现两种情况:
a.如果访问的lvs(server1)上的vip,将实现轮询访问后端apache
b.如果访问的apache(server2/server3)上的vip,将不能实现轮询访问
因此,为实现轮询访问,还需对server2和server3做第二步(2)操作。
注: 如果此时访问,可用以下命令查看访问主机的mac地址,以确定自己访问的是那一台虚拟机
arp -an | grep 100 //查看刚才访问主机的mac地址
arp -d 172.25.60.100 //清理缓存
(2)在server2和server3上安装arptables,并配置规则:
server2:
arptables -A INPUT -d 172.25.60.100 -j DROP //目的地址是172.25.60.100 的DROP掉
arptables -A OUTPUT -s 172.25.60.100 -j mangle --mangle-ip-s 172.25.60.2
server3:
arptables -A INPUT -d 172.25.60.100 -j DROP
arptables -A OUTPUT -s 172.25.60.100 -j mangle --mangle-ip-s 172.25.60.3
arptables的常用命令:
arptables -nL //查看规则
arptables -F //刷新规则(其他命令与iptables相似)
/etc/sysconfig/arptables //arptables规则配置文件
arptables-save > /etc/sysconfig/arptables //将规则保存到配置文件
#不保存编写的规则只能临时生效,重启系统后就没有了
(3)测试:
curl 172.25.60.100 //访问
curl -I 172.25.60.100
arp -d 172.25.60.100 //清理缓存
此时测试就ok了,可以清理缓存多试几次。