LVS简介及NAT负载均衡群集

169 阅读7分钟

负载群集

群集的含义

由多台主机构成,但对外之表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一个大型计算机

扩展方式

纵向扩展:对服务器的cpu 内存 硬盘 等硬件进行升级或扩容来实现 (性能上限会有瓶颈,成本昂贵,收效比不高等问题)

横向扩展:通过增加服务器主机数量来实现高并发

群集分类

根据群集所针对的目标差异,可分为三种类型

  • 负载均衡群集(LB)
  • 高可用群集(HA)
  • 高性能运算群集(HPC)
  1. 负载均衡群集(LB):提高应用系统的响应能力,处理更多的访问请求,减少延迟,提高并发和负载能力
  2. 高可用群集(HA):提高应用系统的可靠性,减少服务中断时间,确保服务的连续性
  3. 高性能运算群集(HPC) : 将多台主机的硬件计算资源合到一起实现分布式运行

负载均衡群集

负载均衡的结构

  • 负载调度器(第一层) :通过VIP接收用户的请求,再通过调度算法确定要转发的节点服务器
  • 服务器池中的节点服务器(第二层):通过RTP接受调度器转发来的请求,并处理请求进行响应
  • 共享存储(第三层):为各个服务节点服务器提供稳定,一致的文件存取服务,比如NAS+NFS,文件服务器+NFS,分布式对象存储等存储设备

微信截图_20221013140756.png

负载均衡群集工作模式

  • 地址转换(NAT模式)
  • IP隧道(TUN模式)
  • 直接路由(DR模式)

地址转换(NAT模式)

  • 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
  • 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络安全性要优于其他两种方式
  • 调度器至少要有2个网卡一个承载VIP用于接收客户端的请求,另一个用于使用私有IP在同一个局域网中连接节点服务器

缺点:由于NAT的负载均衡器既作为用户的访问请求入口,也作为节点服务器响应请求的出口,承载两个方向的压力,调度器的性能会成为整个集群的瓶颈

微信截图_20221013155525.png

直接路由(DR模式)

  • 采用半开放式的网络结构,与TUN模式的结构类似,但各个节点并不是分散在各地,而是与调度器位于同一个物理网络
  • 负载调整器与各个节点服务器通过本地网络连接,不需要建立专用的IP隧道
  • 性能比NAT模式高
  • 调度器只负责接受客户端的请求,并根据调度算法转发给节点服务器,节点服务器在处理完请求后直接相应返回给客户端,响应的数据包不经过调度器,调度器和节点服务器使用私有ip在同一个局域网中连接节点服务器

微信截图_20221013155627.png

IP隧道(TUN模式)

  • 架构与DR相似,但是节点服务器分散在互联网各个位置,都具有独立的公网ip,通过专用ip与调度器相互通信
  • 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的internet连接直接回应客户机,而不再经过负载调度器

LVS虚拟服务器

什么是LVS

  • LVS是针对Linux内核开发的负载均衡解决方案
  • LVS实际上相当于基于IP地址的虚拟化应用,为基于ip地址和内容请求分发的负载均衡提出了一种高效的解决方法

LVS现在已经成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。在centos7系统中,以下操作可以手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息

微信截图_20221013164157.png

常见的LVS调度器算法(均衡策略)

LVS调度器用的调度方法基本为两类:

  • 固定调度算法
  • 动态调度算法
固定调度算法

rr(轮询算法)

  • 将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。

wrr(加权轮询调度)

  • 依据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多。
  • 保证性能强的服务器承担更多的访问流量

dh(目的地址哈希调度)

  • 以目的地址为关键字查找一个静态bash表来获得所需的RS节点

sh(源地址哈希调度)

以源地址为关键字查找一个静态bash表来获取所需要的RS节点

动态调度算法

wlc(加权最小连接数调度)

  • 假设各台RS节点的权值依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS节点作为下一个分配的RS节点

lc(最小连接数调度)

  • IPVS表存储了所有活动的连接。LB会比较将来连接请求发送到当前连接最少的RS节点

lblc(基于地址的最小连接数调度)

  • 将来自同一个目的地址的请求分配给同一台RS节点,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS节点,并以它作为下一次分配的首先考虑
ipvsadm 工具选项
  • -A:添加虚拟机服务器
  • -D:删除整个虚拟服务器
  • -s:指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)
  • -a:表示添加真实服务器(节点服务器)
  • -d:删除某个节点
  • -t:指定VIP(虚拟IP)地址及TCP端口
  • -r:指定RIP(真实IP)地址及TCP端口
  • -m:表示使用NAT群集模式
  • -g:表示使用DR模式
  • -i:表示使用TUN模式
  • -w:设置权限(权重为0时表示暂停节点)
  • -p 60:表示保持长时间连接60秒
  • -l:列表查看LVS虚拟服务器(默认为查看所有)
  • -n:以数字形式显示地址、端口等信息,常与'-l'选项组合使用(ipvsadm -ln)
  • -C:清空设置
  • -save:重载

部署实例

实验准备

负载调度器:内网关 ens33:192.168.116.1,外网关 ens36:12.0.0.1 Web节点服务器1:192.168.116.10 Web节点服务器2:192.168.116.20 NFS服务器:192.168.116.50 客户端:12.0.0.12

(1)配置nfs共享存储器

#关闭防火墙和selinux
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

#下载nfs服务
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl enable rpcbind.service

#创建两个共享目录
cd /opt/
mkdir abc def
chmod 777 abc/ def/
echo 'welcome to abc.com!' > abc/index.html
echo 'welcome to def.com!' > def/index.html

#修改nfs发布策略
vim /etc/exports
/usr/share *(ro,sync)
/opt/abc 192.168.116.0/24(rw,sync)
/opt/def 192.168.116.0/24(rw,sync)

#在线发布
exportfs -rv

微信截图_20221017205029.png

(2)配置节点服务器

首先需要节点服务器提供web服务(apache、nginx等都可以)

微信截图_20221017205220.png

微信截图_20221017205239.png

将网页根目录挂载到共享存储服务器

web服务器1(nginx)

#启动nfs服务并共享
systemctl start rpcbind nfs
mount 192.168.116.50:/opt/abc /usr/local/nginx/html/

微信截图_20221017205447.png

web服务器2(apache)

#启动nfs服务并共享
systemctl start rpcbind nfs
mount 192.168.116.50:/opt/def /var/www/html/

微信截图_20221017205626.png (3)配置负载调度服务器

配置网卡

微信截图_20221017210008.png

#关闭防火墙和selinux
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

#添加ip转发功能
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p

#设置SNAT地址转发
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 192.168.116.0/24 -o ens33 -j SNAT --to-source 12.0.0.1

#下载ipvsdam并加载ip_vs通用模块
yum -y install ipvsadm
modprobe ip_vs

#添加并启动ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
systemctl enable ipvsadm.service

#添加lvs策略
ipvsadm -A -t 12.0.0.1:80 -s rr -p 5
ipvsadm -a -t 12.0.0.1:80 -r 192.168.116.10:80 -m -w 1
ipvsadm -a -t 12.0.0.1:80 -r 192.168.116.20:80 -m -w 1

#启用策略
ipvsadm

#保存策略(恢复可使用 ipvsadm-restore < /etc/sysconfig/ipvsadm)
ipvsadm-save > /etc/sysconfig/ipvsadm

微信截图_20221017210303.png

使用外网客户端访问测试(等待连接保持失效后刷新,都能访问到则实现负载均衡

微信截图_20221017210417.png

微信截图_20221017210433.png