你有我有全都有——Azure Shared Disk

  云原生是一个美好的希望,但对于传统企业大量的传统应用,lift & shift才是初期上云的最快、业务影响最小的方式,然后再逐步做面对云架构的优化。
  lift & shift需要云端和企业本地类似的it架构,而在传统架构广泛使用的共享磁盘一直很难在云端实现。虽然云端有smb、nfs等共享空间的方式,但很多块级应用例如oracle rac等无法用共享空间。虽然有一些第三方的虚拟存储控制器解决方案,但性能和稳定性都很难满足要求,而且有额外的成本。
  近期,Azure推出了Shared Disk内测,解决了云端共享磁盘的问题,本文就通过搭建Windows Server故障转移集群的方式测试Shared Disk。

Azure Shared Disk简介

20200410补充,美西Region开始Ultra Shared disks preview
  最早 Azure CTO Mark Russinovich在2018 Tech Ready介绍Ultra SSD时,讲到Shared Disk是Ultra SSD的一个重要功能,可以挂载到多台VM,支持一写多读。
  经过漫长的等待,终于开始内测,和最初说法不一样,内测首先支持Premium SSD,支持多读多写(使用 SCSI PR 建立仲裁并读取/写入磁盘)磁盘参数多了一项maxShares,指定同一块磁盘可以最多挂载到几台VM。对不同容量磁盘,maxShares最大值不一样:
-w550

  当一块磁盘属于多台VM时,IOPS和带宽之和不超过该磁盘的上限。
  在内测阶段,Shared Disk有如下限制:

  • 目前仅适用于高级 SSD。
  • 目前仅在美国中西部地区得到支持。
  • 共享磁盘的所有虚拟机都必须部署在同一接近放置组中。
  • 只能在数据磁盘上启用,不能在 OS 磁盘上启用。
  • 只有基本磁盘可用于某些版本的 Windows 服务器故障转移群集。
  • 只读主机缓存不适用于具有maxShares>1的高级 SSD。
  • 可用性集和虚拟机规模集只能与设置为 1FaultDomainCount一起使用。
  • Azure 备份和 Azure 站点恢复支持尚不可用。

Azure Shared Disk测试

测试环境

  本次测试架构如下:
˛-w573

  此架构中包含3台VM,均为Windows Server 2016,连接至ClusterVNet(192.168.0.0/16)中的ClusterSubnet(192.168.1.0/24):

  • AD:用作域控和DNS,ip配置192.168.1.4,DNS后缀cluster.lab
  • vm01及vm02:Cluster成员,ip配置192.168.1.5及192.168.1.6,DNS指向192.168.1.4;加入cluster.lab域;连接至名为ClusterDisk的Azure Shared Disk;使用Azure Storage Account作为仲裁(云见证);同属于名为ClusterAVSet的AV set
  • Cluster IP:配置为192.168.1.11
      严格来说,该架构还缺乏NSG网络安全组、用作浮动IP的LB等,但本次测试目标为Shared Disk,所以先忽略。

    测试过程

      Azure Share Disk现只在美国中西Region提供内测,所以所有资源均创建在美国中西Region。

    资源组创建

      创建名为ClusterDemoRG的资源组:
    az group create -n ClusterDemoRG -l westcentralus
    -w769

网络创建

  创建名为ClusterVNet的vnet和名为ClusterSubnet的subnet:
az network vnet create -n ClusterVNet -g ClusterDemoRG -l westcentralus --address-prefixes 192.168.0.0/ 16 --subnet-name ClusterSubnet --subnet-prefixes 192.168.1.0/24
-w956

接近主机组及可用性集创建

  Azure Shared Disk 要求连接至同一个Shared Disk的VM必须在同一个接近主机组(PPG)和可用性集(AV Set),并且可用性集的FD为1。
  创建名为ClusterPPG的接近主机组:
az ppg create -n ClusterPPG -g ClusterDemoRG -l westcentralus
-w957

  创建名为ClusterAVSet的可用性集并连接ClusterPPG。这里CLI有个小Bug,不能直接创建FD为1的可用性集,所以用Portal创建:
-w849
注意FD一定要设置为1(红圈部分)
-w823
连接至创建好的PPG
  确认无误后点击创建。

存储账户创建

  Windows 2016增加了一个新功能——云见证,使用Azure的存储账户作为Cluster的仲裁,大大简化了Cluster的部署方式。
  云见证对任意位置的Cluster均可实施,只需要Cluster Node可以访问存储账户即可。
  存储账户创建如下:
az storage account create -n cloudwitnessdemo -g ClusterDemoRG
-w957
存储账户无需和Cluster在同一个Region,所以可以不用指定

Azure Shared Disk创建

  目前阶段Shared Disk只能通过如下模板创建:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "dataDiskName": { "type": "string", "defaultValue": "mySharedDisk" }, "dataDiskSizeGB": { "type": "int", "defaultValue": 1024 }, "maxShares": { "type": "int", "defaultValue": 2 } }, "resources": [ { "type": "Microsoft.Compute/disks", "name": "[parameters('dataDiskName')]", "location": "[resourceGroup().location]", "apiVersion": "2019-07-01", "sku": { "name": "Premium_LRS" }, "properties": { "creationData": { "createOption": "Empty" }, "diskSizeGB": "[parameters('dataDiskSizeGB')]", "maxShares": "[parameters('maxShares')]" } } ] }
  在Azure Portal里创建此模板:
-w703

  然后部署:
-w706

  填写相关参数(如前所述,注意Max Shares要和磁盘容量对应):
-w824

  创建完成可以看到该磁盘:
-w1127

AD域控服务器创建配置

服务器创建

  创建一台名为AD的Windows 2016服务器:
az vm create -n AD -g ClusterDemoRG -l westcentralus --size Standard_D4s_v3 --image Win2016Datacenter --admin-username ad --admin-password Password=123
-w962

安装域控功能

  RDP连接至服务器:
-w1440

  选择“Add roles and features”:
-w1440

  按向导保持默认往下走,一直到”Server Roles”这一步,选择“Active Directory Domain Service”并弹出菜单保持默认:
-w1440

  “Comfirmation”页面勾选“Restart the destination server automatically if requested”,然后点击Install:
-w1440

  安装完成点击“Close”退回服务器管理页面:
-w1440

配置域控

  服务器管理页面右上角三角旗边会出来一个黄色惊叹号,点开再点击“Promote this server to a domian controller”开始配置域控:
-w1440

  添加一个新的林,域名cluster.lab:
-w1440

  配置恢复模式密码:
-w1440

  一路“Next”,到“Prerequisites Check”会出现一些警告,不用管,直接“Install”:
-w1440

  配置完成VM会自动重启,然后使用域账户(cluster.lab\AD)登录:
-w502

  登录后可以看到AD及DNS服务正常启动:
-w1440

  AD域控至此配置完成。

Cluster安装配置

Node创建

虚机创建

  创建两台虚机vm01、vm02,注意创建时需要加入可用性集:
az vm create -n vm01 -g ClusterDemoRG -l westcentralus --size Standard_D4s_v3 --image Win2016Datacenter --admin-username ad --admin-password Password=123 --availability-set ClusterAVSet
az vm create -n vm02 -g ClusterDemoRG -l westcentralus --size Standard_D4s_v3 --image Win2016Datacenter --admin-username ad --admin-password Password=123 --availability-set ClusterAVSet
-w958

虚机磁盘配置

  创建虚机时没有配置数据盘,现在Azure Portal里给虚机添加数据盘。
  在Portal选在vm01,进入磁盘选项,点击”Add Data disk”,在“Name”点击下拉,可以列出所有可添加的磁盘:
-w1486
可以看到,磁盘的属性里除了以前的容量和类型以外,多了一个disk shares used,显示该磁盘可以附加到多少台VM以及已经附加了多少台VM,以ClusterDisk为例,该参数是0/2,表示可以附加到2台VM(max share参数),现在还没有附加到任何一台VM
  选择ClusterDisk,并保存:
-w1486
注意这里有个小坑,Shared Disk的cache必须设置为None,否则添加时会报错
  同样为vm02添加数据磁盘:
-w1486

  远程桌面检查vm01和vm02,可以看到新加的数据盘:
-w1440

加入域

  修改vm01和vm02的网络配置,将DNS指向AD(192.168.1.4):
-w1440
修改后可能VM会断开网络,需要在Azure去执行一遍restart

  修改vm01和vm02的属性,加入域cluster.lab:
-w1440

  加入域时需要属于有加入域权限的用户名和口令,这里直接用域控管理员的账户:
-w1440

  成功加入:
-w1440

  系统重启后用域账户登录。

Cluster安装配置

Cluster安装及创建

  在vm01和vm02用“add roles and features”添加故障转移集群功能:
-w1440

  在vm01选择Tools-Failover Cluster Manager配置Cluster:
-w1440

  从右侧菜单选择创建集群:
-w1440

  将vm01和vm02添加进来:
-w1440

  选择不进行校验:
-w1440

  Cluster名字ClusterDemo:
-w1440

  然后继续“Next”创建集群:
-w1440

Cluster配置
网络配置

  成功创建集群,可以看到自动Online:
-w1440

  展开检查发现现在的Cluster IP是DHCP,分配了192.168.1.6,和vm02有冲突,需要修改:
-w1440

  右键属性将Cluster IP修改为规划的192.168.1.11:
-w1440

  配置完成并生效:
-w1440

Cluster仲裁配置

  为了保证Cluster的安全,避免node间通讯问题导致脑裂,需要配置一个第三站点的仲裁来判断node的健康情况。
  Windows 2016开始支持使用Azure存储账户做仲裁,按如下配置:
  点击右边菜单的“More Actions”,选择创建仲裁:
-w1440

  这里需要选择高级配置:
-w1440

  对所有node生效:
-w1440

  选择云仲裁:
-w1440

  填入预先创建的存储账户的名字和key,注意如果不是Global Azure,需要修改对应的endpoint:
-w1440

  完成配置:
-w1440

共享磁盘配置

  在Failover Cluster Manager里选择Storage-Disks,
-w1440

  选择Add Disk,自动扫描出数据盘:
-w1440

  添加完毕:
-w1440

  到vm01的磁盘管理器检查,可以看到磁盘已经online,处于Reserved状态:
-w1440

  而在vm02,磁盘offline:
-w1440

  共享磁盘配置完成。

Azure Shared Disk切换测试

  现在测试一下在node间磁盘的切换。
  回到vm01,分区并格式化磁盘,注意,由于该磁盘被Cluster接管,所以操作前先要把磁盘置于maintenance模式:
-w1440

  在Cluster管理器里关闭maintenance模式,然后分配盘符,完成后资源管理器里多出E盘:
-w1440

  进入E盘,可正常创建目录:
-w1440

  此时,vm02里看不到E盘:
-w1440

  现在模拟故障,将vm01关机:
-w1552

  稍等一会儿,E盘自动挂载到vm02:
-w1440

  vm01创建的目录正常显示:
-w1440

  并且可正常创建新目录:
-w1440

  共享磁盘切换成功。

总结

  通过以上测试可以看出,Azure Shared Disk使用起来和本地数据中心的共享盘阵等方式基本没区别,简化了用户上云迁移系统架构更改的难度。内测阶段虽然还有些使用限制和小bug,但瑕不掩瑜。
  需要测试的同学,可通过以下链接申请:
Azure Shared Disk内测申请