集群和分布式
集群(Cluster),解决某个问题将多台计算机组合形成的系统群。
常见的集群类型:
- 负载均衡(LoadBalancing,简称LB):由多个相同配置的主机组成,每个主机经过调度承担部分访问,防止单点故障提高系统可用性。常用的负载均衡实现方式由Nginx,LVS等。
- 高可用(High Availiablity,简称HA): ,是指系统或服务在规定时间内持续正常运行的能力,核心目标是最大限度减少停机时间,确保业务或功能在面对故障(如硬件损坏、软件错误、网络中断等)时仍能稳定提供服务。
MTBF:Mean Time Between Failure 平均无故障时间,正常时间 MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
可用性等级计算方式:A=MTBF/(MTBF+MTTR),计算结果越接近“1”高可用性越高
- 高性能计算(High-performance computing,HPC):高性能计算,国家战略资源
负载均衡与高可用的关系:
负载均衡是实现高可用的核心手段之一,高可用的目标是 “不中断服务”,而负载均衡通过分散流量和自动剔除故障节点,直接避免了 “单台服务器故障导致整体崩溃” 的风险。
分布式
一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务
分布式常见应用:
- 分布式应用-服务按照功能拆分,使用微服务
- 分布式静态资源--静态资源放在不同的存储集群上
- 分布式数据和存储--使用key-value缓存系统
- 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
分布式图解
集群和分布式的区别:
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
LVS介绍
LVS概念
LVS(Linux virtual server):是一种负载调度器,是负载均衡的一种实现方式。
- VS:虚拟服务器,LVS调度器
- RS:内网真实服务器,提供服务
- CIP:客户端IP
- VIP:LVS的外网IP
- DIP:LVS的内网IP
- RIP:RS的IP
LVS集群结构图
LVS的集群类型
集群类型 | 说明 |
---|---|
nat | 修改请求报文的目标IP,多目标IP的DNAT |
dr | 操纵封装新的MAC地址 |
tun | 在原请求IP报文之外添加一个IP首部 |
fullnat | 修改请求报文的源和目标IP |
tun与fullnat只做了解并没有实验配置提及 ,常用的还是DR与NAT,默认为DR。
LVS的调度算法
静态方法:仅根据算法本身进行调度,不考虑RS的负载情况。
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度。
静态调度算法 | 作用 |
RR(roundrobin) | 轮询调度RS,配置有差异不推荐 |
WRR(Weighted RR) | 根据权重来进行轮询调度,配置高的加权调度被调度次数多 |
SH(Source Hashing) | 基于源地址哈希,将来自同一源地址的请求调度到同一服务器,可实现会话粘性 |
DH(Destination Hashing) | 基于目标地址哈希,将发往同一目标地址的请求调度到同一服务器 |
动态调度算法 | 作用 |
---|---|
LC(least connections) | 调度到当前连接数最少的服务器,使各服务器负载更均衡 |
WLC(Weighted LC) | 带权重的最少连接调度,综合考虑服务器权重和当前连接数进行调度 |
SED(:Shortest Expection Delay) | 计算服务器的预期延迟(考虑权重和当前连接数),调度到预期延迟最小的服务器 |
NQ(Never Queue) | 第一轮均匀分配,后续SED |
LBLC(Locality-Based LC) | 动态的 DH 算法,基于局部性的最少连接调度,兼顾目标地址哈希和最少连接 |
LBLACR(LBLC with Replication) | 带复制功能的 LBLC,通过服务器复制进一步优化负载均衡和故障容错 |
在4.15版本内核以后新增调度算法
1.FO(Weighted Fai Over)调度算法:常用作灰度发布。
算法原理:
遍历虚拟服务所关联的真实服务器链表,找到还未过载的且权重最高的真实服务器,进行调度。当服务器承接大量连接,可以对此服务器进行过载标记,之后 VS 调度器就不会把连接调度到有过载标记的主机中。
2.OVF(Overflow-connection)调度算法:适用于服务器性能有差异且流量波动较大的场景,如电商。
算法原理:
基于真实服务器的活动连接数量和权重值实现。遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。一个可用的真实服务器需要同时满足以下条件:
- 未过载;
- 真实服务器当前的活动连接数量小于其权重值;
- 其权重值不为零 。
将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器。
实验
安装LVS
[root@client ~]# dnf install ipvsadm -y
ipvsadm命令参数
核心功能:
-
集群服务器管理:增、删、改
-
集群服务的RS管理:增、删、改
-
查看
1.管理集群服务中的增删改
#命令格式
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]-A #添加-E #修改-t #tcp服务-u #udp服务-s #指点调度算法,默认为WLC,rr为轮询,wrr为权重轮询-p #设置吃就连接超时,将同一个时间段将一个访问请求调度给同一个RS-f #firewall mask 火墙标记,是一个数字-L #查看lvs策略 + n 不做解析ipvsadm -Ln #不做解析查看lvs策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr
[root@lvs ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 360
[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -D -t 172.25.254.100:80
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -L #查看lvs调度策略
[root@lvs ~]# ipvsadm -Ln #n不做解析的查看调度策略
2.管理集群服务中的RS增删改
#命令格式
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]-a #添加-e #更改-t #tcp / -u #udp-f #火墙标签-r #指定RS地址-g #直连路由模式-i #ipip隧道模式-m #nat模式-w #设定权重-C #清空lvs策略-L #查看lvs策略 + n 不做解析ipvsadm -Ln #不做解析查看lvs策略--rate #输出速率信息ipvsadm -Ln --rate-Z #清空计数器
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.44.10 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.44.20 -g
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.44.20 -m -w 2
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.44.30 -i -w 2
[root@lvs ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
3.lvs调度策略的备份与恢复
#备份与恢复
[root@lvs ~]# ipvsadm-save -n > /mnt/ipvsadm.rule 备份规则策略到文件中
[root@lvs ~]# ipvsadm-restore < /mnt/ipvsadm.rule 重载规则策略
4.lvs调度策略的开机启动
由于缺少备份到/etc/sysconfig/ipvsadm规则调度文件,所以不能开机启动。
#需要先把调度策略导入生成调度规则文件,具有调度规则文件后才能开启服务进程
[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# systemctl enable --now ipvsadm
#开机启动后就会自动重载保存在调度规则的文件
LVS-NAT模式
环境
主机名 | IP |
---|---|
客户端(nat) | 172.25.254.70/24 |
LVS服务器(双网卡,nat与仅主机) | 172.25.254.100/24 192.168.5.10/24 |
web服务器1(仅主机) | 192.168.5.100/24 |
web服务器2(仅主机) | 192.168.5.200/24 |
客户端:
配好IP即可
LVS服务器:
配置好IP和内核路由以及LVS规则
开启内核路由:
编写LVS规则:
查看LVS规则:
web服务器(两台web服务器类似):
安装httpd,开启服务、编写默认发布文件
开启服务:
编写默认发布文件:
记得关闭火墙(便于测试)
测试(用客户端连续访问172.25.254.100多次):
服务器1、2轮流应答客户端
LVS-DR模式
环境
主机名 | IP |
---|---|
客户端(nat) | e0:172.25.254.111/24 |
路由器(双网卡) | e0:172.25.254.100/24 e1:192.168.44.100/24 |
调度器(仅主机) | e0:192.168.44.200/24 e1:192.168.44.220/24 |
服务器1(仅主机) | e0:192.168.44.10/24 lo:192.168.44.220/32 |
服务器2(仅主机) | e0:192.168.5.100 lo:192.168.5.250(vip) |
客户端:
配好IP即可
路由器配置:
配置IP 并开启内核路由以及地址伪装
#开启内核路由
vim /etc/sysctl.confnet.ipv4.ip_forward = 1#开启地址伪装
firewall-cmd --permanent --add-masquerade#开启iptab地址转换亦可
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.5.10#地址伪装和iptable地址转换选一种即可
LVS主机配置:
配置ip
配置LVS规则:
ipvsadm -A -t 192.168.5.250:80 -s rr
ipvsadm -a -t 192.168.5.250:80 -r 192.168.5.100:80 -g
ipvsadm -a -t 192.168.5.250:80 -r 192.168.5.200:80 -g
查看LVS规则:
服务器(两台服务器类似)
配置ip
下载、启用、配置httpd
开启服务:
编写默认发布文件:
记得关闭火墙(便于测试)
关闭服务器1与服务器2响应arp:
测试:
服务器1、2轮流应答客户端
lvs会话保持
解决问题:客户需要提交响应信息给服务器,如果单 纯的进行调度会导致客户填写的表单丢失
解决方案:
在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把这个源的主机调度到了那个RS上,设置持久连接超时。
#跟踪链接
[root@lsv-dr ~]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:56 FIN_WAIT 192.168.44.100:48534 192.168.44.220:80 192.168.44.10:80
TCP 01:55 FIN_WAIT 192.168.44.100:48518 192.168.44.220:80 192.168.44.20:80
#expire为长链接超时时间,在链接未超时再次访问不用经过三次握手,apache的一个长连接默认为两分钟#设置持久超时时间来将同一个时间段将一个访问请求调度给同一个RS
[root@lsv-dr ~]# ipvsadm -E -t 192.168.44.220:80 -s rr -p 1 #-p 1默认不是1s而是1min
[root@lsv-dr ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.44.220:80 rr persistent 1 #持久连接超时时间默认为360s-> 192.168.44.10:80 Route 1 0 0-> 192.168.44.20:80 Route 1 0 0
只有当最后一个FIN WATT结束,ASSURED才会倒计时最后一次apeach长连接超时时间默认为2分钟并且只有当最后一个ASSURED倒数结束下一个访问VIP的客户才会被调度到另一个RS上