LVS-NAT 原理介绍和配置实践

参考文章
Virtual Server via NAT - http://www.linuxvirtualserver.org/VS-NAT.html

LVS 和 Keepalived 官方中文手册 PDF - https://pan.baidu.com/s/1s0P6nUt8WF6o_N3wdE3uKg

相关术语

在这里插入图片描述

LVS 三种模式的主要区别

在这里插入图片描述

LVS 基本工作原理

在这里插入图片描述

1、当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间。
2、PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP,将数据包发往 INPUT 链。
3、IPVS 是工作在 INPUT 链上的,当用户请求到达 INPUT 时,IPVS 会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时 IPVS 会强行修改数据包里的目标 IP 地址及端口,并将新的数据包发往 POSTROUTING 链。
4、POSTROUTING 链接收数据包后发现目标 IP 地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。

LVS 的组成

LVS 由 2 部分程序组成,包括 ipvs 和 ipvsadm。

1、ipvs(ip virtual server):一段代码工作在内核空间,叫 ipvs,是真正生效实现调度的代码。
2、ipvsadm:另外一段是工作在用户空间,叫 ipvsadm,负责为 ipvs 内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器 (Real Server)

LVS/NAT

在这里插入图片描述重点理解 NAT 方式的实现原理和数据包的改变。

(1). 当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING 链。 此时报文的源 IP 为 CIP,目标 IP 为 VIP
(2). PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链
(3). IPVS 比对数据包请求的服务是否为集群服务,若是,修改数据包的目标 IP 地址为后端服务器 IP,然后将数据包发至 POSTROUTING 链。 此时报文的源 IP 为 CIP,目标 IP 为 RIP
(4). POSTROUTING 链通过选路,将数据包发送给 Real Server
(5). Real Server 比对发现目标为自己的 IP,开始构建响应报文发回给 Director Server。 此时报文的源 IP 为 RIP,目标 IP 为 CIP
(6). Director Server 在响应客户端前,此时会将源 IP 地址修改为自己的 VIP 地址,然后响应给客户端。 此时报文的源 IP 为 VIP,目标 IP 为 CIP

LVS/NAT 模型的特性

  • RS 应该使用私有地址,RS 的网关必须指向 DIP
  • DIP 和 RIP 必须在同一个网段内
  • 请求和响应报文都需要经过 Director Server,高负载场景中,Director Server 易成为性能瓶颈
  • 支持端口映射
  • RS 可以使用任意操作系统
  • 缺陷:对 Director Server 压力会比较大,请求和响应都需经过 director server

NAT(Network Address Translation 网络地址转换)是一种外网和内外地址映射的技术,内网可以是私有网址,外网可以使用 NAT 方法修改数据报头,让外网与内网能够互相通信。NAT 模式下,网络数据报的进出都要经过 LVS 的处理。LVS 需作为 RS(真实服务器)的网关。当包到达 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 接收到包以后,仿佛是客户端直接发给它的一样。RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。这时 RS 的包通过网(LVS)中转,LVS 会做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。客户端无法感知到后端 RS 的存在。

(1)RIP 和 DIP 必须在同一个 IP 网络,且应该使用私网地址;RS 的网关要指向 DIP;
(2)请求报文和响应报文都必须经由 Director 转发;Director 易于成为系统瓶颈;
(3)支持端口映射,可修改请求报文的目标 PORT;
(4)vs 必须是 Linux 系统,rs 可以是任意系统;

缺点:在整个过程中,所有输入输出的流量都要经过 LVS 调度服务器。显然,LVS 调度服务器的网络 I/O 压力将会非常大,因此很容易成为瓶颈,特别是对于请求流量很小,而响应流量很大的 Web 类应用来说尤为如此。

优点:NAT 模式的优点在于配置及管理简单,由于了使用 NAT 技术,LVS 调度器及应用服务器可以在不同网段中,网络架构更灵活,应用服务器只需要进行简单的网络设定即可加入集群。

负载调度模式

(一)、NAT模式
在这里插入图片描述

地址转换
● Network Address Translation,简称NAT模式
● 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
● 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式

(二)、TUN模式
在这里插入图片描述

IP隧道
● IP Tunnel,简称TUN模式
● 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器
● 服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信

(三)、DR模式
在这里插入图片描述

直接路由
● Direct Routing,简称DR模式
● 采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
● 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道

LVS的负载调度算法

  • 轮询(Round Robin):
    将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器)
    均等地对待每一台服务器 ,而不管服务器实际的连接数和系统负载
  • 加权轮询(Weighted Round Robin):
    根据真实服务器的处理能力轮流分配收到的访问请求
    调度器可以自动查询各节点的负载情况,并动态调整其权重
    这样可以保证处理能力强的服务器承担更多的访问流量
  • 最少连接(Least Connections):
    根据真实服务器已建立的连接数进行分配
    将收到的访问请求优先分配给连接数最少的节点
    如果所有的服务器节点性能相近,采用这种方式可以更好的均衡负载
  • 加权最少连接(Weighted Least Connections)
    在服务器节点的性能差异较大时,可以为真实服务器自动调整权重
    权重较高的节点将承担更大比例的活动连接负载

ipvsadm工具

在这里插入图片描述

NAT模式LVS负载均衡群集部署

LVS调度器作为Web 服务器池的网关,LVS具有两块网卡,分别连接内外网,使用轮询(rr)调度算法

--------------NAT模式 LVS负载均衡群集部署--------------

LVS负载调度器ens33:192.168.180.128 ens36:12.0.0.1
Web 节点服务器1:   192.168.180.129
Web 节点服务器2:   192.168.180.130
NFS服务器:        192.168.180.131
客户端:           12.0.0.12

1.部署共享存储(NFS服务器:192.168.180.131)

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

yum install nfs-utils rpcbind -y
systemctl start nfs.service
systemctl start rpcbind.service
systemctl enable nfs.service
systemctl enable rpcbind.service

mkdir /opt/zcy /opt/benet
chmod 777 /opt/zcy /opt/benet

vim /etc/exports
/usr/share *(ro,sync)
/opt/zcy 192.168.180.0/24(rw,sync)
/opt/benet 192.168.180.0/24(rw,sync)

--发布共享---
exportfs -rv

2.配置节点服务器(192.168.180.129、192.168.180.130)

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service

yum install nfs-utils rpcbind -y
showmount -e 192.168.180.131

systemctl start rpcbind
systemctl enable rpcbind

--192.168.180.129---
mount.nfs 192.168.180.131:/opt/zcy /var/www/html
echo 'this is zcy web!' > /var/www/html/index.html

vim /etc/fstab
192.168.180.131:/opt/zcy		/myshare	nfs defaults,_netdev	0  0

在这里插入图片描述
改完之后重启一下网卡 systemctl restart network

--192.168.180.130---
mount.nfs 192.168.180.131:/opt/benet /var/www/html
echo 'this is benet web!' > /var/www/html/index.html

vim /etc/fstab
192.168.180.131:/opt/benet		/myshare	nfs defaults,_netdev	0  0

在这里插入图片描述
改完之后重启一下网卡 systemctl restart network

3.配置负载调度器(内网关 ens33:192.168.180.128,外网关 ens36:12.0.0.1)

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 01)配置SNAT转发规则
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p

iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.180.0/24 -o ens36 -j SNAT --to-source 12.0.0.12)加载LVS内核模块
modprobe ip_vs					#加载 ip_vs模块
cat /proc/net/ip_vs				#查看 ip_vs版本信息3)安装ipvsadm 管理工具
yum -y install ipvsadm

--启动服务前须保存负载分配策略---
ipvsadm-save > /etc/sysconfig/ipvsadm
或者 ipvsadm --save > /etc/sysconfig/ipvsadm

systemctl start ipvsadm.service

(4)配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
ipvsadm -C 					#清除原有策略
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 192.168.180.129:80 -m -w 1
ipvsadm -a -t 12.0.0.1:80 -r 192.168.180.130:80 -m -w 1
ipvsadm						#启用策略

ipvsadm -ln					#查看节点状态,Masq代表 NAT模式
ipvsadm-save > /etc/sysconfig/ipvsadm						#保存策略

#4 额外的一些命令,非该实验完成的必要步骤


ipvsadm -d -t 12.0.0.1:80 -r 192.168.80.11:80 -m [-w 1] #删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.1:80 #删除整个虚拟服务器
systemctl stop ipvsadm #停止服务(清除策略)
systemctl start ipvsadm #启动服务(重建规则)
ipvsadm-restore < /etc/sysconfig/ipvsadm #恢复LVS 策略


4.测试效果
在一台IP为12.0.0.12的客户机使用浏览器访问 http://12.0.0.1/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点。

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45412401/article/details/112972558