作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.集群类型
1>.负载均衡(Load Balance,简称LB)
目前有以下三代开源负载均衡软件:
LVS(tcp)
HAProxy(tcp/http)
Nginx(http/upstream,stream/upstream)
2>.高可用性(High Availability,简称HA)
高可用性的集群主要解决了一个单点故障(Single Point of Failure,简称SPoF)的问题。
3>.高性能集群(High Performance Computing,简称HPC)
高性能集群一般不会在民营企业或者上市公司使用,高性能集群一般用在国家的重要单位,用来计算数据量非常大的场景,比如国防,气象统计,模拟导弹的运行轨迹等。因此一般的民营企业压根也不会耗资购买如此高性能的设备(这需要国家特有的CPU,操作系统等。说白了这已经不是钱的问题了,尽管你再有钱也买不到这些核心技术)。
如下图所示,在2017年之前(https://www.top500.org/lists/2017/11/),我们中华人民共和国计算机位列与世界第一,可惜,从2018年起就被美国占据第一了。
博主推荐阅读:
https://www.top500.org/
二.系统可用性
可能有的运行小伙伴进入公司需要签一个服务水平协议(Service-Level Agreement,简称SLA),这个协议可能会直接和绩效挂钩,比如公司的工资是由"基本工资 + 绩效",如果你所维护的服务出现了问题,在规定的时间内没有恢复,可能公司会拿这个说事来扣你的绩效,这样你到账的薪资也会减少。
那怎么计算这个SLA呢?其实就是将每小时转换成分钟(60 * 24),再按月(比如一个月30天)统计出总时间,假如你们公司要求你的系统服务可用性在99.95%之上,那么你每个月可以出现故障的时间如下图所示。
大多数服务器重启一次大概在5分钟左右甚至有的服务器会更耗费时间(此处我们不谈论重启后操作系统起不来的情况哈),有的服务就算重启服务器服务依旧是无法立即恢复(比如Hadoop集群)。因此光靠重启不是解决问题的根本办法,为了提高服务的可用性,我们生产环境最好对服务做高可用,避免单点故障,从而提高SLA的值。
三.系统故障
硬件故障:
设计缺陷(比如某手机更换了某种材质后客户使用手机一段时间手机就开始"发烧",生产环境中服务器硬件涉及故障相对较少,可以选择大品牌,比如dell服务器)
wear out(损耗,比如三年以上的机械硬盘很很大可能性会坏掉,如果磁盘写入次数较频繁也会降低磁盘寿命)
自然灾害(比如机房断电,火灾,战争之类的,因此需要做异地灾备)
……
软件故障:
设计缺陷(比如系统故障,软件故障等)
四.提升系统高用性的解决方案之降低MTTR(平均故障时间)
解决方案:
建立冗余机制,常见的冗余机制如下所示:
active/passive(主/备,比如Hadoop的namenode角色active/standby)
active --> HEARTBEAT(心跳检测机制) --> passive
active/active(双主,比如zookeeper)
active <--> HEARTBEAT(心跳检测机制) <--> active
五.高可用的是"服务"
HA nginx service:
为每个nginx节点配置一个vip,每个nginx要实现心跳机制,当一个节点挂掉后另一个节点能立马响应服务,而且这两个nginx的数据应该是共享的(shared storage)。
资源:组成一个高可用服务的"组件"
(1)passive node的数量
(2)资源切换
六.shared storage
NAS(Network Attached Storage):
网络附加存储,基于网络(TCP/IP)的共享文件系统,典型的开源网络共享服务如NFS,SAMBA。
SAN(Storage Area Network):
存储区域网络,基于网络的块级别的共享,一般都是光纤网络(需要单独购买HBA卡,HBA卡的接口光纤接口),其性能要比NAS更快。
七.网络分区(Network partition)
quorum:法定人数
with quorum:> total/2
可用的节点数量要大于总集群数量的一半,一半以上的节点要存活并提供正常的服务,比如一个集群由3个节点,那么最少得有2台节点可用提供正常服务。
without quorum: <= total/2
故障的机器要小于等于总集群数量的一半,比如一个集群有3个节点组成,那么最多有一个节点出现故障。
隔离设备:fence(管理服务器的状态,以防止服务出现脑裂的情况,一般情况下该设备得单独购买)
node:STONITH = Shooting The Other Node In The Head(强制下线/断电),官方连接:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/high_availability_add-on_reference/s1-unfence-haar
八.双节点集群(TWO nodes Cluster)
辅助设备:
ping node(可用自定义脚本实现)
quorum disk(仲裁设备,需要花钱购买)
Failover:
故障切换,即某资源的主节点故障时,将资源转移至其它节点的操作。
Failback:
故障移回,即某资源的主节点故障后重新修改上线后,将之前已转移至其它节点的资源重新切回的过程。
九.HA Cluster实现方案
AIS(ApplicaitonInterface Specification)
应用程序接口规范,比较常见的有以下几种方案:
RHCS:Red Hat Cluster Suite
红帽集群套件
heartbeat:
基于心跳监测实现服务高可用
pacemaker+corosync:
资源管理与故障转移
vrrp(Virtual Router Redundancy Protocol):
虚拟路由冗余协议,解决静态网关单点风险
软件层:
keepalived
物理层:
路由器、三层交换机
十.高可用集群-后端存储
JBOD(Just a Bunch Of Disks)不是标准的RAID等级,它通常用来表示一个没有控制软件提供协调控制的磁盘集合,JBOD 将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘,JBOD的数据存放机制是由第一块磁盘开始按顺序往后存储,当前磁盘存储空间用完后,再依次往后面的磁盘存储数据,JBOD 存储性能完全等同于单块磁盘,而且也不提供数据安全保护,它只是简单提供一种扩展存储空间的机制,JBOD 可用存储容量等于所有成员磁盘的存储空间之和。