目录
一、LVS负载均衡群集
1.群集的的概念
二、LVS负载均衡群集运用理论
1.负载均衡群集架构
2.LVS的基本原理
3.LVS负载均衡的三种模式
1)NAT(地址转换)
2)DR(直接路由)
3)TUN(IP隧道)
三、LVS虚拟机Linux Virtual Server
1.Linux Virtual Server
2.LVS的负载调度算法
1)固定调度算法:rr,wrr,dh,sh
2)动态调度算法:wlc,lc,lblc
四.ipvsadm工具选项说明
五.LVS-NAT模式部署
1.准备虚拟机
2.配置节点服务器(192.168.10.123、192.168.10.124)
3.配置负载调度器
4.进行测试
一、LVS负载均衡群集
1.群集的的概念
1)群集的定义
Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机
2)群集的作用
对于企业服务的的性能提升一般会有两种方式:
纵向扩展 : 对服务器的CPU 内存 硬盘 等硬件进行升级或者扩容来实现的 性能上限会有瓶颈,成本昂贵,收效比不高等问题
横向扩展 : 通过增加服务器主机数量来应该高并发的场景
3)群集的目的
提高性能:计算密集应用。如天气预报,核试验模拟
降低成本:相对百万美元的超级计算机,价格便宜
提高可扩展性:只要增加集群节点即可
增强可靠性:多个节点完成相同功能,避免单点失败
4)企业级群集的类型
负载均衡(LB):提高应用系统的响应效率,处理更多的访问请求,减少延迟,提高并发和负载能力。 同时也是如今企业运用最多的群集类型。
典型代表:软件类(Nginx LVS HAProxy SLB) 硬件类(F5 绿盟)
高可用(HA): 提高应用系统的可靠性,减少服务中断时间,确保服务的连续性(通过使用 N 个 9 来代表高可用的指标)
典型代表:keepalived、heartbeat
高性能运算(HPC):将多台主机的硬件计算资源整合到一起实现分布式运用
典型代表:云计算、分布式计算
二、LVS负载均衡群集运用理论
LVS的相关话术:
DS:Director Server。指的是前端负载均衡器
RS:Real Server。节点服务器,后端真实的工作服务器
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址
DIP:Director Server IP,主要用于和内部主机通讯的IP地址
RIP:Real Server IP,后端服务器的IP地址
CIP:Client IP,访问客户端的IP地址
1.负载均衡群集架构
第一层:负载调度器:通过VIP接收用户的请求,再通过调度算法确定要转发的节点服务器
访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集 IP地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑 替换至备用调度器,确保高可用性
第二层:服务器池中的节点服务器:通过RIP接收调度器转发来的请求,并处理请求进行响应
群集所提供的应用服务、由服务器池承担,其中每个节点具有独立的RIP地址(真 实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度 器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池
第三层:共享存储 :为各个节点服务器提供稳定、一致的文件存取服务,比如NAS+NFS,文件服务器+NFS,分布式对象存储等存储设备
2.LVS的基本原理
当用户向负载均衡器(Director Server)发起请求,调度器将请求发送至内核空间
Prerouting链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发送到INPUT链
IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已经定义好的集群服务进行对比,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发送到POSTROUTING链,POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送到后端的服务器
3.LVS负载均衡的三种模式
群集的负载调度技术有三种工作模式:地址转换(NAT模式) ,直接路由(DR模式),IP隧道(IP-TUN)。对于商用来说,最常用是NAT模式和DR模式
1)NAT(地址转换)
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。
缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈。
2)DR(直接路由)
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
3)TUN(IP隧道)
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling”。
三、LVS虚拟机Linux Virtual Server
1.Linux Virtual Server
针对Linux内核开发的负载均衡
1998年5月,由我国的章文嵩博士创建
官方网站:www.linuxvirtualserver.org/
LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出来一种高效的解决方法
2.LVS的负载调度算法
1)固定调度算法:rr,wrr,dh,sh
rr:轮询算法,将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
wrr:加权轮训调度,依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS。
2)动态调度算法:wlc,lc,lblc
wlc:加权最小连接数调度,假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS。
lc:最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。
lblc:基于地址的最小连接数调度(locality-based least-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。
四.ipvsadm工具选项说明
选项 | 含义 |
-A | 添加虚拟服务器 |
-D | 删除整个虚拟服务器 |
-s | 指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc) |
-a | 表示添加真实服务器(节点服务器) |
-d | 删除某一个节点 |
-t | 指定 VIP地址及 TCP端口 |
-r | 指定 RIP地址及 TCP端口 |
-m | 表示使用 NAT群集模式 |
-g | 表示使用 DR模式 |
-i | 表示使用 TUN模式 |
-w | 设置权重(权重为 0 时表示暂停节点) |
-p 60 | 表示保持长连接60秒(默认关闭连接保持) |
-l | 列表查看 LVS 虚拟服务器(默认为查看所有) |
-n | 以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -ln |
五.LVS-NAT模式部署
1.准备虚拟机
192.168.10.122 LVS调度器
192.168.10.123 web服务器1
192.168.10.124 web服务器2
192.168.10.125 NFS共享存储
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vim /etc/selinux/config
SELINUX=disabledyum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.servicesystemctl enable nfs.service
systemctl enable rpcbind.servicemkdir /opt/web1 /opt/web2
chmod 777 /opt/web1 /opt/web2
echo 'this is web test1 !' > /opt/web1/index.html
echo 'this is web test2!' > /opt/web2/index.htmlvim /etc/exports
/usr/share *(ro,sync)
/opt/web1 192.168.73.0/24(rw,sync)
/opt/web2 192.168.73.0/24(rw,sync)--发布共享---
exportfs -rv
2.配置节点服务器(192.168.10.123、192.168.10.124)
两台web节点服务器相同的操作
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vim /etc/selinux/config
SELINUX=disabledyum install httpd -y
systemctl start httpd.service
systemctl enable httpd.serviceyum install nfs-utils rpcbind -y
showmount -e 192.168.73.108systemctl start rpcbind
systemctl enable rpcbind
web1节点服务器操作:
mount.nfs 192.168.10.125:/opt/web1 /var/www/htmlvim /etc/fstab
192.168.10.125:/opt/web1 /var/www/html nfs defaults,_netdev 0 0mount -a
web2节点服务器操作:
mount.nfs 192.168.10.125:/opt/web2 /var/www/html
vim /etc/fstab
192.168.10.125:/opt/web2 /var/www/html nfs defaults,_netdev 0 0mount -a
3.配置负载调度器
(内网关 ens33:192.168.10.122,外网关 ens36:12.0.0.1)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0vim /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 iptablesiptables -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/ipvsadmsystemctl 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.123:80 -m [-w 1]
ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.124: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.123:80 #删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.1:80 #删除整个虚拟服务器
systemctl stop ipvsadm #停止服务(清空策略)
systemctl start ipvsadm #启动服务(根据/etc/sysconfig/ipvsadm重建配置)
ipvsadm-restore < /opt/ipvsadm #恢复LVS 策略
4.进行测试
在一台IP为12.0.0.12的客户机使用浏览器访问 http://12.0.0.1/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点(或者关闭Web服务的连接保持)