介绍
DR(Direct Routing):直接路由,是LVS默认的模式,应用最广泛.
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址.
整个过程中源IP/PORT,以及目标IP/PORT均保持不变.
原理
首先,DR 模式下,调度器(Director)和真实服务器(Real Server)处于同一个局域网内.它们都拥有自己的物理网络接口,并且都被配置了相同的 VIP(Virtual IP,虚拟 IP 地址)
当客户端向调度器发送请求时,调度器会依据预先设定的负载均衡算法,从可用的真实服务器中挑选出一台适合处理该请求的服务器.
接着,调度器会对数据包进行修改.它会将数据包的目标 MAC 地址更改为所选真实服务器的 MAC 地址.
随后,调度器将修改后的数据包直接发送到局域网中.
由于真实服务器与调度器在同一网络环境中,所以真实服务器能够接收到这个数据包.
真实服务器在收到数据包后,会进行检查.当发现数据包的目标 IP 地址正是自己配置的 VIP 时,就会对该数据包进行处理.
处理完毕后,真实服务器直接将响应数据包发送给客户端,而不再通过调度器进行中转.
实验图
说明
Client(客户端):测试主机,网络(NAT)
Router(路由器):作为客户端网关(NAT),作为LVS,Server1,Server2网关(仅主机),开启内核路由功能
LVS(调度器):集群调度器,网络(仅主机),环回(VIP)
Server1,Server2(服务器):集群服务器,网络(仅主机),环回(VIP)
部署
客户端
bash
# 假设网卡名字为eth0
cat > vim /etc/NetworkManager/system-connections/eth0.nmconnection << EOF
> [connection]
> id=eth0
> type=ethernet
> interface-name=eth0
>
> [ipv4]
> method=manual
> address1=172.25.254.200/24,172.25.254.100
> EOF
路由器
bash
# 打开路由内核功能
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf;sysctl -p
# 假设(NAT)网卡名字为eth0
cat > vim /etc/NetworkManager/system-connections/eth0.nmconnection << EOF
> [connection]
> id=eth0
> type=ethernet
> interface-name=eth0
>
> [ipv4]
> method=manual
> address1=172.25.254.100/24 # 路由器不用配网关
> EOF
# 假设(仅主机)网卡名字为eth1
cat > vim /etc/NetworkManager/system-connections/eth1.nmconnection << EOF
> [connection]
> id=eth1
> type=ethernet
> interface-name=eth1
>
> [ipv4]
> method=manual
> address1=192.168.0.100/24 # 路由器不用配网关
> EOF
调度器
bash
# 假设(仅主机)网卡名字为eth0
cat > vim /etc/NetworkManager/system-connections/eth0.nmconnection << EOF
> [connection]
> id=eth0
> type=ethernet
> interface-name=eth0
>
> [ipv4]
> method=manual
> address1=192.168.0.50/24,192.168.0.100
> EOF
# 设置VIP
ip addr add dev lo 192.168.0.200/32 # 注意掩码 32
# 安装 IPVS 管理工具
dnf install ipvsadm -y
# 添加策略,分配权重,使用轮询算法
ipvsadm -A -t 192.168.0.200:80 -s rr # VIP
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1 # VIP + 服务器IP
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2 # VIP + 服务器IP
服务器
bash
# 假设为HTTP服务器,端口:80
# Server1 : 假设(仅主机)网卡名字为 eth0
cat > vim /etc/NetworkManager/system-connections/eth0.nmconnection << EOF
> [connection]
> id=eth0
> type=ethernet
> interface-name=eth0
>
> [ipv4]
> method=manual
> address1=192.168.0.10/24,192.168.0.100
> EOF
# Server2 : 假设(仅主机)网卡名字为 eth0
cat > vim /etc/NetworkManager/system-connections/eth0.nmconnection << EOF
> [connection]
> id=eth0
> type=ethernet
> interface-name=eth0
>
> [ipv4]
> method=manual
> address1=192.168.0.20/24,192.168.0.100
> EOF
# 均安装HTTP服务,均添加VIP
yum install httpd -y
ip addr add dev lo 192.168.0.200/32 # 注意掩码 32
# 均关闭防火墙,SElinux
systemctl stop firewalld;systemctl mask firewalld
grubby --update-kernel ALL--args selinux=0
# 均修改index.html
echo Server - 192.168.0.10 > /var/www/html/index.html # Server1
echo Server - 192.168.0.20 > /var/www/html/index.html # Server2
# 关闭两个服务器的ARP应答
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
配置要点
- LVS、Server
- 网关、VIP、网卡模式、网段均相同
- Client、Router处于同一网段(公网)中
- Router需要开启路由内核功能