LVS四层负载均衡
一、介绍
LVS (Linux Virtual Server) 是一个高性能、高可用的Linux虚拟服务器集群系统,能通过IP负载均衡将用户的请求分发到后端的多个真实服务器上。
1.1 基本概念
- 虚拟IP(VIP),会通过此IP地址进行负载均衡。
- 真实服务器(Real Server),真正提供服务的后端服务器。
- LVS调度器(Director),请求入口,并且对后端做负载均衡。
- 客户端(Client)请求的发送者。
1.2 主要模式
1.2.1 NAT(Network Address Translation)
访问过程:
请求过程:调度器修改目标ip地址
- 客户端(Client) 发送请求到 LVS调度器(Director),Client IP —>> Virtual IP
- LVS调度器(Director)转发请求到后端的真实服务器(Real Server),Client IP —>> Real IP
响应过程:调度器修改源ip地址
- 真实服务器(Real Server)发送相应给LVS调度器(Director),Real IP—>> Client IP
- LVS调度器(Director)转发响应给客户端,Virtual IP—>> Client IP
LVS调度器(Director)修改、转发双向的数据流,容易成为性能瓶颈。

1.2.2 DR(Direct Routing)
LVS调度器(Director)配置 VIP 到对外网卡
真实服务器(Real Server)配置 VIP 到 lo网卡,并禁用arp响应
访问过程:
请求过程:调度器修改目标mac地址
- 客户端(Client) 发送请求到 LVS调度器(Director)Client IP—>>VIP IP
- LVS调度器(Director)转发请求到后端的真实服务器(Real Server),Director MAC —>> Real MAC
响应过程:真实服务器直接响应给客户端
- 真实服务器(Real Server)发送相应给LVS调度器(Director),VIP IP—>> Client IP
LVS调度器(Director)无需处理响应流量,性能高。调度器和真实服务器必须处于同一局域网。

1.2.3 TUN(Tunnel)
LVS调度器(Director)转发请求时会嵌套一层IP报文。
真实服务器(Real Server)解封装IP报文后,发现还有一层,也会直接响应。
访问过程:
请求过程:调度器修改目标mac地址
- 客户端(Client) 发送请求到 LVS调度器(Director)Client IP—>>VIP IP
LVS调度器(Director)转发请求到后端的真实服务器(Real Server),
Director IP—>> Real IP
里面嵌套一层 Client IP—>>VIP IP
响应过程:真实服务器直接响应给客户端
- 真实服务器(Real Server)发送相应给LVS调度器(Director),VIP IP—>> Client IP
LVS调度器(Director)无需处理响应流量,性能高。调度器和真实服务器可以跨机房。但封装解封装带来额外开销。

二、DR使用
2.1 规划
| 主机名 | ip | 用途 |
|---|---|---|
| lvs-director | 192.168.10.101 | lvs调度器 |
| rs02 | 192.168.10.102 | 真实服务器2 |
| rs03 | 192.168.10.103 | 真实服务器3 |
| rs04 | 192.168.10.104 | 真实服务器4 |
| 192.168.10.100 | 虚拟ip |
1 | cat >> /etc/hosts << EOF |
2.2 LVS调度器
- 安装
1 | yum install ipvsadm -y |
- Linux系统添加虚拟ip
永久添加
1 | nmcli connection modify ens33 +ipv4.addresses 192.168.10.100/32 |
临时添加
1 | ip addr add dev ens33 192.168.10.100/32 |
- LVS调度器添加虚拟ip
1 | ipvsadm -A -t 192.168.10.100:80 -s rr |
- LVS调度器添加后端真实服务器
1 | ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.102 -g |
2.3 真实服务器
- 安装
nginx,并配置不同的页面
1 | vim /etc/yum.repos.d/nginx.repo |
1 | [nginx-stable] |
1 | sudo yum install nginx |
1 | echo "${HOSTNAME} $(hostname -I)" > /usr/share/nginx/html/index.html |
- 系统添加虚拟ip地址
注意:需要在lo网卡添加
1 | ip addr add dev lo 192.168.10.100/32 |
- 禁用arp响应
1 | echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore |
- 匹配精确ip地址回包
1 | echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce |
2.4 验证
在额外的机器上测试,
1 | curl 192.168.10.100 |
2.5 命令汇总
1 | -A --add-service #在服务器列表中新添加一条新的虚拟服务器记录 |
三、参考文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 浅空的运维记录!