一、概述
LVS作为一个百万级的调度器,非常适合高并发的场景。LVS在早期Linux不是内核的功能,需要单独安装软件包,现在的内核已经将LVS功能集成在内核中,LVS的整体网络架构如下:
二、LVS常用的两种算法
1、NAT(网络地址转换)模式
- 客户端向LVS调度器发起请求(更多的情况LVS前有防火墙做NAT映射)
- LVS调度器将请求转发给内部服务器的RealServer
- RealServer的回程路由必须要通过LVS调度器
- LVS调度器将请求发给客户端 整个访问流程跟用防火墙或者Linux做DNAT一致,所以这种模式是NAT模式。
2、DR(直接路由)模式
- 客户端向LVS调度器发起请求(更多的情况LVS前有防火墙做NAT映射)
- LVS调度器将请求转发给内部服务器的RealServer,请求的地址集群的虚拟IP地址。
- RealServer以虚拟IP作为源地址对客户端进行响应,通过各自的路由直接返回。
整个访问流程是通过LVS调度器接收请求,真正响应回包是通过RealServer自己的网络去响应。
三、LVS的DR模式的实践
实验拓扑:
1、开启ROUTER服务器的IP_FORWARD功能
echo 1 > /proc/sys/net/ipv4/ip_forward
配置外网卡地址
nmcli con add con-name ens37 type ethernet \
ifname ens37 ipv4.addresses 192.168.28.128/24 \
ipv4.method manual autoconnect yes
nmcli con up ens37
配置内网卡地址
nmcli con add con-name ens33 type ethernet \
ifname ens33 ipv4.addresses 192.168.96.133/24 \
ipv4.method manual autoconnect yes
nmcli con up ens33
2、配置LVS服务器
配置回环VIP 地址
ip address add 192.168.96.200/32 label lo:1 dev lo
配置LVS的规则
ipvsadm -A -t 192.168.96.200:80 -s rr
ipvsadm -a -t 192.168.96.200:80 -r 192.168.96.8 -g
ipvsadm -a -t 192.168.96.200:80 -r 192.168.96.18 -g
3、配置客户端IP地址
4、配置RS1服务器IP地址
配置IP地址
nmcli con add con-name ens33 type ethernet \
ifname ens33 ipv4.addresses 192.168.96.8/24 \
ipv4.address 192.168.96.133 ipv4.method manual \
autoconnect yes
nmcli con up ens33
配置arp应答忽略
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
配置VIP回环地址
ip address add 192.168.96.200/32 label lo:1 dev lo
配置测试web服务 创建测试页
echo "This test page on RS1" > /var/www/html/index.html
5、配置RS2服务器
配置IP地址
nmcli con add con-name ens33 type ethernet \
ifname ens33 ipv4.addresses 192.168.96.18/24 \
ipv4.address 192.168.96.133 ipv4.method manual \
autoconnect yes
nmcli con up ens33
配置arp忽略
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
配置VIP回环地址
ip address add 192.168.96.200/32 label lo:1 dev lo
配置测试web服务 创建测试页面
echo "This test page on RS2" > /var/www/html/index.html
6、测试客户端访问
查看RS2服务器的日志 ++注意:在router和LVS服务器上默认是开启的firewalld并且不允许80访问的,在测试过程中需要查看是否因为防火墙阻止访问失败,报错抓包如下。 ++
四、总结
通过上面的实现基础的LVS DR模型的配置,在配置过程中注意SELINUX 和FIREWALLD影响。