LVS负载均衡群集
群集的定义
Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。
群集的作用
对于企业服务的的性能提升一般会有两种方式:
纵向扩展: 对服务器的CPU 内存 硬盘 等硬件进行升级或者扩容来实现的 性能上限会有瓶颈,成本昂贵,收效比不高等问题。
横向扩展:通过增加服务器主机数量来应该高并发的场景。
群集的目的
提高性能:计算密集应用。如天气预报,核试验模拟。 降低成本:相对百万美元的超级计算机,价格便宜。 提高可扩展性:只要增加集群节点即可。 增强可靠性:多个节点完成相同功能,避免单点失败。
企业级群集的类型
负载均衡(LB):提高应用系统的响应效率,处理更多的访问请求,减少延迟,提高并发和负载能力。 同时也是如今企业运用最多的群集类型。
高可用(HA): 提高应用系统的可靠性,减少服务中断时间,确保服务的连续性
高性能运算(HPC):将多台主机的硬件计算资源整合到一起实现分布式运用,比如 云计算
LVS的相关话术:
DS:Director Server。指的是前端负载均衡器。
RS:Real Server。节点服务器,后端真实的工作服务器。
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
RIP:Real Server IP,后端服务器的IP地址。
CIP:Client IP,访问客户端的IP地址。
LVS的基本原理
1.当用户向负载均衡器(Director Server)发起请求,调度器将请求发送至内核空间。
2.Prerouting链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发送到INPUT链。
3.IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已经定义好的集群服务进行对比,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发送到POSTROUTING链。
4.POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送到后端的服务器。
LVS负载均衡的三种模式
群集的负载调度技术有三种工作模式:地址转换(NAT模式) ,直接路由(DR模式),IP隧道(IP-TUN)。对于商用来说,最常用是NAT模式和DR模式。
NAT(地址转换)
-
Network Address Translation,简称NAT模式
-
类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机 的访问入口,也是各节点回应客户机的访问出口。
-
服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两 种方式。
-
缺点:由于NAT的负载均衡器既作为用户的访问请求入口,也作为节点服务器响应请求的出口,承载两个方向的压力,调度器的性能会成为整个集群的瓶颈。
DR模式(直接路由)
- Direct Routing,简称DR模式。
- 采用半开放式的网络结构,与TUN模式的结构类似,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。承载的压力比NAT小。
- 但各节点并不是分散在各地,而是与调度器位于同一个物理网络。
- 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。
LVS的负载调度算法
rr:轮询算法(Round Robin)
- 将请求依次分配给不同的RS节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
- 将收到的访问请求安装顺序轮流分配给群集指定各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载。
wrr:加权轮询调度(Weighted Round Robin)
- 依据不同RS的权重值分配任务。权重值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
- 保证性能强的服务器承担更多的访问流量。
dh:目的地址哈希调度(destination hashing)
- 以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度(source hashing)
- 以源地址为关键字查找--个静态hash表来获得需要的RS。
(2)动态调度算法: wlc,lc,1blc
lc:最小连接数调度( Least Connections)
- ipvs表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。
- 根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。
wlc:加权最小连接数调度(Weighted Least Connections)
- 假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次取Ti/Wi为最小的RS作为下一个分配的RS。
- 在服务器节点的性能差异较大时,可以为真实服务器自动调整权重。
- 性能较高的节点将承担更大比例的活动连接负载。
lblc:基于地址的最小连接数调度(locality-based least-connection)
-
将来自同一个目的地址的请求分配给同一-台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。
实验环境:
一台NFS服务器: 192.168.10.101/24
两台WEB服务器: 192.168.10.10/24,192.168.10.20/24
一台LVS负载调度服务器(2块网卡): 内网192.168.10.1/24(ens33),外网12.0.0.1/24(ens36)
win10 客户机: 12.0.0.12/24
部署NFS共享存储服务
#1、关闭防火墙
systemctl disable --now firewalld
setenforce 0
#2、安装nfs-utils、rpcbind软件包
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service
#3、新建共享目录,并创建站点文件
mkdir /opt/web1 /opt/web2
echo "this is web1" > /opt/web1/index.html
echo "this is web2" > /opt/web2/index.html
#4、修改共享配置文件,设置共享策略
pwd
/share
vim /etc/exports
/usr/share *(ro,sync)
/opt/web1 192.168.10.0/24(rw,sync)
/opt/web2 192.168.10.0/24(rw,sync)
#5、启动两个服务,查看本机的NFS共享目录
systemctl start rpcbind
systemctl start nfs
showmount -e //查看本机发布的NFS共享目录
配置节点服务器
两台web节点服务器需要相同的操作
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service
yum install nfs-utils rpcbind -y
showmount -e 192.168.10.101
systemctl start rpcbind
systemctl enable rpcbind
web1节点服务器的后续操作:
mount.nfs 192.168.10.101:/opt/web1 /var/www/html
vim /etc/fstab
192.168.10.101:/opt/web1 /var/www/html nfs defaults,_netdev 0 0
mount -a
web2节点服务器的后续操作:
mount.nfs 192.168.10.101:/opt/web2 /var/www/html
vim /etc/fstab
192.168.10.101:/opt/web2 /var/www/html nfs defaults,_netdev 0 0
mount -a
配置负载调度器
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
(1)配置SNAT转发规则(如果内网想主动连接外网的话,需要配置SNAT策略)
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
或 echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p
#安装iptables 如果是centos7 系统
yum install -y iptables-services iptables
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens36 -j SNAT --to-source 12.0.0.1
(2)加载LVS内核模块
modprobe ip_vs #加载 ip_vs模块
cat /proc/net/ip_vs #查看 ip_vs版本信息
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
(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 [-p 60]
ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.10:80 -m [-w 1]
ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.10:80 -m [-w 1]
ipvsadm #启用策略
ipvsadm -ln #查看节点状态,Masq代表 NAT模式
保存LVS的配置策略以及删除策略的方法
ipvsadm-save > /opt/ipvsadm #保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
----------------------------------------------------------------------------------------------------------
ipvsadm -d -t 12.0.0.1:80 -r 192.168.10.101:80 #删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.1:80 #删除整个虚拟服务器
systemctl stop ipvsadm #停止服务(清空策略)
systemctl start ipvsadm #启动服务(根据/etc/sysconfig/ipvsadm重建配置)
ipvsadm-restore < /opt/ipvsadm #恢复LVS 策略
进行客户机测试
在一台IP为12.0.0.12的客户机使用浏览器访问 http://12.0.0.1/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点(或者关闭Web服务的连接保持)。