计算高可用的主要设计目标是当出现部分硬件损坏时,计算任务能够继续正常运行,因此计算高可用的本质是通过冗余来规避部分故障的风险。关键点如下两点:
-
哪些服务器可以执行任务 第一种方式,每个服务器都可以执行任务,例如常见的网站访问; 第二种方式,只有特定的服务器(主机)可以执行任务,如zookeeper的leader才能处理写请求; -
任务如何重新执行 第一种策略是对于已经分配的任务即使执行失败也不做任何处理,系统只需要保证新的任务能够分配到其他非故障服务器上执行即可; 第二种策略是设计一个任务管理器来管理需要执行的计算任务,服务器执行完任务后,需要向任务管理器反馈任务执行结果,任务管理器根据任务执行结果来决定是否需要将任务重新分配到另外的服务器上执行;
任务分配器是一个逻辑的概念,并不一定要求系统存在一个独立的任务分配器模块
主备
主机执行所有计算任务,如果主机故障不能恢复,则需人工升级备机为主机,并添加新的备机。 根据备机状态的不同,主备架构又可以细分为冷备架构和温备架构: 冷备:备机上的程序包和配置文件都准备好,但备机上的业务系统没有启动(注意:备机的服务器是启动的),主机故障后,需要人工手工将备机的业务系统启动,并将任务分配器的任务请求切换发送给备机 温备:备机上的业务系统已经启动,只是不对外提供服务,主机故障后,人工只需要将任务分配器的任务请求切换发送到备机即可。
冷备可以节省一定的能源,但温备能够大大减少手工操作时间,因此一般情况下推荐用温备的方式。
优点就是简单,主备机之间不需要进行交互,状态判断和切换操作由人工执行,系统实现很简单。 缺点正好也体现在人工操作这点上,因为人工操作的时间不可控,而且手工操作过程中容易出错。
主备架构比较适合内部管理系统、后台管理系统这类使用人数不多、使用频率不高的业务,不太适合在线的业务。
主从
任务分配器需要将任务进行分类,确定哪些任务可以发送给主机执行,哪些任务可以发送给备机执行 主机故障不可恢复时,需要人工介入,升级从机接受任务A并添加从机接受任务B或者直接新增主机接受任务A。
优点:主从架构的从机也执行任务,发挥了从机的硬件性能; 缺点:主从架构需要将任务分类,任务分配器会复杂一些;
集群
上述的主备或者主从都需要人工介入切换,但存在人工操作效率低、容易出错、不能及时处理故障等问题,在可用性要求更加严格的场景中,我们需要系统能够自动完成切换操作,这就是高可用集群方案。
根据集群中服务器节点角色的不同,可以分为两类:
- 对称集群:集群中每个服务器的角色都是一样的,都可以执行所有任务;
- 非对称集群:集群中的服务器分为多个不同的角色,不同的角色执行不同的任务,例如最常见的 master-slave角色;
存储高可用集群把双机架构和集群架构进行了区分;而在计算高可用集群架构中,2 台服务器的集群和多台服务器的集群,在设计上没有本质区别。
对称集群
对称集群更通俗的叫法是负载均衡集群 负载均衡集群的设计关键点在于两点:
- 任务分配器需要选取分配策略;
- 任务分配器需要检测服务器状态;
任务分配策略比较简单,轮询和随机基本就够了。
状态检测稍微复杂一些,既要检测服务器的状态,例如服务器是否宕机、网络是否正常等;同时还要检测任务的执行状态,例如任务是否卡死、是否执行时间过长等。常用的做法是任务分配器和服务器之间通过心跳来传递信息,包括服务器信息和任务信息,然后根据实际情况来确定状态判断条件。
非对称集群
非对称集群中不同服务器的角色是不同的,不同角色的服务器承担不同的职责。 非对称集群相比负载均衡集群,设计复杂度主要体现在两个方面:
- 任务分配策略更加复杂:需要将任务划分为不同类型并分配给不同角色的集群节点;
- 角色分配策略实现比较复杂:例如,可能需要使用 ZAB、Raft 这类复杂的算法来实现 Leader 的选举;
--------《极客课程》? 学习笔记
|