目录
一、 群集的含义
二、群集的分类
三、负载均衡群集架构
第一层:负载调度器
第二层:服务器池
第三层:共享服务
四、负载均衡群集访问过程
五、LVS负载均衡群集工作模式
六、关于LVS虚拟服务器
七、LVS负载调度算法
八、ipvsadm 工具选项说明
九、LVS-NAT群集部署实验
1、准备nfs服务器
2、准备节点服务器
3、准备LVF负载调度器
4、客户端浏览器测试
在当前互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经无法满足负载均衡及高可用的要求。
解决这一问题的方法有两种:1、纵向拓展,使用价格昂贵的小型机、大型机(性能提升有限,收益比一般);2、横向拓展,使用多台相对廉价的普通服务器构建服务集群(收益比更好)。
群集也叫集群、Cluster。由多台主机构成,都做同样的一件事,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。通过整合多台服务器,使用LVS来达到服务器的高可用和负载均衡。
LVS(Linux虚拟服务器)是在企业中常用的一种群集技术。
根据群集所针对的目标差异,可分为三种类型,一般这三种都是相辅相成的
负载均衡群集(LB) :提高系统响应效率,处理更多的访问请求,以减少延迟为目标,实现高并发、高负载的能力。LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。例如,“DNS轮询”“反向代理”等
典型代表:软件类(nginx,lvs,haproxy,slb) 硬件类(f5,绿盟)
高可用群集 HA :提高系统可靠性,减少中断时间,确保服务的连续性。HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。例如,“故障切换”“双机热备”等(通常使用N个9来表示可用的指标,例如为4个9,表示全年99.99%的时间业务不能中断)
典型代表:keepalived,heartbeat
高性能运算群集 HPC :通过云计算或者分布式计算将硬件资源整合成资源池以获取高性能的cpu、内存等资源,来提高整体运算能力,获得相当于大型、超级计算机的高性能运算能力。
访问整个群集系统的唯一入口,客户端通过VIP将发送请求到负载调度器,也称为群集IP 地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性(负载均衡群集和高可用群集的搭配使用)。
服务器池 (Server Pool)群集所提供的应用服务由服务器池承担,其中每个节点具有独立的RIP地址 (真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性共享存储可以使用 NAS设备,或者提供NFS共享服务的专用服务器。
1、客户端通过VIP访问请求发送到负载调度器
2、调度器根据调度算法找到适合节点的服务器,并将请求通过RIP转发到对应的节点服务器
3、NAS或文件服务器一般也会与节点服务器在同一个局域网内,并通过NFS服务将共享目录里的文件数据同步给各个节点服务器
LVS的三种工作模式
NAT地址转换:
调度器会作为所有服务器的默认网关,同时也是客户端的访问入口和节点服务器的返回消息的出口,所以调度器会承载双向流量的负载压力,可能会称为整个群集的性能瓶颈。由于节点服务器都会处于内网环境,使用私网ip,具有一定的安全性。
TUN ip隧道:
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调度器。但由于节点服务器需要部署在不同的公网环境,所以需要有独立的公网ip,而且调度器与节点服务器是通过专用的ip隧道实现相互通信,因此ip隧道模式的成本较高、安全性较低,且数据ip隧道传输的过程中需要额外的封装与解封装,性能会受到一定影响。
DR直接路由:
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调度器(与NAT模式的区别)。节点服务器与调度器是部署在同一个物理网络里,因此不需要建立专用的ip隧道(ip隧道模式的区别)。DR模式是企业首选的LVS模式。
LVS现在已成为 Linux 内核的一部分,默认编译为ip_vs 模块,必要时能够自动调用。LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法。在 CentOS 7系统中,使用modprobe命令可以手动加载ip_vs 模块,使用cat /proc/net/ip_vs查看当前系统中ip_vs 模块的版本信息。
LVS调度器用的调度方法分为两类:
固定调度算法: rr,wrr,dh,sh
rr 轮询调度:将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器均等地对待每一台服务器,而不管服务器实际的连接数和系统负载
wrr 加权轮询调度:根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多,保证性能强的服务器承担更多的访问流量
dh 目的地址哈希调度:以目的地址为关键字查找一个静态的hash缓存表来获取所需的节点服务器
sh 源地址哈希调度:以源地址为关键字查找一个静态的hash缓存表来获取所需的节点服务器
动态调度算法:lc ,wlc,lblc
lc 最少连接:根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点
wlc 加权最少连接:在服务器节点的性能差异较大时,可以为真实服务器自动调整权重性能较高的节点将承担更大比例的活动连接负载。使用当前连接数➗权重得到的值,请求优先分配给该值最小的节点
lblc 基于地址的最小连接:将来自同一个目的地址的请求分配给同一个节点服务器,此时这台服务器是尚未满负荷的。若此节点服务器满负荷了,则优先将请求分配当前连接数最小的节点服务器,并以它作为下一次分配的优先考虑
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
①关闭防火墙和安全机制
②确认rpcbind和nfs-utils两个程序是否安装,如果没有安装使用yum安装即可
③准备共享目录,并创建共享文件
④准备共享文件
vim /etc/exports
⑤启动rpcbind和nfs-utils(注意启动的先后顺序)
systemctl enable --now rpcbind nfs
⑥发布共享
exportfs -rv
①关闭防火墙和安全机制
②检测nfs服务器的文件是否成功共享
③安装nginx
④查看nginx配置文件,获取nginx根目录位置
⑤挂载nfs服务器共享文件到nginx根目录位置
先把nginx根目录中的50x.html 和 index.html文件移动到opt目录
vim /etc/fatab
mount -a 刷新
最后再把移到opt目录中的文件移回来 mv /opt/*.html /usr/local/nginx/html/
⑥关闭nginx长连接
vim /usr/local/nginx/conf/nginx.conf
重启nginx
⑦使用curl命令验证
①关闭防火墙和安全机制
②给负载调度器添加双网卡并修改IP地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens35
vim ifcfg-ens35
vim ifcfg-ens33
systemctl restart network
③准备一台Windows客户机
④修改两台节点服务器的网关地址
systemctl restart network nginx (网络服务和nginx都要重启)
⑤添加地址转发功能
vim /etc/sysctl.conf
⑥回到windows客户机测试
⑦加载模块
⑧制作ip_vs调度策略
先使用本地yum源安装ipvsadm工具:yum -y install ipvsadm
再创建ipvsadm文件:ipvsadm-save > /etc/sysconfig/ipvsadm 或 touch /etc/sysconfig/ipvsadm
启动ipvsadm:systemctl start ipvsadm