集群概述及分类

一、集群的原理及作用

1、什么是集群?
简单来讲集群就是一组协同工作的服务器。

2、集群化的目的?
1)高并发
2)更稳定,即鲁棒性高
3)时效性高

3、提升服务器性能的方式
3.1 垂直拓展
更换更强大的软/硬件
缺点:
1)软硬件有上限,瓶颈明显。
首先,软件如nginx不可能将当前的资源全部占用掉转化成并发量,其次操作系统本身有所限制,单个进程理论上最多支持65535个线程,换句话说单个进程最大并发量为65535个,再乘以cpu的核心数就是理论上单台服务器能支撑的最大并发量。一个限制是应用程序能否把当前的资源吃透,另一个就是服务器的资源能不能继续提升。
2)升级或更换服务器时,服务器会宕机,导致服务访问中断。
优点:
1)技术实现难度低
2)网络拓扑结构无需更改(最大的优点)

3.2 水平拓展
增加服务器数量
优点:
1)软硬件上限高
2)添加节点服务不会中断
3)性价比较高
缺点
1)技术实现难度较高

3.3 水平拓展的常见实现方案
1)第一代水平拓展实现方案
早些年前几乎所有的负载均衡都是通过DNS服务器实现的,通过在DNS服务器上对同一个域名添加多个不同的A记录,使用rr轮询机制将域名解析至不同ip的服务器。
后来由于缓存服务器记录了域名解析结果,影响DNS服务器的访问分配平衡,加上DNS服务器只有在使用域名访问时才能实现负载均衡,使用面很窄,已淘汰。

2)第二代水平拓展实现方案
基本架构由Agent端(前端组件),真实服务器,共享存储3部分组成。
如Nginx负载均衡时,Apache作为web访问负载服务器,MySQL作为数据库,一些基于用户的元数据一般都记录到数据库中,如用户名、密码等。另一些数据,如视屏、用户头像一般都存放在共享存储(SHARE)中。

二、常见的集群简介

1、负载均衡集群(LBC)
1.1 什么是负载均衡集群?
LBC负载均衡集群,就是将单台服务器的压力分担至不同服务器的节点共同承接。
结构:前端组件(负载调度器)、真实服务器、共享存储

1.2 思考:当集群中web服务器访问压力过大时,我们可以考虑扩容,即增加真实服务器节点来解决问题。但是,若Nginx负载均衡服务器压力过大时,该如何解决?
方案一:提升前端组件,负载调度器的性能。
方案二:将不同业务分摊至不同集群。
方案三:增加一些缓存服务器,缓存到不同的节点,提供数据支持。如斗鱼使用的CDN技术,由各个城市节点缓存数据提供数据支持。

1.3 负载调度器分类
1)按软/硬件来区分
软件:amoeba、Nginx、LVS、Ha-Proxy(linux-HA)
硬件:ROSE、安瑞科技、F5

2)按OSI七层模型来区分
OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
能实现负载调度器的层级为:数据链路层、传输层、应用层

1》在第二层(数据链路层)实现负载调度器
实现负载调度器功能的硬件工具:F5
原理:不同的公共网线连接不同的网卡,根据用户使用的公共网络类型来通过不同的网卡发送用户数据包实现负载调度器的功能,目前支持此功能的硬件如F5,还没有公开的软件能支持。
实例:如目前国内网络连通性较差,用户访问万维网时,由于不同网络供应商的网络在各个城市互相没有做汇聚,导致数据必须发送到一些核心节点上才能被转发,我们可以通过在二层网络使用负载调度器对来自不同供应商公共网络的访问请求按照访问者的ip区分其使用的公共网络类型,再分摊到在各自公共网络的万维网服务器,达到始终在同一网络完成专线访问,提高访问效率。

2》在第四层(传输层)实现负载调度器
实现负载调度器功能的工具: LVS(使用最多)、Ha-Proxy(linux-HA)Nginx(新版)
原理:只完成了一次TCP连接,客户端与真实服务器间。
流程:客户端将访问请求发送至负载调度器,负载调度器直接将请求转发给真实服务器,真实服务器收到请求后将查到的数据发送给负载调度器,负载调度器将数据直接转发给客户端。相当于负载调取器只负责告诉客户端真实服务器位置,让客户端自己去找真实服务器拿数据。
安全性:不可以拦截SYN攻击,真实服务器易受到来自客户端的SYN攻击。
范围性:由于负载调度器不需要和客户端与真实服务器建立完整的TCP连接,所以只要是C/S结构,根据TCP UDP 开发的服务体系都可以。
并发能力:四层大于七层(根据TCP连接次数和工作流程就可以看出)

3》在第七层(应用层)实现负载调度器
实现负载调度器功能的工具:Nginx(使用最多)Ha-Proxy(linux-HA)
提示:若要使用域名主机名的方式实现负载均衡调度器,只能在第7层完成,只有在第7层才能识别。
原理:完成2次完整的TCP连接,第一次是客户端与负载调度器,第二次是负载调度器与真实服务器。
流程:客户端将访问请求发送至负载调度器,负载调度器收到请求报文后拆解,然后重新封装,封装好后再将新请求报文发送给真实服务器,真实服务器收到请求后将查到的数据发送给负载调度器,负载调度器再将数据发给客户端。相当于负载调度器帮助客户端去真实服务器拿数据。
安全性:可以拦截SYN攻击。
范围性:由于负载调度器需要同时和客户端与真实服务器建立完整的TCP连接,所以负载调度器只能负载自己识别的协议模式。
并发能力:四层大于七层

关于第四层与第七层的总结:
集群并发能力不强,安全性要求高,使用七层负载
集群并发能力不强,但是必须识别域名,使用七层负载
集群并发能力强,不管安全性要求如何,使用四层负载
集群并发能力强,安全性要求高,使用四七层负载

2、高可用集群(HAC)
2.1 定义
尽可能提高服务器可用性的集群。
可用性标准:99%(及格线,相当于服务器一年的宕机总时长约3.65天)
99.9%
99.99%
99.999%(目前行业最高标准,相当于服务器一年的宕机总时长约315秒)
提示:随着标准提高,实现成本(造价)呈指数上升。
2.2 目的
避免因负载调度器的单节点故障导致整个集群瘫痪。
2.3 原理
心跳检测。
2台功能相同的服务器,一台作为主服务器接收用户访问请求并分配压力给真实服务器,另一台作为热备服务器持续向主服务器发送心跳检测。一旦热备服务器发现主服务器宕机,就主动接替主服务器的工作。
2.4 高可用服务器对切换ip的方式
1)网卡上开启子接口,配置与主服务器相同的ip,配合脚本实现;
2)使用VRRP路由冗余协议实现。
2.5 高可用集群的缺点
资源利用率低
2.6 高可用服务器对脑分裂问题
1)什么是脑分裂?
由于某些原因,导致两台高可用服务器对在指定时间内,无法检测到对方的心跳消息,导致他们各自取得资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致一个IP或服务在两端同时存在而发生冲突,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两端数据不一致或造成数据丢失,这种情况被称为脑分裂。

2)导致脑分裂可能的原因
1》高可用服务器对之间心跳线链路故障,导致无法正常通信。
2》心跳线坏了(包括断了,老化)。
3》网卡及相关驱动坏了,IP配置及冲突问题(网卡直连)。
4》心跳线间连接的设备故障(网卡及交换机)。
5》采用仲裁的方案,仲裁的机器出问题。
6》高可用服务器对上开启了iptables防火墙阻挡了心跳消息传输。
7》高可用服务器对上心跳网卡地址等信息配置不正确,导致发送心跳失败。
8》其他服务配置不当等原因,如心跳方式不同,心跳广播冲突,软件BUG等。
9》keepalived配置里同一VRRP示例,若virtual_router_id参数两端配置不一致。

3)解决方案
1》冗余心跳线
2》热备服务器多次间歇性探测,确保探测结果准确
3》热备服务器通过网络命令连接控制电源交换机断掉主服务器电源

2.7 高可用集群实现方案
软件:heartbeat(linux-ha)、Keepalived
硬件:ROSE、安瑞科技、F5

3、高性能运算集群(HPC)
3.1 定义
提供单台计算机提供不了的运算能力。
3.2 原理
将要处理的某一个数据拆分成n个片段,分摊给n个计算机,每个计算机处理1个片段,最后将处理的结果汇总在一起得到最终结果。
3.3 特点
专用性强,使用面较窄
3.4 一个问题看懂高性能运算集群与负载均衡集群的区别
eg:一个任务A,理论上可以拆分为10个a,现在有11台性能相同的服务器,问题如下:
如果是构建LBC,则处理1个A,共2个节点参与运算,处理了0个a;
如果是构建HPC,则处理1个A,共11个节点参与运算,处理了10个a。

猜你喜欢

转载自blog.csdn.net/weixin_43455673/article/details/112251392