超融合架构

vSAN 延伸集群 (Stretched Cluster)

延伸集群是 vSAN 特有的概念,它是把一个普通的单站点 (site) 集群延伸 (Stretch) 到了另一个站点,形成一个横跨两个站点的集群,称之为延伸集群 (Stretched Cluster)。延伸集群具有普通集群所有的 HA 保护功能,能够跨站点地保存数据副本,它以较低的成本实现了跨站点的灾备解决方案;并且位于两个站点内的服务器都可以是活动的,从而实现了双活数据中心。传统的灾备方案和双活数据中心解决方案都需要另外采购昂贵的硬件和软件,实现成本很高,往往只有金融、电信等一些大型企业才会考虑。vSAN 延伸集群利用普通的 x86 服务器加上 vSphere / vSAN 软件就可以实现,大大降低了实施成本,成为任何企业都能够负担得起的灾备和双活解决方案。

vSAN 延伸集群的架构

延伸集群的架构如下图所示,主要由站点1、站点2和见证节点三部分组成,站点1和站点2是两个不同的数据中心,分属2个故障域。见证节点采用 Quorum 算法来决定故障发生时,由哪一个站点来继续提供 vSAN 集群的服务,Quorum 的原意是一组成员为了行使业务职责而必须达到的法定人数。

  • 在延伸集群中,任何一个站点发生故障,剩下的站点就会和见证节点一起组成新的 vSAN 集群。
  • 如果是站点1和站点2之间的网络发生了故障,站点1和站点2都会认为是对方发生了故障,而试图重组 vSAN 集群,这种情况称之为脑裂 (Split-brain)。这时候由见证节点来决定跟哪个站点结合,重组成新的 vSAN 集群来继续提供服务。被排除的站点上的虚机会被全部停掉,它们会在存活下来的站点上启动起来。

见证节点 (witness node) 可以是一台物理服务器,也可以由一台虚机来担任,vSAN 已经提供了现成的 Witness Appliance 来部署见证虚机。见证节点必须部署在第三个故障域,一般是部署在云端,或是在另外一个数据中心。

搭建延伸集群并没有什么特殊要求,只要站点1、站点2和见证节点之间存在层3的网络连接就可以了;为了保证延伸集群的整体性能,建议:站点间的 vSAN 数据网络往返时延 RTT (Round-Trip Time) 不超过5毫秒, 网络带宽速度为 10Gbps。大家有可能在其他文档上看到过 vSAN 延伸集群要求站点之间的网络必须是层2的这一要求,这是因为以前的 vSAN 集群内部是采用组播 (multicast) 方式来进行集群内通信;vSAN 6.6 开始已经改成了单播 (unicast) 方式,所以不再有层2网络这一硬性要求。

延伸集群中的数据保护

对于下面介绍的这些存储策略参数,“vSAN 存储策略”中有详细介绍,大家可以先阅读一下。

首选故障域 (Preferred Fault Domain) 和辅助故障域 (Secondary Fault Domain)

缺省的,物理服务器被定义为 vSAN 集群的隐式故障域 (Implicit Fault Domain) ,只要数据有多个副本保存在多台服务器上,就能够预防单台服务器故障而造成的数据丢失。在延伸集群中又定义了一个显式故障域 (Explicit Fault Domain) —— 站点,只要数据副本同时保存在两个站点,就能够预防单个站点故障而造成的数据丢失。在延伸集群中两个站点分别对应一个故障域,分别叫作首选故障域 (Preferred Fault Domain) 和辅助故障域 (Secondary Fault Domain),这是 vSAN 预先定义好的名字,用于把延伸集群中的服务器根据所处的站点分成两组。

PFTT 和 SFTT

FTT (Failure to Tolerate) 是定义数据保护等级的一个重要参数,FTT = 1 意味着可以忍受一个节点的故障;因为延伸集群中有隐式和显式两种故障域,所以也相应地定义了两种 FTT 参数:

  • PFTT (Primary FTT):用于指定跨站点的数据保护,设置为1表示需要跨站点保存数据副本,设置为0表示不需要跨站点数据保护。
  • SFTT (Secondary FTT):用于指定站点内的数据保护,SFTT 等同于普通集群中 FTT 的概念,表示在站点内最多可以忍受多少台服务器的故障而不丢失数据。

FTM (Failure Tolerance Method)

跟故障域和 FTT 紧密相关的另一个参数是数据保护方法 FTM (Failure Tolerance Method),FTM 也定义了数据布局的方式,vSAN 有以下两种 FTM:

  • Raid-1:数据镜像 (Mirroring),通过保存数据的多个副本来实现数据保护。
  • Raid-5/6:也称之为纠删码 (Erasure Coding),工作原理跟传统的 Raid 5/6 类似,只不过传统的 Raid 5/6 是把数据保存在同一台服务器的多块硬盘上,vSAN 是把数据保存在多台服务器上。

数据保护策略是通过存储策略 (Storage Policy) 来指定的,我们可以通过 FTM、PFTT 和 SFTT 这些参数的设置来定义出不同等级的数据保护策略,例如:

  • 不需要跨站点数据保护,只需要本地数据保护:PFTT = 0 (不需要忍受站点级故障),SFTT = 1 (需要忍受站点内的1台服务器故障);
  • 需要跨站点数据保护,不需要本地数据保护:PFTT = 1 (需要忍受站点级故障),SFTT = 0 (不需要忍受站点内的服务器故障);
  • 需要跨站点数据保护,也需要本地数据保护:PFTT = 1 (需要忍受站点级故障),SFTT = 1 (需要忍受站点内的1台服务器故障)。

定义好存储策略后,只需要在创建虚机时选用不同的存储策略就可以起到相应的数据保护等级,关键应用当然要选择本地和跨站点的双重数据保护,而一些非关键应用只需要选择本地数据保护策略就足够了。值得一提的是,虚机的存储策略是可以修改的,虚机创建后如果改变数据保护计划的话,也可以更改虚机的存储策略,vSAN 会根据更新后的策略来调整数据存储布局,以实现相应的保护等级。

延伸集群的演示

下面请大家看一段 vSAN 延伸集群的演示视频 (提示:请选择视频下方的“高清 720P”选项来观看)。

第一步:配置 vSAN 延伸集群

把8台服务器配置成一个延伸集群,分在两个故障域里,并且指定另一台单独的服务器作为见证节点。

第二步:配置存储策略

创建3条存储策略,分别对应是否需要跨站点和站点内保护的三种组合:

  • “Stretched VM – No local protection”:PFTT = 1,SFTT = 0,跨站点保护的数据保护方法就是镜像,所以针对 PFTT 不用选择 FTM。
  • “Stretched VM – R5 Locally”:PFTT = 1,SFTT = 1,FTM = Raid-5/6。
  • “Not Stretched – Preferred Site”:PFTT = 0,SFTT = 1,FTM = Raid-5/6,Affinity = Preferred Fault Domain,因为虚机只存在于一个站点,所以这条策略需要一条存储规则来确定存放在哪一个站点,Affinity (亲和、密切) 参数就是起这个作用。

第三步:创建虚机

创建3个虚机来分别应用上面定义的三种存储策略,并且检查虚机对应的存储设备映射,看看所设的存储策略是否生效。

  • 虚机”Stretched + R5″:使用了”Stretched VM – R5 Locally”存储策略;
  • 虚机”Stretched + No local protection”:使用了”Stretched VM – No local protection”策略;
  • 虚机”Not Stretched”:在创建时故意设置了错误的存储策略 “Stretched VM – No local protection”,稍后再把虚机的存储策略改为“Not Stretched – Preferred Site”。