LVS-DR数据包流向分析
- 客户机向虚拟IP发出请求,调度服务器接收请求
- 调度器根据负载均衡算法选择节点服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为节点服务器的MAC地址,然后在局域网上发送
- 节点服务器收到这个数据帧,解封装后发现目标IP与本机匹配,于是处理这个报文。随后重新封装报文,发送到路由器
- 客户端通过Internet收到回复报文,客户端认为得到正常的服务,而不会知道是那一台服务器处理的
项目操作
群集拓扑图
操作步骤
NFS共享存储
IP 192.168.10.15
yum -y install nfs-utils rpcbind
mkdir -p /opt/web1
mkdir -p /opt/web2
echo "<html><title>web1</title><body><h1>11111</h1></body></html>" >> /opt/web1/index.html
echo "<html><title>web2</title><body><h1>66666</h1></body></html>" >> /opt/web2/index.html
vi /etc/exports
/opt/web1 192.168.10.13(ro)
/opt/web2 192.168.10.14(ro)
systemctl restart nfs
showmount -e #查看本机共享存储发布情况
节点服务器
IP1 192.168.10.13
IP2 192.168.10.14
showmount -e 192.168.10.15 ##查看NFS服务器发布情况
yum -y install httpd
mount 192.168.10.15:/opt/web1 /var/www/html
vi web.sh
#!/bin/bash
ifconfig lo:0 192.168.10.99 broadcast 192.168.10.99 netmask 255.255.255.255 up
#添加虚拟网口
route add -host 192.168.10.99 dev lo:0 #给lo:0添加路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
##系统只响应目的IP为本地真实IP的ARP请求
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
##系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送真实接口的IP地址
sysctl -p &> /dev/null
sh web.sh
ifconfig #查看虚拟网口配置情况
调度器
ens33 192.168.10.12
ens33:0 192.168.10.99
modprobe ip_vs ##加载LVS内核模块
cat /proc/net/ip_vs ##查看当前系统ip_vs模块版本信息
yum -y install ipvsadm ##安装管理软件ipvsadm
vi lvs_dr.sh
#!/bin/bash
ifconfig ens33:0 192.168.10.99 broadcast 192.168.10.99 netmask 255.255.255.255 up
#添加虚拟地址的虚拟接口
route add -host 192.168.10.99 dev ens33:0 #给ens33:0添加路由
ipvsadm -C
ipvsadm -A -t 192.168.10.99:80 -s rr
ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.13:80 -g
ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.14:80 -g
ipvsadm -Ln #查看调度信息
sh lvs_dr.sh
ifconfig #查看虚拟网口配置情况
测试效果
浏览器访问虚拟地址