循序渐进:Azure中的ISCSI目标服务器群集
我最近帮助某人在Azure中构建了iSCSI目标服务器群集,并意识到我从未针对该特定配置编写分步指南。因此,为了弥补这一点,如果您需要自己执行此操作,请按以下逐步说明进行操作。
先决条件
我假设您对Azure和Windows Server相当熟悉,所以我将为您省去一些细节。假设您至少已完成以下操作
- 在不同的可用区中分别提供两台服务器(SQL1,SQL2)(也可以使用可用性集,但是可用区具有更好的SLA)
- 通过Azure门户为其分配静态IP地址
- 将服务器加入现有域
- 在两个节点上均启用了故障转移群集功能和iSCSI Target服务器功能
- 将三个Azure高级磁盘添加到每个节点。
注意:这是可选的,最少需要一个磁盘。为了提高IOPS,我们将在存储池中将三个Premium Azure磁盘条带化,并创建一个简单的(RAID 0)虚拟磁盘 - SIOS DataKeeper将用于提供集群中使用的复制存储。如果您需要DataKeeper,则可以在此处请求试用。
创建本地存储池
再次,此步骤是完全可选的,但是为了提高IOPS,我们将三个Azure Premium磁盘分条到一个存储池中。您可能会倾向于使用动态磁盘和跨区卷,但不要这样做!如果使用动态磁盘,则会发现存在一些一般性的不兼容性,这将阻止您以后创建iSCSI目标。
不用担心,如果您知道可能会遇到的陷阱(如下所述),那么创建本地存储池将非常简单。官方文档可以在这里找到。
陷阱#1-尽管文档说存储池中使用的卷的最小大小为4 GB,但我发现无法识别P1高级磁盘(4GB)。因此,在我的实验室中,我使用了16GB的P3高级磁盘。
陷阱2-您必须至少具有三个磁盘才能创建存储池。
陷阱#3-在创建集群之前先创建存储池。如果您在创建群集后尝试执行此操作,那么Microsoft会为您创建群集存储池时,您将一团糟。我们将不会创建集群存储池,因此在创建集群之前先创建存储池,以免造成混乱。如果必须在创建集群后添加存储池,则必须首先从集群中逐出该节点,然后再创建存储池。
根据此处找到的文档,以下是屏幕快照,它们表示在两个群集节点中的每个节点上构建本地存储池时应看到的屏幕截图。在构建集群之前,请在两台服务器上完成这些步骤。
您应该在两台服务器上都看到原始池。
右键单击并选择“新建存储池”。
关闭此向导后,选择“创建虚拟磁盘”
请注意,如果您决定结合使用Standard,Premium和Ultra SSD,则可以创建存储层
为了获得最佳性能,请使用简单的存储布局(RAID 0)。不必担心可靠性,因为Azure托管磁盘在后端具有三重冗余。需要简单才能获得最佳性能。
为了性能起见,请使用固定配置。无论如何,您已经为完整的Premium磁盘付费,因此无需全部使用。
创建您的集群
现在每个服务器都有自己的45 GB X驱动器,我们将创建基本集群。最好通过Powershell在Azure中创建群集,以便我们可以指定静态IP地址。如果通过GUI进行操作,您将很快意识到Azure为您的群集IP分配了一个必须清除的重复IP地址,所以不要这样做!
这是用于创建新集群的示例Powershell代码。
New-Cluster-名称mycluster -NoStorage -StaticAddress 10.0.0.100-节点sql1,sql2
输出看起来像这样。
PS C: Users dave.DATAKEEPER>新建群集-名称mycluster -NoStorage
-StaticAddress 10.0.0.100-节点sql1,sql2
警告:在创建群集角色时存在问题
可能会阻止它启动。
有关更多信息,请查看下面的报告文件。
警告:报告文件位置:C: windows cluster Reports Create Cluster
2020.05.20上的向导mycluster
在16.54.45.htm
名称
----
集群
报告中的警告将告诉您没有见证人。由于此群集中没有共享存储,因此您必须创建一个Cloud Witness或File Share Witness。我不会指导您完成该过程,因为这些链接上已对此进行了很好的记录。
不要拖延这一步,现在就继续创建见证人,然后再继续下一步!
现在,您应该拥有一个基本的2节点群集,看起来像这样。
为群集核心IP地址配置负载均衡器
Azure中的群集是唯一的,因为Azure虚拟网络不支持免费的ARP。如果您不知道这意味着什么,请不必担心,您真正要知道的是无法直接访问群集IP地址。相反,您必须使用Azure负载平衡器,它将客户端连接重定向到活动群集节点。
为Azure中的群集配置负载均衡器有两个步骤。第一步是创建负载均衡器。第二步是更新群集IP地址,以便它侦听负载平衡器的运行状况探针,并使用255.255.255.255子网掩码,从而可以避免IP地址与ILB冲突。
我们将首先为集群核心IP地址创建一个负载均衡器。稍后,我们将编辑负载均衡器,以解决在本文档结尾处将创建的iSCSI群集资源IP地址。
请注意,我们使用的静态IP地址与用于创建核心群集IP资源的地址相同。
创建负载均衡器后,您将如下所示编辑负载均衡器
将两个群集节点添加到后端池
将两个群集节点添加到后端池
添加健康状况探针。在此示例中,我们使用59999作为端口。请记住该端口,下一步将需要它。
创建新的路线以重定向所有HA端口,请确保已启用“浮动IP”。
第2步–编辑群集IP地址以与负载均衡器一起工作
如前所述,将负载均衡器配置为正常工作有两个步骤。现在我们有了负载均衡器,我们必须在一个集群节点上运行Powershell脚本。以下是需要在群集节点之一上运行的示例脚本。
$ ClusterNetworkName =“集群网络1”
$ IPResourceName =“集群IP地址”
$ ILBIP =“ 10.0.0.100”
导入模块故障转移群集
Get-ClusterResource $ IPResourceName | Set-ClusterParameter
-多个@ {Address = $ ILBIP; ProbePort = 59998; SubnetMask =“ 255.255.255.255”
; Network = $ ClusterNetworkName; EnableDhcp = 0}
除了使所有变量都适合您的环境之外,上述脚本的重要之处还在于确保将ProbePort设置为您在负载均衡器设置中为此特定IP地址定义的端口。稍后您将看到,我们将为使用另一个端口的iSCSI群集IP资源创建第二个健康状况探针。另一个重要的事情是确保将子网设置为255.255.255.255。它可能看起来错了,但这就是需要设置的内容。
运行它后,输出应如下所示。
PS C: Users dave.DATAKEEPER> $ ClusterNetworkName =“集群网络1”
$ IPResourceName =“集群IP地址”
$ ILBIP =“ 10.0.0.100”
导入模块故障转移群集
Get-ClusterResource $ IPResourceName | Set-ClusterParameter
-多个@ {Address = $ ILBIP; ProbePort = 59999; SubnetMask =“ 255.255.255.255”
; Network = $ ClusterNetworkName; EnableDhcp = 0}
警告:属性已存储,但并非所有更改都会生效
直到群集IP地址脱机,然后再次联机。
您将需要使核心群集IP资源脱机并使其重新联机,然后它才能与负载均衡器一起正常运行。
假设您在创建负载均衡器时做得正确,则两台服务器上的服务器管理器都应将群集列为“联机”,如下所示。
检查两个群集节点上的服务器管理器。您的群集在“可管理性”下应显示为“在线”。
安装DataKeeper
我不会在这里完成所有步骤,但是基本上到此为止,您可以在两个群集节点上安装SIOS DataKeeper了。这是一个非常简单的设置,只需运行设置并选择所有默认值即可。如果您在使用DataKeeper时遇到任何问题,通常是两件事之一。第一个问题是服务帐户。您需要确保用于运行DataKeeper服务的帐户位于每个节点上的Local Administrators组中。
第二个问题是关于防火墙的。尽管DataKeeper安装将自动更新本地Windows防火墙,但是如果您的网络已锁定,则需要确保群集节点可以通过所需的DataKeeper端口相互通信。此外,您需要确保ILB健康状况探针可以到达您的服务器。
一旦安装了DataKeeper,就可以创建第一个DataKeeper作业了。对于要使用DataKeeper界面复制的每个卷,请完成以下步骤。
使用DataKeeper界面连接到两个服务器
单击创建新作业并为其命名
单击“是”以在集群中注册DataKeeper卷。
注册该卷后,它将显示在故障转移群集管理器的“可用存储”中
创建ISCSI目标服务器群集
在下一步中,我们将在集群中创建iSCSI目标服务器角色。在理想的情况下,我将拥有一个Powershell脚本来为您完成所有这些操作,但是为了方便起见,现在我将向您展示如何通过GUI进行操作。如果您碰巧编写了Powershell代码,请随时与我们其他人分享!
GUI方法存在一个问题。创建IP资源时,您将获得一个重复的IP地址,这将导致您的群集资源在我们修复之前失败。我还将逐步完成该过程。
转到失败的IP地址资源的属性,然后选择静态IP,然后选择您的网络上未使用的IP地址。请记住该地址,我们将在下一步中更新负载均衡器时使用它。
现在,您应该可以使iSCSI群集资源联机。
更新ISCSI目标服务器群集资源的负载均衡器
如前所述,客户端无法直接连接到我们刚刚为iSCSI目标服务器群集创建的群集IP地址(10.0.0.110)。我们将必须更新我们之前创建的负载均衡器,如下所示。
首先添加一个新的前端IP地址,该地址使用与iSCSI Target群集IP资源使用的IP地址相同的IP地址。
在另一个端口上添加另一个健康状况探针。记住这个端口号,我们将在接下来运行的powershell脚本中再次使用它
我们再添加一个负载平衡规则。确保将“前端IP地址”和“运行状况”探针更改为使用我们刚创建的探针。还要确保启用直接服务器返回。
允许负载平衡器工作的最后一步是在一个群集节点上运行以下Powershell脚本。确保使用新的Healthprobe端口,IP地址和IP资源名称。
$ ClusterNetworkName =“集群网络1”
$ IPResourceName =“ IP地址10.0.0.0”
$ ILBIP =“ 10.0.0.110”
导入模块故障转移群集
Get-ClusterResource $ IPResourceName | Set-ClusterParameter
-多个@ {Address = $ ILBIP; ProbePort = 59998; SubnetMask =“ 255.255.255.255”
; Network = $ ClusterNetworkName; EnableDhcp = 0}
您的输出应如下所示。
PS C: Users dave.DATAKEEPER> $ ClusterNetworkName =“集群网络1”
$ IPResourceName =“ IP地址10.0.0.0”
$ ILBIP =“ 10.0.0.110”
导入模块故障转移群集
Get-ClusterResource $ IPResourceName | Set-ClusterParameter
-多个@ {Address = $ ILBIP; ProbePort = 59998; SubnetMask =“ 255.255.255.255”
; Network = $ ClusterNetworkName; EnableDhcp = 0}
警告:属性已存储,但并非所有更改都会生效
直到IP地址10.0.0.0脱机,然后再次联机。
确保使资源脱机和联机以使设置生效。
创建您的群集ISCSI目标
在开始之前,最好检查一下以确保两台服务器上的服务器管理器都能看到两个群集节点以及两个群集名称资源,并且在可管理性下它们都显示为“联机”,如下所示。
如果任一服务器在查询这些群集名称中的任何一个时出现问题,则后续步骤将失败。如果有问题,我将仔细检查创建负载平衡器和运行的Powershell脚本所采取的所有步骤。
现在,我们准备创建我们的第一个群集iSCSI目标。从任一群集节点中,按照以下说明的步骤进行操作,以作为有关如何创建iSCSI目标的示例。
当然,将其分配给将要连接到该iSSI目标的服务器。
有了它,您现在在Azure中就可以使用功能正常的iSCSI目标服务器。
如果您对此进行构建,请发表评论,我知道您打算如何使用它!
经群集允许复制的文章,凡人