本文是 2016 年初学 vSAN 时的笔记,某些技术细节可能和最新的 vSAN 存在差异,请结合最新的产品文档/特性查看
目录
参考文章: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 的数据会被写入主、次两个节点保证数据冗余。
支持信息:
- vSphere版本 6.0U1 及以上版本(ESXi及vCenter均在此版本以上)。vsphere 6.0U1版本对应的VSAN 版本为6.1。
- 同时支持混合阵列以及全闪阵列
- 除了主站点,备份站点的ESXi主机外,还需要一个仲裁站点,仲裁 站点可以是物理服务器上的ESXi,也可以是一个witness appliance(OVA)。当使用witness appliance时,不会占用vSphere许可
- 仲裁站点如果使用ESXi主机,ESXi主机需要消耗vSphere许可,但是此主机可以用来存放虚拟机
- 仲裁主机不能加入VSAN群集,在创建 VSAN stretched Cluster时会要求管理员选择仲裁主机
- vSphere License需要为Enterprise版本
计算及网络资源需求:
- VMware建议使用大二层加三层路由网络部署VSAN延展集群;两个数据站点间使用大二层网络;数据站点和仲裁站点间使用三层路由连接。
- 数据站点与数据站点之间延迟(RTT往返时间)必须小于 5ms,即单向传输延迟小于2.5ms。
- 数据站点与数据站点之间带宽需要根据需求来确定,VMware 推荐10G以上。对于分支机构部署的情况,10台以内虚拟机可以使用1G的网络连接。
- 数据站点和仲裁站点之间延迟(RTT往返时间)必须小于 200ms,即单向传输延迟小于100ms。在典型的双节点部署(分支结构/远程办公ROBO)场景中,RTT最大支持500ms
- 仲裁主机计算资源和ESXi最小资源需求一致,仲裁 主机必须和VSAN数据节点运行同样的ESXi版本
- VSAN 网络的 MTU 需要保持一致
最大及最小限制:
- 每主机最大虚拟机数:混合/150/主机、全闪/200/主机。VMware建议每个站点预留50%的资源以保证另一个站点全部故障后,所有虚拟机可以恢复。
- 延展群集至少需要三台主机,主站点一台ESXi,备份站点一台ESXi,仲裁节点一台主机。此种配置方式叫1+1+1,通常在前面提到的ROBO场景中用到。
- 延展群集最大支持31台主机,主站点15台ESXi,备份站点15台ESXi,一个仲裁主机。
- 每个延展集群有且只能有一个witness host
- FTT 最大为1
- 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