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

前言

    • 相关术语
    • LVS 三种模式的主要区别
    • LVS 基本工作原理
    • LVS 的组成
      • LVS/NAT
      • LVS/NAT 模型的特性
    • 负载调度模式
    • LVS的负载调度算法
    • ipvsadm工具
    • NAT模式LVS负载均衡群集部署

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

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

相关术语

LVS-NAT 原理介绍和配置实践_第1张图片

LVS 三种模式的主要区别

LVS-NAT 原理介绍和配置实践_第2张图片

LVS 基本工作原理

LVS-NAT 原理介绍和配置实践_第3张图片

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

LVS-NAT 原理介绍和配置实践_第4张图片重点理解 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模式
LVS-NAT 原理介绍和配置实践_第5张图片

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

(二)、TUN模式
LVS-NAT 原理介绍和配置实践_第6张图片

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

(三)、DR模式
LVS-NAT 原理介绍和配置实践_第7张图片

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

LVS的负载调度算法

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

ipvsadm工具

LVS-NAT 原理介绍和配置实践_第8张图片

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

LVS-NAT 原理介绍和配置实践_第9张图片
改完之后重启一下网卡 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

LVS-NAT 原理介绍和配置实践_第10张图片
改完之后重启一下网卡 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/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点。

LVS-NAT 原理介绍和配置实践_第11张图片
LVS-NAT 原理介绍和配置实践_第12张图片

你可能感兴趣的:(Web集群,linux,lvs)