Cluster :集群是一个宽泛但核心的概念,泛指把多台独立计算机(或虚拟机)通过网络整合成一个逻辑整体,以提供高吞吐、高可用、可横向扩展的服务。(为了解决某个特定问题将堕胎计算机组合起来形成的单个系统)
Cluster常见的三种类型:
目标 | 解释 | 关键词 |
---|---|---|
高可用 (HA) | 单节点故障后服务秒级自动切换 | Keepalived、Pacemaker |
负载均衡 (LB) | 把流量均匀分摊到多台后端节点 由多个主机组成,每个主机只承担一部分访问 | LVS、Nginx、HAProxy |
高性能 (HPC) | 把任务拆成小块并发执行,缩短总耗时 (高性能计算,国家战略资源) | MPI、Slurm、并行计算 |
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%
SLA:Service level agreement(服务等级协议)是在一定开销下为保障服务的性能和可用性,服
务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在
常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一
些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。
停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外
停机时间
分布式
将单一系统或任务拆分成多个独立的部分,分散到多个节点(计算机、服务器、设备等)上协同工作,以提高性能、可靠性或扩展性。
分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务
分布式静态资源--静态资源放在不同的存储集群上分布式数据和存储--使用key-value缓存系统
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
区别
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据
和代码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式
中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起
来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数
来提升效率.
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器
完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决
定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,
都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败
lvs**(Linux virtual server)运行原理**
1、LVS简介
LVS:国人章文嵩博士 1998 年发起的开源项目,现已集成到 Linux 内核,成为官方的四层(OSI 传输层)负载均衡框架
VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务
2、lvs****集群体系结构
工作原理:
VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
3、LVS****概念
VS: Virtual Server
RS: Real Server
CIP: Client IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP
4、lvs****集群的类型
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
4.1、nat****模式
1、本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和 PORT实现转发
2、RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
3、请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
4、支持端口映射,可修改请求报文的目标PORT
5、VS必须是Linux系统,RS可以是任意OS系统
4.1.1、nat模式数据传输过程

-
客户端把请求发到 VIP(CIP→VIP)。
-
LVS 在 PREROUTING/INPUT 阶段用 IPVS 做 DNAT,把目标 VIP 改成被选中的 RIP,同时源地址改成本机 DIP,然后从 FORWARD 发到 RealServer(DIP→RIP)。
-
RealServer 处理完后把响应按默认网关先送回 LVS(RIP→DIP)。
-
LVS 在 POSTROUTING 阶段做 SNAT,把源 RIP 改回 VIP,再发回客户端(VIP→CI)
4.1.2NAT模式特点
-
进出都走 LVS:请求、响应两次穿过 Director,天然成为流量瓶颈。
-
网络最简单:后端可把 RIP 设在私网,网关指 LVS 即可,无需改 MAC。
-
端口可映射:LVS 能把外部 80 转成内部 9000,适合做端口转换或地址隐藏。
4.2、DR****模式
DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变;后端直接把响应从自己的 RIP 发回客户端,不再经过 LVS。
4.2.1、DR****模式数逻辑

-
请求:客户端发
CIP→VIP
,LVS 只把帧的目标 MAC 改成某台 RealServer 的 MAC,IP 头不动,包直达后端。 -
后端:RealServer 在 lo 口绑定 VIP,收包后处理。
-
响应:RealServer 直接把
VIP→CIP
的报文从自己的网卡发回客户端,不再经过 LVS。
4.2.2、DR模式特点
-
只改 MAC,不改 IP :LVS 仅把请求帧的目标 MAC 换成 RealServer 的 MAC,IP 头仍是
CIP→VIP
,回程由 RealServer 直接回给客户端,LVS 不再参与。 -
性能最高:响应流量绕过 LVS,可支撑万兆甚至更高并发。
-
部署限制 :所有节点(LVS 与 RealServer)必须在同一二层广播域,且每台 RealServer 必须在 lo 口静默绑定 VIP,避免 ARP 冲突。
4.3、TUN****模式
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部
(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP
是CIP)
4.3.1、TUN****模式数据传输过程
1.客户端发送请求数据包,包内有源IP+vip+dport
2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含
TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP)
+port,响应数据包通过网络直接回传给client
4.3.2、TUN****模式特点
1.DIP, VIP, RIP都应该是公网地址
2.RS的网关一般不能指向DIP
3.请求报文要经由Director,但响应不能经由Director
4.不支持端口映射
5.RS的OS须支持隧道功能
4.4、fullent模式
fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
3.请求和响应报文都经由Director
4.支持端口映射
4.5、lvs****的调度算法
4.5.1、lvs调度算法类型
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
4.5.2、lvs****静态调度算法
1、RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐
2、WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往
第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请
求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
4.5.2、lvs****动态调度算法
主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
1、LC:least connections(最少链接发)
适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活
动链接数)
2、WLC:Weighted LC(权重最少链接)
默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight
3、SED:Shortest Expection Delay,
初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight
但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接
4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制
到负载轻的RS
4.5.3、在4.15****版本内核以后新增调度算法
1.FO(Weighted Fai Over)调度算法:常用作灰度发布
在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F
OVERLOAD标志)的且权重最高的真实服务器,进行调度
当服务器承接大量链接,我们可以对此服务器进行过载标记(IP_VS_DEST_F OVERLOAD),那么vs调度
器就不会把链接调度到有过载标记的主机中。
2.OVF(Overflow-connection)调度算法基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动
连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关
联的真实服务器链表,找到权重值最高的可用真实服务器。一个可用的真实服务器需要同时满足以下条
件:
未过载(未设置IP_VS_DEST_F OVERLOAD标志)
真实服务器当前的活动连接数量小于其权重值
其权重值不为零
5、lvs部署命令介绍
5.1、lvs****软件相关信息
程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvs调度规则文件:/etc/sysconfig/ipvsadm
5.2、ipvsadm****命令
核心功能:
集群服务管理:增、删、改
集群服务的RS管理:增、删、改
查看
命令参数
bash
管理集群服务
ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \
service-address(集群地址) \
[-s scheduler(调度算法)] \
[-p [timeout]] \
[-M netmask] \
[--pepersistence_engine] \
[-b sched-flags]
ipvsadm -D -t|u|f service-address 删除
ipvsadm --C 清空
ipvsadm --R 重载
ipvsadm -S [-n] 保存
管理集群中的real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w
weight](权重)
ipvsadm -d -t|u|f service-address -r server-address 删除RS
ipvsadm -L|l [options] 查看rs
ipvsadm -Z [-t|u|f service-address] 清楚计数器
5.3、lvs****集群中的增删改
1.管理集群服务中的增删改
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A #添加
-E #修改
-t #tcp服务
-u#udp服务
-s #指定调度算法,默认为WLC
-p #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一 Realserver
-f #firewall mask 火墙标记,是一个数字
bash
#增加
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000
#修改
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000
#删除
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80
[root@DR-server ~]# ipvsadm -D -f 66
2.管理集群中RealServer的曾增删改
bash
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
-a #添加realserver
-e #更改realserver
-t #tcp协议
-u #udp协议
-f #火墙 标签
-r #realserver地址
-g #直连路由模式
-i #ipip隧道模式
-m #nat模式
-w #设定权重
-Z #清空计数器
-C #清空lvs策略
-L #查看lvs策略
-n #不做解析
--rate :输出速率信息
bash
#添加
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2
#更改
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1
#删除
[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
bash
[root@DR-server ~]# ipvsadm -Ln
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.100:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0
[root@DR-server ~]# ipvsadm -C
[root@DR-server ~]# ipvsadm -Z -t 172.25.254.20:80
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.20:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0