对一个大规模集群的存储系统而言,服务器宕机、交换机失效是常态,架构师必须为这些故障发生时,保证系统依然可用而进行系统设计。在系统架构层面,保证高可用的主要手段是冗余:服务器热备,数据多份存储。使整个集群在部分机器故障的情况下可以进行灵活的失效转移,保证系统整体依然可用,数据持久可靠。系统架构如下图所示:
系统整体上课分为如下三个部分。
应用程序服务器:它们是存储系统的客户,对系统发起数据操作请求。
数据存储服务器:它们是存储系统的核心,负责存储数据、响应应用服务器的数据操作请求。
管理中心服务器:这是一个由两台机器组成的主-主热备的小规模服务器集群,主要负责集群管理,对数据存储集群进行健康心跳检测;集群扩容、故障恢复管理;对应用程序服务器提供集群地址配置信息服务等。
其中,数据存储服务器又根据应用的可用性级别设置数据复制份数,即每个数据实际物理存储的副本数目,副本份数越多,可用性级别越高,当然需要的服务器也越多。为了便于管理和访问数据的多个副本,将存储服务器划分为多个序列,数据的多个副本存储在不同的序列中。
应用服务器写入数据时,根据集群配置和应用可用性级别使用路由算法在每个序列中计算得到一台服务器,然后同时并发写入这些服务器中;应用服务器读取数据时,只需要随机选择一个序列,根据相同路由算法计算得到服务器编号和地址,即可读取。通常情况下,系统最少写入的副本份数是两份。
在正常状态下,存储服务器集群中的服务器互不感知,不进行任何通信;应用服务器也只在启动时从管理中心服务器获取存储服务器集群信息,除非集群信息发生变化(故障、扩容),否则应用服务器不会和管理中心服务器通信。一般而言,服务器之间通信越少,就越少依赖,发生故障时互相影响就越少,集群的可用性就越高。