LVS负载均衡群集-NAT模式实操

132 阅读11分钟

集群的含义

Cluster,集群,群集
由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型主机
群集是多个主机干同样的事情

纵向扩展和横向扩展

纵向扩展  对服务器的CPU 内存 硬盘 等硬件进行升级或者扩容来实现的 性能上限会有瓶颈 成本昂贵 收效比不高等问题
横向扩展  通过增加服务器主机数量来应对高并发的场景

解决高并发的方法

使用价格昂贵的小型机、大型机
使用多台相对廉价的普通服务器构建服务群集
通过整合多台服务器,使用LVS来达到服务器的高可用和负载均衡,并以同一个IP地址对外提供相同的服务。
在企业中常用的一种集群技术--LVS(Linux Virtual Server,Linux虚拟服务器)

三种类型的群集

  • 负载均衡群集(Load Balance Cluster)(阿里云有一个SLB)
提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标、获得高并发、高负载(LB)的整体性能
LB的负载分配依赖于主节点的分流算法,将来客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力,例如,“DNS轮询” “反向代理”等
  • 高可用群集 (High Availability Cluster)
提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能字段切换为主节点。例如,“故障切换” “双机热备”等
  • 高性能运算群集(High Performance Computer Cluster)
以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
高性能依赖于“分布式运算” 、“并行运算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。例如,“云计算” “网络计算”等。

负载均衡的结构

第一层,负载调度器 (LOad Balancer或Director)
访问整个集群系统的唯一入口,对外使用所有服务器共有的VIP地址,也成为集群IP地址,通常会配置主、备两台调度器实现热备份,当主调度器失效以后能平滑替换至备用调度器,确保高可用性
第二次,服务器池(Server Pool)
群集所提供的应用服务,由服务器池承担,其中某个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池
第三层,共享存储(Server Storage)
为服务器池中的所有节点提供稳定,一致的文件存取服务,确保整个群集的统一性。共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器

负载均衡的工作模式分析

  • 负载均衡是目前企业用的最多的集群类型

  • 集群的负载调度技术有三种工作模式

    • 地址转换(NAT)
Network Address Translation,简称NAT模式类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
服务器节点使用私网IP地址,与负载调度器位于同一物理网络,安全性要优于其他两种方式
  • IP隧道 (TUN)
IP Tunnel,简称TUN模式
采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器
服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
  • 直接路由 (DR)
Direct Routing, 简称DR模式
采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道

小结

负载均衡 (LB) 提高应用系统的响应效率,处理更多的访问请求,减少延迟,提高并发和负载能力
高可用 (HA) 提高应用系统的可靠性,减少服务中断时间,确保服务的连续性
高性能运算(HPC)将多台主机的硬件计算资源整合分布式运行 云计算

负载均衡集群架构
负载调度器   通过VIP接收用户的请求,再通过调度算法确定要转发的节点服务器
服务器池中的节点服务器  通过RIP接收调度器转发来的请求,并处理请求进行相应
共享存储   为各个节点服务器提供稳定、一致的文件存取服务、比如NAS+NFS,文件服务器+NFS,分布式对象存储等存储设备

LVS三模式
NAT(地址转换) 调度器作为所有节点服务器的网关,既作客户端的访问入口,也作节点服务器响应的访问出口,也就意味着调度器将成为整个集群系统的瓶颈
由于再转发过程中做了地址转发,对于节点服务器安全性比其他模式较好
调度器至少要两个网卡,一个用于承载VIP用于接收客户端的请求,另一个用于使用私有IP再同一个局域网中连接节点服务器

DR(直接路由) 调度器只负责接收客户端的请求,并根据调度算法转发给节点服务器;节点服务器在处理完请求后是直接响应返回给客户端,响应的数据包不经过调度器
调度器于节点服务器使用私有IP在同一个局域网中与节点服务器相互通信
TUN(IP隧道)架构与DR相同,但是节点服务器分散在互联网各个位置,都要独立的公网IP,通过专用IP隧道与调度器相互通信

LVS虚拟服务器

LVS虚拟服务器介绍

**Linux Virtual Server:**

-   针对Linux内核开发的负载均衡
-   1998年5月,由我国的章文嵩博士创建
-   官方网站:[www.linuxvirtualserver.org/](https://link.juejin.cn?target=http%3A%2F%2Fwww.linuxvirtualserver.org%2F "http://www.linuxvirtualserver.org/")
-   LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出来一种高效的解决方法

LVS 相关术语

DS:Director Server。指的是前端负载均衡器。

RS:Real Server。节点服务器,后端真实的工作服务器。

VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。

DIP:Director Server IP,主要用于和内部主机通讯的IP地址。

RIP:Real Server IP,后端服务器的IP地址。

CIP:Client IP,访问客户端的IP地址。

固定算法:rr,wrr,dh,sh

rr:轮询算法(Round Robin)

将请求依次分配给不同的RS节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
将收到的访问请求安装顺序轮流分配给群集指定各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载。

wrr:加权轮询调度(Weighted Round Robin)

依据不同RS的权重值分配任务。权重值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
保证性能强的服务器承担更多的访问流量。

dh:目的地址哈希调度(destination hashing)

以目的地址为关键字查找一个静态hash表来获得所需RS。

sh:源地址哈希调度(source hashing)

以源地址为关键字查找--个静态hash表来获得需要的RS。

动态调度算法:wlc、lc、1blc

lc:最小连接数调度(Least Connections)

 ipvs表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。
 根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。

wlc:加权最小连接数调度(Weighted Least Connetcions)

-   假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次取Ti/Wi为最小的RS作为下一个分配的RS。
-   在服务器节点的性能差异较大时,可以为真实服务器自动调整权重。
-   性能较高的节点将承担更大比例的活动连接负载。

lblc:基于地址的最小连接数调度(locality-based least-connection)

-   将来自同一个目的地址的请求分配给同一-台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

加载ip_vs模块

LVS现在已成为 Linux 内核的一部分,默认编译为 ip_vs 模块,必要时能够自动调动。

在CentOS 7 系统中,手动加载 ip_vs 模块的命令如下:

modprobe ip_vs     //手动加载 ip_vs 模块  
cat /proc/net/ip_vs   //查看当前系统中ip_vs模块的版本信息

LVS 所有的负载调度算法文件在 /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs/ 目录下

image.png

ipvsadm工具

ipvsadm是一个工具,同时它也是一条命令,用于管理LVS的策略规则。

ipvsadm是ipvs的管理器,需要yum安装。

ipvsadm工具的作用

LVS集群创建与管理:
创建虚拟服务器
添加、删除服务器节点
查看群集及节点情况
保存负载分配政策

ipvsadm命令选项

选项功能
-A添加虚拟服务器
-D删除整个虚拟服务器
-s指定负载调度算法(轮询: rr、加权轮询: wrr、 最少连接: lc、 加权最少连接: wlc)
-a表示添加真实服务器(节点服务器)
-t指定VIP地址及TCP端口 (调度器使用)
-r指定RIP地址及TCP端口 (节点服务器使用)
-m表示使用NAT群集模式
-g表示使用DR模式
-i表示使用TUN模式
-w设置权重(权重为0时表示暂停节点) ,默认值为1
-p 60表示保持长连接60秒。默认值就是60秒。
-l列表查看LVS虚拟服务器(默认为查看所有)
-n以数字形式显示地址、端口等信息,常与“-l”选项组合使用。-l需要在-n之前。ipvsadm -ln

LVS-NAT模式操作实验

准备一台NFS服务器 192.168.100.20/24

两台WEB服务器 192.168.100.40/24 192.168.100.50/24

一台负载均衡服务器(两块网卡):内网192.168.100.10/24(ens33) 外网12.0.0.254/24(ens36)

window 10客户机 12.0.0.100/24

部署NFS共享存储服务

1.关闭防火墙

image.png

2.安装nfs-utils、rpcbind软件包

image.png 3.新建共享目录,并创建站点文件

image.png

4、修改共享配置文件,设置共享策略

image.png

image.png 5.发布共享

image.png 6.启动两个服务,查看本机的NFS共享目录

image.png

部署两台web节点服务器

第一台web节点服务器

1、关闭防火墙

image.png 2.安装httpd

image.png 3.查看nfs服务器共享地信息

image.png

4、挂载站点。将NFS服务器的共享目录/share/tt/,挂载到httpd服务的根目录

image.png 5.指定网关,网关地址设置为负载调度器的内网地址

image.png

6.重启网络服务,开启httpd服务

image.png

第二台web服务器 1.关闭防火墙

image.png 2.安装http服务

image.png 3、指定网关,网关地址设置为负载调度器的内网地址

image.png

image.png 4.挂载NFS的共享目录

image.png 5.开启httpd服务

image.png

部署LVS负载调度服务器

ens36 image.png ens33 image.png 1.关闭防火墙

image.png 2.开启路由转发功能

image.png

image.png 3.配置SNAT策略

image.png 4.加载LVS内核模块

image.png 5.安装ipvsadm管理工具,开启服务

image.png

image.png

image.png

image.png

image.png

image.png

image.png