LVS负载均衡器:NAT模式(地址映射)
一、LVS负载均衡器核心概念
LVS(Linux Virtual Server) 是由章文嵩博士开发的开源负载均衡解决方案,作为Linux内核的一部分,它能够将客户端请求高效分发到多台后端服务器。在NAT(网络地址转换)模式下: - LVS作为整个集群的单一入口点 - 同时处理入站请求和出站响应 - 通过IP伪装实现内外网地址转换 - 支持多种负载均衡算法(如RR轮询、WRR加权轮询)
二、实验环境架构
|
角色 |
IP地址 |
说明 |
|
负载调度器 |
内网:192.168.10.19外网:10.0.0.1 |
双网卡,核心调度节点 |
|
Web节点服务器1 |
192.168.10.16 |
托管kgc网站内容 |
|
Web节点服务器2 |
192.168.10.17 |
托管benet网站内容 |
|
NFS存储服务器 |
192.168.10.18 |
集中存储网站文件 |
|
客户端 |
10.0.0.12 |
模拟用户访问 |
三、分步部署指南
1、部署NFS共享存储(192.168.10.18)
# 关闭防火墙和SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
# 安装NFS服务
yum install -y nfs-utils rpcbind
systemctl enable --now rpcbind nfs
# 创建共享目录
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet
echo 'this is kgc web!' > /opt/kgc/index.html
echo 'this is benet web!' > /opt/benet/index.html
# 配置NFS共享策略
vim /etc/exports
/opt/kgc 192.168.10.0/24(rw,sync)
/opt/benet 192.168.10.0/24(rw,sync)
# 发布共享
exportfs -rv
2、配置Web节点服务器(192.168.10.16 / .17)
# 基础环境配置
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
yum install -y httpd nfs-utils
systemctl enable --now httpd rpcbind
# 查看NFS共享
showmount -e 192.168.10.18
节点服务器1 (192.168.10.16):
mount.nfs 192.168.10.18:/opt/kgc /var/www/html
echo "192.168.10.18:/opt/kgc /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab
节点服务器2 (192.168.10.17):
mount.nfs 192.168.10.18:/opt/benet /var/www/html
echo "192.168.10.18:/opt/benet /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab
3、配置LVS负载调度器(192.168.10.19)
3.1 启用IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
3.2 配置SNAT地址转换
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens37 -j SNAT --to-source 10.0.0.1
3.3 加载LVS内核模块
modprobe ip_vs
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*")
do
modprobe $i
done
3.4 安装管理工具
yum install -y ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
3.5 配置负载均衡策略
ipvsadm -C # 清除旧规则
ipvsadm -A -t 10.0.0.1:80 -s rr # 创建虚拟服务
ipvsadm -a -t 10.0.0.1:80 -r 192.168.10.16:80 -m
ipvsadm -a -t 10.0.0.1:80 -r 192.168.10.17:80 -m
# 保存配置
ipvsadm-save > /etc/sysconfig/ipvsadm
验证配置:
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.1:80 rr
-> 192.168.10.16:80 Masq 1 0 0
-> 192.168.10.17:80 Masq 1 0 0
四、LVS负载均衡器
1、关键管理命令
|
命令 |
功能 |
|
ipvsadm -Ln --stats |
查看实时连接统计 |
|
ipvsadm -d -t 10.0.0.1:80 -r 192.168.10.16:80 |
删除指定节点 |
|
ipvsadm -D -t 10.0.0.1:80 |
删除整个虚拟服务 |
|
ipvsadm-restore < /etc/sysconfig/ipvsadm |
恢复LVS配置 |
|
watch -n 1 ipvsadm -Ln --stats |
实时监控连接状态 |
2、测试验证
在客户端(10.0.0.12)执行:
# 使用curl测试负载均衡
while true; do curl http://10.0.0.1; sleep 2; done
预期将轮换显示:
this is kgc web!
this is benet web!
流量路径说明: 1. 客户端请求 → LVS外网IP(10.0.0.1:80) 2. LVS根据调度策略 → 转发到后端服务器(192.168.10.16或.17) 3. 后端响应 → 经LVS进行SNAT转换 → 返回客户端
3、架构优势分析
- 透明访问:客户端仅与虚拟IP交互,无需感知后端架构
- 高扩展性:通过增加节点服务器轻松扩容
- 集中存储:NFS统一管理网站内容,保证一致性
- 会话保持:配合持久连接可支持需要状态保持的应用
- 安全隔离:后端服务器位于私有网络,不直接暴露
4、生产环境优化建议
健康检查:添加脚本自动剔除故障节点
for i in {16,17}; do
curl -Is http://192.168.10.$i | grep '200 OK' || ipvsadm -d -t 10.0.0.1:80 -r 192.168.10.\$i:80
done
会话保持:使用-p参数启用持久连接
-E -t 10.0.0.1:80 -s rr -p 600
高可用架构:通过Keepalived实现LVS双机热备
权重调整:根据服务器性能设置不同权重
-e -t 10.0.0.1:80 -r 192.168.10.16:80 -m -w 3
五、简单LVS负载均衡器实验(LVS-NAT 模式(地址映射))
1、LVS服务器配置
(1)虚拟机192.168.137.128添加网卡


(2)ens33/ens35网卡配置
cd /etc/sysconfig/network-scripts
vi ifcfg-ens33
#####ens33网卡配置
[root@lvs network-scripts]# cat ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="7cf78704-dc20-4436-be20-e58d689be182"
windows 宿主机 配置:
LVS服务环境配置
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.137.128
NETMASK=255.255.255.0
GATEWAY=192.168.137.2
cp -p ifcfg-ens33 ifcfg-ens35
vi ifcfg-ens35
###ens35网卡配置
[root@lvs network-scripts]# cat ifcfg-ens35
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens35"
DEVICE="ens35"
ONBOOT="yes"
IPADDR=192.168.153.128
NETMASK=255.255.255.0
#GATEWAY=192.168.253.2
systemctl restart network
(3)关闭防火墙与核心配置、检查网卡、禁用selinx、检查DNS服务器配置
[root@localhost network-scripts]# hostnamectl set-hostname lvs
[root@localhost network-scripts]# su
[root@lvs network-scripts]# systemctl disable firewalld --now
[root@lvs network-scripts]# setenforce 0
setenforce: SELinux is disabled
#如果不是disabled则把SELINUX=enforcing改成SELINUX=edisabled
[root@lvs network-scripts]# vi /etc/selinux/config
ping www.baidu.com
#ping不通则 echo "nameserver 114.114.114.114" >> /etc/resolv.conf
(4)windows宿主机配置

2、内网两台web服务器环境准备
(1)更改网络适配器选项


(2)修改自己web服务器的网卡
如: web1 192.168.153.129 web2 192.168.153.130,网卡配置文件
修改如下(web2):
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=51d8cacb-55f0-4d1e-99e3-2be2eff759ad
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.153.130
NETMASK=255.255.255.0
GATEWAY=192.168.153.128
systemctl restart network
(3)关闭防火墙与核心配置、检查网卡、禁用selinx、检查DNS服务器配置
[root@localhost network-scripts]# hostnamectl set-hostname httpd02
[root@localhost network-scripts]# su
[root@httpd02 network-scripts]# systemctl disable firewalld --now
[root@httpd02 network-scripts]# setenforce 0
setenforce: SELinux is disabled
#如果不是disabled则把SELINUX=enforcing改成SELINUX=disabled
[root@httpd02 network-scripts]# vi /etc/selinux/config
[root@httpd02 network-scripts]cat /etc/resolv.conf
[root@httpd02 network-scripts]ping 192.168.137.128
[root@httpd02 network-scripts]ping 192.168.153.128
(4)搭建本地YUM仓库
#关闭防火墙:
systemctl disable firewalld --now
setenforce 0
####搭建本地yum仓库
........略
搭建成功
#下载并开启httpd
yum install -y httpd
systemctl start httpd
#####
PS: 提醒,虚拟机镜像要保证是连接的,否则yum做不了
3、LVS服务搭建
(1)LVS服务环境配置
#开启防火墙
systemctl start firewalld
#清除防火墙规则
iptables -t nat -F
iptables -F
#配置SNAT转发规则
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#或 echo '1' > /proc/sys/net/ipv4/ip_forward
#刷新生效
sysctl -p
#自定义路由转发规则,将所有192.168.153.0/24网段的流量全部映射为192.168.137.128的地址
iptables -t nat -A POSTROUTING -s 192.168.153.0/24 -o ens33 -j SNAT --to-source 192.168.137.128
(2)LVS服务准备
##安装ipvsadm 管理工具
yum -y install ipvsadm
##启动服务前须保存负载分配策略+
ipvsadm-save > /etc/sysconfig/ipvsadm
#或者 ipvsadm --save > /etc/sysconfig/ipvsadm
##开启lvs的管理工具
systemctl start ipvsadm.service
##配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
ipvsadm -C #清空规则
#重新建立规则(申明外网网卡是192.168.137.128负载均衡模式是RR轮循)
ipvsadm -A -t 192.168.137.128:80 -s rr
ipvsadm -a -t 192.168.137.128:80 -r 192.168.153.129:80 -m
ipvsadm -a -t 192.168.137.128:80 -r 192.168.153.130:80 -m
ipvsadm #启用策略
ipvsadm -ln #查看节点状态,Masq代表 NAT模式
ipvsadm-save > /etc/sysconfig/ipvsadm #保存策略
4、测试
(1)修改两台web服务器的网页文件
[root@httpd02 yum.repos.d]cd /var/www/html/
[root@httpd02 html]ls
[root@httpd02 html]vi index.html
this is test02
(2)测试前测试
##2台web服务器 ping windows宿主机的IP,查看是否能ping同
[root@httpd02 yum.repos.d]# ping 192.168.137.1
PING 192.168.137.1 (192.168.137.1) 56(84) bytes of data.
64 bytes from 192.168.137.1: icmp_seq=1 ttl=63 time=0.608 ms
(3)使用宿主机WINDOWS 访问LVS的ens33网卡IP 192.168.137.128,查看页面:
PS:注意,要相隔至少20秒再重复访问LVS服务器

在LVS服务器上可以curl访问到后端的2台服务器网页

(4)然后回到LVS服务端使用ipvsadm -ln 观测流量
[root@lvs network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.137.128:80 rr
-> 192.168.153.129:80 Masq 1 0 2
-> 192.168.153.130:80 Masq 1 0 2
六、简单nfs的共享服务实验
1、系统配置环境
192.168.137.128 server服务器设置
[root@localhost ~]# hostnamectl set-hostname server
[root@localhost ~]# su
[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
setenforce: SELinux is disabled
[root@server ~]# yum install -y httpd
ping www.baidu.com
cat /etc/resolv.conf
systemctl start httpd
ps:ping不通则 echo "nameserver 114.114.114.114" >> /etc/resolv.conf
192.168.137.129 nfs服务器设置
[root@localhost ~]# hostnamectl set-hostname nfs
[root@localhost ~]# su
[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# setenforce 0
[root@nfs ~]# vi /etc/slinux/config
#enforcing改成diabled
ping www.baidu.com
cat /etc/resolv.conf
2、nfs共享服务搭建
192.168.137.129 nfs服务器
#安装软件包
[root@nfs etc]# yum install nfs-utils.x86_64 rpcbind -y
#新建共享目录
[root@nfs etc]# mkdir /opt/share
[root@nfs etc]# cd opt
[root@nfs opt]# chmod -R 777 /opt/share
#编辑配置文件
[root@nfs opt]# vim /etc/exports
/opt/share 192.168.137.128/24(rw,sync,no_root_squash)
#共享目录 网段 读写,同步,无root权限
[root@nfs opt]# systemctl start rpcbind
[root@nfs opt]# systemctl start nfs
[root@nfs opt]#exportfs -vr
#不重启生效
[root@nfs opt]#exportfs -v
#查看详细的nfs信息
[root@nfs opt]# netstat -anpt | grep rpc
#查看本机发布的 NFS 共享目录
[root@nfs opt]# showmount -e
192.168.137.128 服务端
systemctl start httpd
yum install -y nfs-utils rpcbind
mount 192.168.137.129:/opt/share /var/www/html
df -hT
[root@server ~]# cd /var/www/html/
[root@server html]# ls
[root@server html]# vi index.html
this is nfs_stor file
[root@server html]# df -hT
[root@server html]# showmount -e 192.168.137.129

七、总结
LVS-NAT模式通过巧妙的地址转换机制,构建了一个高性能、易扩展的负载均衡架构。其核心优势在于: - 配置简单直观,运维成本低 - 兼容任意操作系统作为后端服务器 - 网络拓扑清晰,易于排查问题 - 与NFS等存储方案完美集成
此方案特别适合作为企业级Web应用的负载均衡解决方案,通过合理优化可支撑百万级并发请求,是构建高可用服务集群的基石技术
更多推荐



所有评论(0)