DR直接路由模式简介:
- 请求由 LVS 接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过 LVS。
- DR 模式下需要 LVS 和绑定同一个 VIP(RS 通过将 VIP 绑定在 loopback 实现)。
- 一个请求过来时,LVS 只需要将网络帧的 MAC 地址修改为某一台 RS 的 MAC,该包就会被转发到相应的 RS 处理,注意此时的源 IP 和目标 IP 都没变,LVS 只是做了一下移花接木。
- RS 收到 LVS 转发来的包,链路层发现 MAC 是自己的,到上面的网络层,发现 IP 也是自己的,于是这个包被合法地接受,RS 感知不到前面有 LVS 的存在。
- 而当 RS 返回响应时,只要直接向源 IP(即用户的 IP)返回即可,不再经过 LVS。
- DR 模式是性能最好的一种模式。
一、实验环境搭建
1.安装ipvsadm #编辑调度策略
yum install ipvsadm -y
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
2.编辑调度策略,写完后保存
ipvsadm -A -t 172.25.2.100:80 -s rr
ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.2:80 -g
ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.3:80 -g
ipvsadm -l # -l 列出当前策略
cat /etc/sysconfig/ipvsadm #可通过修改文件修改策略
systemctl restart ipvsadm.service #重启服务
- -A :添加目标策略(向一个记录中添加真实主机)
- -t :tcp连接
- -s :调度器,接负载均衡的算法
- -g:dr模式
- r真实主机ip
3.在server2和3 打开http,并添加虚拟ip
systemctl start httpd.service
ip addr add 172.25.2.100/24 dev eth0
二.测试
真机:
[root@foundation2 ~]# curl 172.25.2.100
www.westos.org
[root@foundation2 ~]# curl 172.25.2.100
bbs.westos.org
[root@foundation2 ~]# curl 172.25.2.100
www.westos.org
[root@foundation2 ~]# curl 172.25.2.100
bbs.westos.org
三.问题:访问时会访问真实主机(server2/3),会使服务器压力过大。
- 解决办法:修改内核参数,添加arp,阻止外部的172.25.2.100的访问
- 具体做法:使用防火墙策略限制用户访问服务器
1.在server2和3上安装:arptables_jf
yum install -y arptables_jf
2.编辑策略:在server2/3上
arptables -nL
arptables -A INPUT -d 172.25.2.100 -j DROP
##-A添加策略 在IN -d 目的地址IP -j 处理方式 DROP 拒绝访问不回应
arptables -A OUTPUT -s 172.25.2.100 -j mangle --mangle-ip-s 172.25.2.2
arptables -nL
arptables-save > /etc/sysconfig/arptables
cat /etc/sysconfig/arptables
systemctl start arptables.service
arptables -nL
测试:
在真机上:
缓存的是调度器的mac地址
注意:
- DR模式下,ds和rs在同一网段内
- LVS和后端服务器上都要有vip,并且后端真实服务器上的vip不能对外进行广播。