LVS DR模式实验
ensp + vmware workstation模拟实验环境
实验拓扑
IP地址规划
| 接口 | IP地址 | 网关 | 虚拟IP | |
| Client | - | 192.168.10.20/24 | 192.168.10.1 | |
| Virtual Server | 外网 | 123.1.1.100/24 | 123.1.1.1 | 与物理接口相同 |
| DIP | 172.16.1.101/24 | - | ||
| Real Server1 | RIP1 | 172.16.1.21/24 | 172.16.1.1 | |
| lo | 123.1.1.100/32 | |||
| Real Server2 | RIP2 | 172.16.1.22/24 | 172.16.1.1 | |
| lo | 123.1.1.100/32 | |||
| Real Server3 | RIP3 | 172.16.1.23/24 | 172.16.1.1 | |
| lo | 123.1.1.100/32 |
virtual server即调度器在收到client的请求后,更改目标MAC为实际real server的MAC,real server收到virtual server转发过来的请求后,以源IP为VIP直接响应该请求,无需像route模式一样由virtaul server中转,提高效率。
注意:本实验中模拟了公网IP地址,测试时需要把能连外网的网卡临时禁用。若不想禁用,需要添加一条路由,route add 123.1.1.0 mask 255.255.255.0 192.168.10.1
一、在windows中添加loopback网卡
打开设备管理器devmgmt.msc
添加完成后打开网络连接管理界面ncpa.cpl,可以看到刚添加的网卡,根据需要进行重命名。
loopback1的IP地址配置为192.168.10.20/24,loopback2和loopback3的IP地址暂不配置
添加完成后重启计算机,否则ensp识别不到
二、编辑vmware网络配置
在虚拟网络编辑器里将刚添加的三个loopback接口添加进来
三、设置虚拟机网卡
virtaul-server添加两块网卡,桥接到vmnet12和13
real-server添加一块网卡,桥接到vmnet13 三台real-server配置相同
四、配置ENSP,打通网络
4.1 拓扑绘制
添加三朵云,右击设置
按上面步骤依次设置三朵云
4.2 地址规划
4.3 路由配置
R1配置
#
sysname R1
#
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.252
ospf network-type p2p
#
interface GigabitEthernet0/0/1
ip address 192.168.10.1 255.255.255.0
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 1.1.1.1 0.0.0.0
network 12.1.1.1 0.0.0.0
network 192.168.10.1 0.0.0.0
#
R2配置
#
sysname R2
#
acl number 2000
rule 5 permit source 172.16.1.0 0.0.0.255
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.252
ospf network-type p2p
nat outbound 2000 interface LoopBack 10
#
interface GigabitEthernet0/0/1
ip address 123.1.1.1 255.255.255.0
#
interface GigabitEthernet0/0/2
ip address 172.16.1.1 255.255.255.0
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface LoopBack10
ip address 10.10.10.10 255.255.255.255
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 10.10.10.10 0.0.0.0
network 12.1.1.2 0.0.0.0
network 123.1.1.1 0.0.0.0
#
五、LVS配置
5.1 virtual server设置
[root@virtserv ~]# cat /etc/redhat-release
Rocky Linux release 9.5 (Blue Onyx)
设置IP地址
注意:需要调整内网网卡不做为默认路由,否则产生无法ping通的问题。尤其在测试时执行
nmcli connection down ens160
关闭ens160网卡后,默认路由就走ens192,再启动ens160仍不会恢复,导致网络问题。
关闭防火墙
禁用selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
测试网络是否通
开启路由转发功能
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.conf
sysctl -p
安装ipvsadm包
dnf -y install ipvsadm
ipvsadm规则配置
ipvsadm -A -t 123.1.1.100:80 -s wrr
ipvsadm -a -t 123.1.1.100:80 -r 172.16.1.21:80 -g -w 1
ipvsadm -a -t 123.1.1.100:80 -r 172.16.1.22:80 -g -w 1
ipvsadm -a -t 123.1.1.100:80 -r 172.16.1.23:80 -g -w 1
保存配置
ipvsadm-save -n > /etc/sysconfig/ipvsadm
设置开机自启动
systemctl enable --now ipvsadm
若每次重启ipvsadm就清空配置,尝试如下设置
[root@virtserv ~]# find /etc -name *ipvsadm*
/etc/sysconfig/ipvsadm-config
/etc/sysconfig/ipvsadm
/etc/systemd/system/multi-user.target.wants/ipvsadm.service
[root@virtserv ~]# vim /usr/lib/systemd/system/ipvsadm.service
把里面的stop执行动作删除
修改后
systemctl disable --now ipvsadm
systemctl enable --now ipvsadm
5.2 real server设置
显示单台配置,其余类似
关闭防火墙、禁用selinux同virtual server
nmtui界面里没有lo接口
使用命令直接为lo增加虚拟IP
nmcli connection modify lo +ipv4.addresses 123.1.1.100/32
nmcli connection up lo
上面添加的虚拟IP,在系统重启后没有自动加载,但查看配置文件里有
未发现虚拟IP,如下图
配置文件中存在该虚拟地址,但autoconnect没开启
[root@realser2 ~]# cat /etc/NetworkManager/system-connections/lo.nmconnection
[connection]
id=lo
uuid=ee6498a6-1693-4ece-bbac-0b71a2e6755c
type=loopback
autoconnect=false
interface-name=lo
timestamp=1778590005
[loopback]
[ipv4]
address1=127.0.0.1/8
address2=123.1.1.100/32
method=manual
[ipv6]
addr-gen-mode=default
address1=::1/128
method=manual
[proxy]
使用下面命令将lo设置为自动连接,正常用名字lo即可,若提示名字冲突,可改为uuid
nmcli connection modify ee6498a6-1693-4ece-bbac-0b71a2e6755c autoconnect yes
设置非必要不响应arp请求,也不主动发
echo 'net.ipv4.conf.all.arp_ignore = 1' >> /etc/sysctl.conf
echo 'net.ipv4.conf.all.arp_announce = 2' >> /etc/sysctl.conf
echo 'net.ipv4.conf.lo.arp_ignore = 1' >> /etc/sysctl.conf
echo 'net.ipv4.conf.lo.arp_announce = 2' >> /etc/sysctl.conf
sysctl -p
安装nginx
dnf -y install nginx
echo 'real server 11111' > /etc/sysctl.conf
systemctl enable --now nginx
六、效果验证
七、存在问题
lvs不具备检测后端real server的服务是否正常的功能
当后端某一real server服务异常后
需要编写脚本进行检测
[root@virtserv ~]# cat check.sh
#!/bin/bash
rip1=172.16.1.21
rip2=172.16.1.22
rip3=172.16.1.23
while true; do
curl http://$rip1 &> /dev/null
if [ $? -eq 0 ]; then
ipvsadm -a -t 123.1.1.100:80 -r $rip1 -g &> /dev/null
else
ipvsadm -d -t 123.1.1.100:80 -r $rip1 &> /dev/null
fi
curl http://$rip2 &> /dev/null
if [ $? -eq 0 ]; then
ipvsadm -a -t 123.1.1.100:80 -r $rip2 -g &> /dev/null
else
ipvsadm -d -t 123.1.1.100:80 -r $rip2 &> /dev/null
fi
curl http://$rip3 &> /dev/null
if [ $? -eq 0 ]; then
ipvsadm -a -t 123.1.1.100:80 -r $rip3 -g &> /dev/null
else
ipvsadm -d -t 123.1.1.100:80 -r $rip3 &> /dev/null
fi
sleep 2
done
[root@virtserv ~]# chmod +x check.sh
[root@virtserv ~]# nohup sh /root/check.sh &
当后端real server服务连接不上时,自动删除,恢复后自动添加进来
