LVS 是 Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟服务器集群系统。LVS 的实现模式常用的有三种,我们讲下第二种 DR 模式,也是最常用的一种模式。
网络拓扑
拓扑如图:
网络地址
网络地址规划如表,router 需要开启转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward
:
身份 | 端口 | 地址 | 网关 |
---|---|---|---|
client | 192.168.18.250/24 | 192.168.18.254 | |
router | eth0 | 192.168.18.254/24 | |
router | eth1 | 192.168.19.1/24 | |
lvs | eth0 | 192.168.19.254/24 | 192.168.19.1 |
lvs | eth0:1 | 192.168.19.100/24 | |
rs1 | eth0 | 192.168.19.2/24 | 192.168.19.1 |
rs1 | lo:1 | 192.168.19.100/32 | |
rs2 | eth0 | 192.168.19.3/24 | 192.168.19.1 |
rs2 | lo:1 | 192.168.19.100/32 |
数据走向
客户发起请求:
来源 | 目的 | |
---|---|---|
MAC | client | router |
IP | 18.250 | 19.100 |
PORT | 33456 | 80 |
路由转发:
来源 | 目的 | |
---|---|---|
MAC | router | lvs |
IP | 18.250 | 19.100 |
PORT | 33456 | 80 |
LVS 服务器调度:
来源 | 目的 | |
---|---|---|
MAC | lvs | rs1 |
IP | 18.250 | 19.100 |
PORT | 33456 | 80 |
处理并且响应请求:
来源 | 目的 | |
---|---|---|
MAC | rs1 | router |
IP | 19.100 | 18.250 |
PORT | 80 | 33456 |
路由转发:
来源 | 目的 | |
---|---|---|
MAC | router | client |
IP | 19.100 | 18.250 |
PORT | 80 | 33456 |
操作步骤
- lvs 服务器:
echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
ipvsadm -A -t 192.168.19.100:80 -s rr
ipvsadm -a -t 192.168.19.100:80 -r 192.168.19.2 -g
ipvsadm -a -t 192.168.19.100:80 -r 192.168.19.3 -g
- rs1 服务器:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo web1 > /var/www/html/index.html
systemctl start httpd
- rs2 服务器:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo web2 > /var/www/html/index.html
systemctl start httpd
命令详解
echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
#反向过滤,需要修改为0
ipvsadm -A -t 192.168.19.100:80 -s rr
#ipvsadm为LVS的管理命令,-A指定虚拟IP,-t是TCP的协议,后面接的地址需要有端口号,-s指定轮询的方式
ipvsadm -a -t 192.168.19.100:80 -r 192.168.19.2 -g
#-a用于添加RS,-r指定轮询IP,-g是DR的模式
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#收到ARP请求闭嘴不说话
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#可以封虚IP的回包
echo web1 > /var/www/html/index.html
#将默认页面内容改为web1
systemctl start httpd
#启动httpd的服务
注意:如果 httpd 之前有启动,可使用 systemctl restart httpd
重启。
实现效果
效果如图:
条评论