二层负载均衡LVS DR模式
LVS DR模式通过修改数据包中的源MAC地址改为LVS所在的IP的MAC地址,将目的MAC地址修改为真实IP的MAC地址,由于这个过程只经过内核,不通过用户空间,所以这个模式的负载均衡效率很高。
0x00 原理
- 术语:
名称 | 缩写 | 说明 |
---|---|---|
Client IP | CIP | 客户端IP地址 |
Virtual IP Address | VIP | 客户请求服务的IP地址 |
Director Server | DS | 负载均衡节点 |
Director Server IP | DIP | 负载均衡节点IP |
Real Server | RS | 后端工作节点 |
Real Server IP | RIP | 后端工作节点IP |
- 原理图
- 客户端通过VIP访问到负载均衡器,到达内核空间。
- PREROUTING 链接收到客户端请求判断客户端的目的IP是否为本机IP(VIP),确定后将数据包转发到INPUT链。
- 在INPUT链中,通过ipvsadm 模块会拦截这些流量,并根据调度算法决定转发到哪个后端 Real Server,修改数据包中的源MAC地址改为LVS所在的IP的MAC地址,将目的MAC地址修改为真实IP的MAC地址。后将数据包发到POSTROUTING链。
- POSTROUTING链接收数据包后判断目标地址是否存在后端服务器中,将数据包转发给后端服务器。
0x01 部署步骤
环境
- 4台服务器(Ubuntu 22.04.3)在同一局域网内
- 1台作为LoadBlancer
- 3台作为后端的业务服务器(Worker1-3)
- LVS : 192.168.50.126
- Worker1: 192.168.50.119
- Worker2: 192.168.50.116
- Worker3: 192.168.50.48
- Client: 192.168.50.128
LVS上的操作
VIP 需要和RealServer IP在同一VLAN内
在主网卡上绑定一个VIP
1
ip addr add 192.168.50.201/24 dev eth0
配置IPVS规则
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 清空现有规则(可选)
ipvsadm -C
# 添加 VIP 和负载均衡算法(例如轮询)
sudo ipvsadm -A -t 192.168.50.201:80 -s rr
# 添加后端服务器(临时添加,永久保存执行ipvsadm save)
sudo ipvsadm -a -t 192.168.50.201:80 -r 192.168.50.48:80 -g
sudo ipvsadm -a -t 192.168.50.201:80 -r 192.168.50.116:80 -g
sudo ipvsadm -a -t 192.168.50.201:80 -r 192.168.50.119:80 -g
# 开启IP转发(临时修改,永久修改在/etc/sysctl.conf中修改)
sudo echo "1" > /proc/sys/net/ipv4/ip_forward
RS上的操作
1 | # 给RS的lo网卡绑定VIP |
LVS-DR 常见的负载均衡算法
- 轮询(Round Robin,RR)算法:
将请求依次分配给不同的后端服务器,保证每个服务器都能够分担相同的负载。
特点:简单、易于实现,适用于后端服务器性能相近的情况。 - 加权轮询(Weighted Round Robin,WRR)算法:
根据预设的权重值,按照比例分配请求。权重高的服务器将获得更多的请求。
特点:可以根据服务器的处理能力进行灵活配置,实现负载均衡。 - 最少连接(Least Connections,LC)算法:
将请求分配给当前活动连接数最少的服务器。
特点:适用于连接数较多的场景,可以有效地平衡负载。 - 加权最少连接(Weighted Least Connections,WLC)算法:
将 LC 算法与 WRR 算法结合,根据服务器的权重值和当前活动连接数来分配请求。
特点:综合考虑了服务器的处理能力和当前负载情况。 - 基于局部性(Locality-Based)算法:
试图将来自同一客户端的请求始终分发到同一台服务器上,以提高缓存命中率。
特点:适用于有状态的应用,可以提高性能。 - 带复制(Replication)算法:
将每个请求同时发送给多台服务器,然后根据第一台返回结果的服务器来响应客户端。
特点:提高了系统的可用性,但增加了网络负载。
0x02 测试
- 在客户端多次执行curl http://192.168.50.201 ,使用轮询算法一次访问后端服务器
1 | root@k8s:~$ curl http://192.168.50.201/ |
- 通过日志查看来源IP是客户端IP,可见只修改了MAC地址
- 在业务环境中这种负载均衡方式是后端直接返回数据给客户端,所以需要后端服务器拥有公网,
0x03 思考
LVS 与 RS已经在一个局域网为什么不能直接使用LVS的真实IP作为入口。
- VIP是为了给数据一个入口然后对数据包进行处理,如果使用真实IP的话,用户数据与其他数据无法区分,所以VIP就是给用户访问的单独的入口。
为什么需要在RS的lo上绑定VIP
- DR模式只会修改数据包的源MAC地址和目的MAC地址,所以经过LVS转发后的数据包目的地址依然是VIP,所以要在RS上绑定VIP让数据包可以到达RS。
RS的VIP可以绑定在其他网卡上吗
- 理论可以,但是可能会造成ARP冲突,VIP绑定在lo上,lo不会对外进行广播持有VIP,不会造成冲突。
二层负载均衡LVS DR模式
You need to set
install_url
to use ShareThis. Please set it in _config.yml
.