Link

本文是 2016 年初学 vSAN 时的笔记,某些技术细节可能和最新的 vSAN 存在差异,请结合最新的产品文档/特性查看

目录

  1. 支持信息:
  2. 计算及网络资源需求:
  3. 最大及最小限制:
  4. 设计
    1. 仲裁主机设计:
    2. 网络架构设计:
      1. 网络连通:
      2. 带宽设计:
      3. 数据站点和仲裁站点间带宽:
  5. 案例1:
  6. 案例2:

参考文章:VMware灾备与双活VSAN 延展集群带宽设计、VMware HOL 1627实验手册、Virtual san 6.2 Stretched Cluster。 VSAN ROBO Edition

如果发现文中有错误的部分欢迎留言或者发邮件([email protected])告知,文中关于网络描述较少,对网络部分不懂的也可以留言。

VSAN通过策略将每 VM 的数据复制多份(FTT=1为例)写在不同的主机上实现冗余,当一个磁盘或者一台主机挂掉后,数据不会丢失,类似于RAID1。本文简单介绍下VSAN的双活机制,延展集群(Stretched Cluster),它可以将不同地点的 ESXi 主机放置到不同的故障域(Fault Domain)中,确保一个VM的多个副本可以保存在不同地理位置的主机上,实现VSAN双活。

VSAN 延展集群逻辑结构如下:

共需要三个站点:主站点和次站点(数据站点)运行VM并存放VM的数据,仲裁站点不保存VM数据。

主次两个站点的主机必须属于同一个VSAN集群,需要被同一个vCenter管理。

三个站点的主机分别属于三个Fault Domain中,FTT为1,一个 VM 的数据会被写入主、次两个节点保证数据冗余。

支持信息:

  1. vSphere版本 6.0U1 及以上版本(ESXi及vCenter均在此版本以上)。vsphere 6.0U1版本对应的VSAN 版本为6.1。
  2. 同时支持混合阵列以及全闪阵列
  3. 除了主站点,备份站点的ESXi主机外,还需要一个仲裁站点,仲裁 站点可以是物理服务器上的ESXi,也可以是一个witness appliance(OVA)。当使用witness appliance时,不会占用vSphere许可
  4. 仲裁站点如果使用ESXi主机,ESXi主机需要消耗vSphere许可,但是此主机可以用来存放虚拟机
  5. 仲裁主机不能加入VSAN群集,在创建 VSAN stretched Cluster时会要求管理员选择仲裁主机
  6. vSphere License需要为Enterprise版本

计算及网络资源需求:

  1. VMware建议使用大二层加三层路由网络部署VSAN延展集群;两个数据站点间使用大二层网络;数据站点和仲裁站点间使用三层路由连接。
  2. 数据站点与数据站点之间延迟(RTT往返时间)必须小于 5ms,即单向传输延迟小于2.5ms。
  3. 数据站点与数据站点之间带宽需要根据需求来确定,VMware 推荐10G以上。对于分支机构部署的情况,10台以内虚拟机可以使用1G的网络连接。
  4. 数据站点和仲裁站点之间延迟(RTT往返时间)必须小于 200ms,即单向传输延迟小于100ms。在典型的双节点部署(分支结构/远程办公ROBO)场景中,RTT最大支持500ms
  5. 仲裁主机计算资源和ESXi最小资源需求一致,仲裁 主机必须和VSAN数据节点运行同样的ESXi版本
  6. VSAN 网络的 MTU 需要保持一致

最大及最小限制:

  1. 每主机最大虚拟机数:混合/150/主机、全闪/200/主机。VMware建议每个站点预留50%的资源以保证另一个站点全部故障后,所有虚拟机可以恢复。
  2. 延展群集至少需要三台主机,主站点一台ESXi,备份站点一台ESXi,仲裁节点一台主机。此种配置方式叫1+1+1,通常在前面提到的ROBO场景中用到。
  3. 延展群集最大支持31台主机,主站点15台ESXi,备份站点15台ESXi,一个仲裁主机。
  4. 每个延展集群有且只能有一个witness host
  5. FTT 最大为1
  6. Fault Domain最大为3,默认第一个Fault domain为主站点,第二个为次站点,第三个为仲裁 站点

设计

仲裁主机设计:

1、仲裁 主机的作用是保存VM的仲裁组件(witness components)。单个物理磁盘最大支持21000个组件,单个witness主机支持45000个组件。每个仲裁组件大概16MB,所以支持21000个组件大概需要350G的磁盘,支持45000个组件需要3*350G的磁盘。

2、如果使用witness appliance,会在安装向导中会有磁盘相关配置。

3、VMware建议45000个仲裁组件时,使用10G的SSD缓存盘(可以用HDD,将其标记为闪存用);witness appliance也可以不使用SSD,但需要将一个虚拟磁盘标记为SSD。

以下为官方文档中对于witness host的配置需求:

小型环境 (10 个虚拟机以内)

  • 2 vCPUs, 8 GB vRAM
  • 8 GB ESXi 启动盘, 一块 10 GB SSD, 一块 15 GB HDD
  • 最大支持 750 个 witness components

普通环境 ( 500 个虚拟机 )

  • 2 vCPUs, 16 GB vRAM
  • 8 GB ESXi 启动盘, 一块 10 GB SSD, 一块 350 GB HDD
  • 最大支持 22000 个 witness components

大型环境 (多于 500 个虚拟机)

  • 2 vCPUs, 32 GB vRAM
  • 8 GB ESXi 启动盘, 一块 10 GB SSD, 三块 350 GB HDD
  • 最大支持 45000 个 witness components

网络架构设计:

网络连通:

管理网络需要在三个站点间互通(ESXi managemet network);可以使用二层网络或三层路由网络。

VM业务网络需要在两个数据站点之间互通(需要NSX或者物理网络的大二层结构);建议使用大二层,使用三层需要在灾难发生时手动改虚拟机IP地址。

vMotion 需要在两个数据站点间互通(vMotion vmkernel);可以使用二层网络或三层路由网络。

VSAN 网络需要在三个站点间互通(VSAN vmkernel);建议使用大二层。

在某些情况下出于安全考虑,VSAN网络需要和ESXi管理网络物理隔离(ESXi管理使用vmk0,NIC0;VSAN使用vmk1,NIC1),而默认系统只有一个TCP/IP栈,这样只能设置一个默认路由,其结果会导致两个不同网段的站点间VSAN网络可能不通(因为VSAN网络的网关也指向了管理网络,VSAN和管理网络又是物理隔离)。

解决上述问题有两种办法,一种是使用大二层网络结构,但是三个站点间都是大二层又一个坏处,就是当 Switch1 和 Switch2 之间网络中断后,Site1 会通过 Site3 将数据发给 Site2。

解决此问题的方法就是:只在两个数据站点间部署大二层,数据站点和仲裁站点间跑三层路由。

另一种解决方法是手动修改ESXi的路由,让VSAN集群中所有主机可以相互通信(使用esxcli network ip route 或esxcfg-route命令修改路由,或者在vcenter的TCP/IP stack中可以修改 )

更多网络相关设置,请查看VMware-Virtual-SAN-6.2-Stretched-Cluster-Guide

带宽设计:

通常读操作是本地进行,因此我们先只考虑占用站点间写操作。

数据站点间带宽计算公式为:

B(带宽) = Wb md * mr *(写带宽 (Wb) * 数据乘数 (md) * 再同步乘数 (mr))

其中,数据乘数 md 由 VSAN 元数据及相关操作所占用的带宽计算出。VMware建议将md设置为1.4。

再同步乘数mr用来计算数据站点之间再同步事件的开销。VMware建议将mr设置为1.25(也即额外增加25%)。

再同步乘数和数据乘数其实都是跨站点写数据的额外开销。这两个数值使用VSAN推荐值即可。

案例1:

一个 6 节点的 VSAN环境(3+3+1):

  • 负载为 35000 IOPS
  • 写 IOPS 为 10000
  • 写入操作块大小为 4KB

( 以上需求需要40MB/s,或者 320Mbps 带宽)

使用公式计算:B = 320 Mbps * 1.4 * 1.25 = 560 Mbps。

因此站点间需要至少 560Mbps的带宽。

案例2:

一个 20 节点的 VSAN环境(10+10+1),VDI场景:

  • 负载为 100000 IOPS
  • 70% 为读操作,30%为写操作,因此写 IOPS 为 70000
  • 写入操作块大小为 4KB

( 以上需求需要280MB/s,或者 2.24Gbps 带宽)

使用公式计算:B = 280 Mbps * 1.4 * 1.25 = 3920 Mbps。

因此站点间需要至少 3920Mbps(即3.92Gbps)的带宽。

从上述两个案例可以看出,实际设计需要去统计客户业务 I/O 需求,不过 VMware 觉得 10G 网络基本满足大部分场景。

当本地读不可用时,例如本地一个磁盘故障了,上面运行的虚拟机则需要从另一个站点读取数据(vsan延展集群FTT=1,一个VM数据只写两份到两个数据站点),假设有5个VM,共1000 IOPS(4K),则需要40MBps带宽,即320Mbps带宽。(此处原文并不准确。原文提到读操作需要的带宽要和写操作相加,但是网络是双工的,写操作是主站点往次站点写,但是读操作应该是次站点往主站点发,因此320Mbps这个不需要考虑,通常租用线路上下行带宽一样,而写操作带宽远远大于上述读操作的带宽)

数据站点和仲裁站点间带宽:

仲裁站点不保存虚拟机数据,只保存component metadata,带宽需求小很多。

VSAN 上虚拟机的数据由多个对象(object)组成,因此会产生多个组件(component),组件数的计算方式如下:

每VM组件数=(FTT+1) * 条带数 * VM对象数

VM 对象可能包含以下几种:

  • VM namespace(VM目录)
  • VMDK 文件
  • vmSwap 交换文件(如果VM是开机的)
  • 快照

仲裁站点与数据站点之间的带宽计算公式如下:

带宽 = 1138 B * 组件数 / 5s

1138 B 是当主站点离线以后,仲裁站点需要向backup agent发送数据(Payload),以及表示主站点已经down的元数据之和。当主站点离线以后,仲裁站点与数据站点之间的带宽应足以让集群在5秒内完成所有权的变更。

案例1:

虚拟机信息如下:

  • 3 个对象 {VM namespace、vmdk (255GB以下)、vmSwap)
  • FTT=1
  • 条带数为1

共 166 个VM,共包含 996 个元素。按照 1000 个对象计算(Byte需要乘以8变成bit):

带宽 = 1138 B * 8 * 1000 / 5s = 1820800 bps = 1.82 Mbps

Vmware 建议再加上 10% 的预留带宽,因此:

带宽 + 10% = 1.82 Mbps + 182 Kbps = 2.00 Mbps

** **

案例2:

虚拟机信息如下:

    • 3 个对象 {VM namespace、 vmdk (255GB以下)、 vmSwap)
    • FTT=1
    • 条带数为2

共 1500个VM,共包含 18000 个元素:

带宽 = 1138 B * 8 * 18000 / 5s = 32774400 bps = 32.78 Mbps

带宽 + 10% = 32.78 Mbps + 3.28 Mbps = 36.05 Mbps