1 集群和分布式
系统性能扩展方式:
Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务,成本高。
Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster
垂直扩展不再提及:
随着计算机性能的增长,其价格会成倍增长
单台计算机的性能是有上限的,不可能无限制地垂直扩展
多核CPU意味着即使是单台计算机也可以并行的。
1.1 集群 Cluster
Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统
Cluster分为三种类型:
LB:Load Balancing,负载均衡。调度负载,按照算法调度。
HA:High Availiablity,高可用,避免SPOF(single Point Of failure)(单点失败)
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%
HPC:High-performance computing,高性能 www.top500.org
1.2 分布式系统
分布式存储: Ceph,GlusterFS,FastDFS,MogileFS
分布式计算:hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务
分布式静态资源–静态资源放在不同的存储集群上
分布式数据和存储–使用key-value缓存系统
分布式计算–对特殊业务使用分布式计算,比如Hadoop集群
1.3 集群和分布式
集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代
码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每
一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完
整的业务。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提
升效率。
对于大型 站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成
同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪
一台去完成响应,并且一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同
的业务,如果一个节点垮了,那这个业务可能就会失败。
1.4 集群设计原则
可扩展性—集群的横向扩展能力。小型机横向扩展小,面临淘汰
可用性—无故障时间(SLA)
性能—访问响应时间
容量—单位时间内的最大并发吞吐量(C10K 并发问题) 。LVS内核级,并发好。
1.5 集群设计实现
1.5.1 基础设施层面
提升硬件资源性能—从入口防火墙到后端web server均使用更高性能的硬件资源
多域名—DNS 轮询A记录解析。指向不同IP 访问入口增多
多入口—将A记录解析到多个公 IP入口
多机房—同城+异地容灾
CDN(Content Delivery Network)—基于GSLB(Global Server Load Balance)实现全局负载均衡,如:DNS
就近分配地址,提高效率
1.5.2 业务层面
分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化
分割:基于功能分割大业务为小服务
分布式:对于特殊场景的业务,使用分布式计算
1.6 LB Cluster 负载均衡集群
1.6.1 按实现方式划分
硬件(大公司)
F5 Big-IP
Citrix Netscaler
A10 A10
软件(小公司)
lvs:Linux Virtual Server,阿里四层SLB (Server Load Balance)使用
下四层功能:物理层 数据链路层
nginx:支持七层调度,阿里七层SLB使用Tengine
haproxy:支持七层调度
ats:Apache Traffic Server,yahoo捐助给apache
perlbal:Perl 编写
pound
1.6.2 基于工作的协议层次划分
传输层(通用):DNAT和DPORT
LVS:Linux Virtual Server
nginx:stream
haproxy:mode tcp
应用层(专用):针对特定协议,常称为 proxy server
http:nginx, httpd, haproxy(mode http), …
fastcgi:nginx, httpd, …
mysql:mysql-proxy, …
1.6.3 负载均衡的会话保持
- session sticky:同一用户调度固定服务器
Source IP:LVS sh算法(对某一特定服务而言)
Cookie - session replication:每台服务器拥有全部session
session multicast cluster (内存消耗大) - session server:专门的session服务器
Memcached,Redis (只放session,共享)也存在单点失败,即也要做集群 哨兵机制
1.7 HA 高可用集群实现
keepalived:vrrp协议
Ais:应用接口规范
heartbeat
cman+rgmanager(RHCS)
coresync_pacemaker
2 Linux Virtual Server简介
2.1 LVS介绍
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名 正明), 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现。
LVS 官 :http://www.linuxvirtualserver.org/
LVS 相关术语
VS: Virtual Server,负责调度
RS: Real Server,负责真正提供服务
2.2 LVS工作原理
VS根据请求 文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是内核
级功能,工作在INPUT链的位置,将发往INPUT的流量进行“处理”
范例:查看内核支持LVS
2.3 LVS集群体系架构
2.5 LVS应用场景
2.5.1 音视频大流量场景
动静请求分离,快速稳定交付
游戏业务有很多图片等静态资源需要加载,通过CDN实现全球用户访问静态资源的加速;当用户在游戏
中有互动时,产生的访问流量非常大,此时为了保证互动实时性,需要使用负载均衡进行流量分发
动态请求流量分发
动态请求量大,采用多台云服务器计算处理,并利用负载均衡服务随时进行流量分发
静态请求快速加载
静态内容选择对象存储,接入CDN服务,进一步优化内容分发链路,让内容即刻加载
2.5.3 多层次容灾架构场景
2.6 LVS集群类型中的术语
VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer
RS:Real Server(lvs), upstream server(nginx)上游服务器, backend server(haproxy)
CIP:Client IP
VIP:Virtual serve IP VS外 的IP
DIP:Director IP VS内 的IP
RIP:Real server IP
访问流程:CIP <–> VIP == DIP <–> RIP
3 LVS 工作模式和相关命令
3.1 LVS集群的工作模式
lvs-nat:修改请求 文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址。MAC头的修改
lvs-tun:在原请求IP 文之外新加一个IP首部。
lvs-fullnat:修改请求 文的源和目标IP
3.1.1 LVS的NAT模式
3.1.4 LVS的FULLNAT模式
通过同时修改请求 文的源IP地址和目标IP地址进行转发
CIP –> DIP
VIP –> RIP
fullnat模式特点:
DIP
注意:此类型kernel默认不支持
3.1.5 LVS工作模式总结和比较

lvs-nat与lvs-fullnat:
请求和响应 文都经由Director
lvs-nat:RIP的 关要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP 络,但要能通信
lvs-dr与lvs-tun:
请求 文要经由Director,但响应 文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC 络转发
lvs-tun:通过在原IP 文外封装新IP头实现转发,支持远距离通信
3.2 LVS调试算法
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
分为两种:静态方法和动态方法
3.2.1 静态方法
仅根据算法本身进行调度
1、RR:roundrobin,轮询 不考虑机器的性能好坏,轮询调度
2、WRR:Weighted RR,加权轮询 权重越高,优先级高,调度更多资源给它 优先级高
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发
往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的
请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
3.2.2 动态方法
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
1、LC:least connections 适用于长连接应用
Overhead=activeconns *256+inactiveconns
2、WLC:Weighted LC,默认调度方法
Overhead=(activeconns * 256+inactiveconns)/weight
3、SED:Shortest Expection Delay,初始连接高权重优先
Overhead=(activeconns+1)*256/weight
4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制
到负载轻的RS
3.2.3 内核版本 4.15版本后新增调度算法:
FO和OVF
FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还
未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度。方便调式上下线。
OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调
度到权重值最高的真实服务器,直到其活动连接数量超过权重值位置,之后调度到下一个权重值最高的
真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务
器。一个可用的真实服务器需要同时满足以下条件:
未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
真实服务器当前的活动连接数量小于其权重值
其权重值不为零
3.3LVS 相关软件
3.3.1 程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
3.3.2 ipvsadm 命令
ipvsadm核心功能:
集群服务管理:增、删、改
集群服务的RS管理:增、删、改
查看
ipvsadm 工具用法:
管理集群服务:增、改、删
增、修改:
删除:
service-address:
-t|u|f:
-t: TCP协议的端口,VIP:TCP_PORT
-u: UDP协议的端口,VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc
管理集群上的RS:增、改、删
增、改:
删:
server-address:
rip[:port] 如省略port,不作端口映射
选项:
lvs类型:
-g: gateway, dr类型,默认
-i: ipip, tun类型
-m: masquerade, nat类型
-w weight:权重
清空定义的所有内容:
清空计数器:
查看:
–numeric, -n:以数字形式输出地址和端口
–exact:扩展信息,精确值
–connection,-c:当前IPVS连接输出
–stats:统计信息
–rate :输出速率信息
ipvs规则:
ipvs连接:
保存:建议保存至/etc/sysconfig/ipvsadm
重载:
ipvsadm配置文件:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!