对于现如今的IT运维来说,数据中心的应用和服务的高可用是重中之重,计划内或意外的宕机导致的业务停顿会直接造成经济损失,降低客户满意度进而破坏业内口碑,其重要性不言而喻。
高可用的系统要求部署可靠容错机制和运维手段,以便在出现单点故障时能及时检测并尽量降低业务中断时长,故障群集即为此目的应运而生。
Windows故障转义群集的主要组件
在部署Windows Server 2012 R2故障转移群集之前,我们需要充分考虑集群所需的必要组件以便我们能够顺利的配置它。
- 节点 Node 节点是集群中的成员服务器,节点之间相互通信并被用以运行集群之上的服务、资源和应用。
- 网络 Network 集群中会涉及到多个网络,它们用以实现节点间通讯、客户端访问运行其上的应用或服务和存储网络,不同网络用于不通的数据通讯,极大了增强了集群的性能。
- 私有网络 Private Network 用于集群内部通讯,实现心跳信息交换和集群被节点间的交互,集群自身完成对内部通讯
的身份验证。- 公共网络 Public Network 向集群外部提供应用和服务访问入口,私有网络和公共网络可以共用,但不建议公用,潜在的带宽争用风险极有可能产生网络瓶颈。
- 存储网络 Storage Network 集群中共享存储的专用网络。 若使用ISCSI存储,将使用与其它网络相同的IP协议和以太网设备实现存储共享,尽管设备可以共用,存储网络应设计为与其它两种网络完全隔离,以提高其可靠性。
- 存储 Storage 集群存储系统,用来实现节点间的存储共享,以保证在故障转移时,数据也能随之转移。
- iSCSI存储 iSCSI(参考https://en.wikipedia.org/wiki/ISCSI) 协议将SCSI 封装进数据包并通过IP协议经由以太网传递,传递时使用点对点连接 。Windows和Linux系统均有相应的组件配置ISCSI
target
,ISCSItarget
配置完成后,Windows cluster 节点服务器便可以通过iSCSIinitialtor
将iSCSI存储接入到群集作为共享存储。 但是在面向高负载生产环境的集群时,系统管理原将会选择性能更好的硬件iSCSI主机总线适配器,但成本会高很多。- 光纤通道 Fiber Channel 基于光纤通多的存储区域网络(SAN,参考https://en.wikipedia.org/wiki/Storage_area_network)拥有更好的性能,但是价格昂贵。需要专用的硬件和线缆,得益于光纤的高速和高传输距离,它能够提供远距离的点对点高速连接连接。
- 可共享串行附加存储 Shared serial attached SCSI 可共享串行附加SCSI存储,其部署要求两个群集节点物理上靠近在一起,存储受限于Node上面相应的端口。
- 共享的.vhdx存储 Shared .vhdx Cluster Shared Volume (CSV)存储,用于Hyper-V的虚机高可用,用于实现Hyper-V虚机的热迁移(本文后面有案例)
- 服务和应用 Services and Applications Failover Cluster 为服务和应用提供高可用支持,在其中一个节点不可用时,使客户端所需访问的业务不至于中断。
Windows 故障转移集群的仲裁(Windows Server 2012 R2 Clustering Quorum)
集群仲裁(Quorum)用于定义当集群中至少有多少节点参与集群才能保证故障转移保护正常工作,每个节点都进行投票,票数满足仲裁设定则仲裁才可以开始或继续运行。当集群的节点数为偶数时,可以将集群配置为允许磁盘或者共享文件夹来作为见证(Witness)参与投票。为保证集群功能与性能正常,每个节点复制有包含投票数量的集群配置信息并会同步更新。
- 多数节点 Node Majority 多数节点仲裁,应用在节点为奇数的集群中,每个接入到集群并在线的节点都可以投票,总票数多于节点半数时仲裁运行,集群才可正常运行,否则集群服务将终止。
- 节点与磁盘多数 Node and disk majority节点和磁盘多数仲裁,应用于节点为偶数的集群,集群中不仅所有介入到集群被在线的节点都可以投票,作为见证(Witness)的磁盘也可以投票,当集群中所有节点票数加上磁盘所投票数大于(节点数+1)/2时,则仲裁运行,集群可正常运行,反之集群服务终止。
- 节点与共享文件 Node and file share majority 节点与共享文件夹仲裁,应用于节点为偶数的集群,集群中不仅所有介入到集群被在线的节点都可以投票,作为见证(Witness)的共享文件夹也可以投票,当集群中所有节点票数加上共享文件夹所投票数大于(节点数+1)/2时,则仲裁运行,集群可正常运行,反之集群服务终止。
- 仅磁盘 No majority: disk only 当集群中的一个节点可用并能与该磁盘通信则集群具有仲裁。只有能够与这个磁盘通信的节点才能加入集群。这意味着单点故障,最时不愿见到的选项。
Windows Server 2012中,安装故障转移集群时,安装向导会自动选择默认仲裁模式,一旦集群安装完成,仲裁模式将被配置为如下两者之一,仲裁模式可在集群an'zhuang'wan'cheng'hou
- 节点多数仲裁 - 节点数为奇数的集群
- 节点和磁盘多数 - 节点数为偶数的集群
Windows Server 2012 R2 动态仲裁
从Windows Server 2012 R2 起,windows故障转移集群引入动态仲裁。在集群安装完成时,将默认使用动态仲裁模式。所谓动态仲裁模式,集群服务会根据集群中的节点数量动态修改集群仲裁模式,若节点数变为偶数,将启用磁盘见证(Witness),使用节点磁盘多数仲裁;若节点数位奇数,将自动禁止磁盘见证(Witness)投票,使用节点多数仲裁,简而言之,动态仲裁会在节点故障时重新计算仲裁进而改变仲裁配置并保证集群正常提供服务。动态仲裁模式下,当新增或驱逐节点时,不需要手动配置仲裁模式。
Windows Server 2012 R2 还引入了强制仲裁弹性功能(force quorum resilience),此功能被用在集群被拆分,集群节点互相无法感知的情况下,即脑裂(Split Brain)场景。用以强制使服务可用。
Windows Server 2012 R2 故障转移集群
准备集群所需磁盘
本例使用Window Server 2012 R2 搭建iSCSI存储
准备Target
- 检查iSCSI是否已安装
Get-WindowsFeature FS-iSCSITarget-Server
image.png- 安装iSCSI组件
Install-WindowsFeature FS-iSCSITarget-Server
image.png- 配置iSCSI
targets
- 打开Server Manager,找到并点击File and Storage Service
image.png- 点击iSCSI
image.png- 在iSCSI VIRTUAL DISKS面板点击TASKS然后再下拉菜单中点击New iSCSI Virtual Disk
image.png- 在New iSCSI Virtual Disk 向导的Select iSCSI virtual disk location页面的Storage Location下,选中E盘,点击Next
image.png- 在Specify iSCSI virtual disk name 页面,在Name处,键入iLUN0,点击下一步
image.png- 在Specify iSCSI virtual disk size页面,size文本框,填写500;在下拉框中,选择单位为GB,选中Dynamically expanding复选框然后下一步
image.png- 在Assign iSCSI target页面,点击New iSCSI target,然后下一步
image.png- 在Specify target name页面,Name处,键入iSAN,然后下一步
image.png- 在Specify access servers页面,点击添加
image.png- 在Select a method to identify the initiator对话框,点击Enter a value for the selected type,在类型下拉列表,点击IP Address,在value处键入192.168.1.200,点击ok
image.png- 在Specify access servers页面点击Add
image.png- 在Select a method to identify the initiator对话框点击Enter a value for the selected type;在下拉列表中选择IP Address,在value懒键入192.168.1.201,点击OK
image.png- 在Specify access servers页面,确定已经将需要添加的2个IP address已经输入,这两个IP是我们用来创建cluster的两个节点的IP地址,点击下一步
image.png- Enable Authentication页面,直接下一步
image.png- Confirm selections页面,点击Create
image.png- View results页面,等待所有项目成功完成,然后点击Close
image.png- 在iSCSI VIRTUAL DISKS面板,再次点击TASKS,在下拉菜单中,点击New iSCSI Virtual Disk
image.png- 在New iSCSI Virtual Disk 向导中的Select iSCSI virtual disk location页面下的Storage location,选中E盘,点击下一步
image.png- 在Specify iSCSI virtual disk Name页面,在Name 文本框键入iLUN1,点击下一步
image.png- 在Specify iSCSI virtual disk size 页面,在size文本框,键入300;在下拉列表选择单位GB,选中**Dynamically expanding复选框,点击下一步
image.png- 在Assign iSCSI target页面,点击iSAN,点击下一步
image.png- 在Confirm selection页面,点击Create
image.png- 在View results页面,等待新建iSCSI虚拟磁盘创建完毕,然后点击Close
image.png- 同样的,根据17 - 23步骤,创建一个1GB大小的iSCSI虚拟磁盘用作故障转移集群的磁盘见证(Disk Witness),3快磁盘创建完如下
image.png
可选:使用Powershell创建iSCSI targets
和iSCSI virtual disk
# 安装iSCSI Target角色
if ((Get-WindowsFeature fs-iscsitarget-server).InstallState -eq "Available") {
Install-WindowsFeature FS-iSCSITarget-Server -IncludeAllSubFeature -IncludeManagementtools
} else {
"FS-iSCSI installed"
}
# 新建target,名为iSAN并指定能够访问该存储的机器
New-IscsiServerTarget -TargetName iSAN -Initiatorids @("IPAddress:192.168.1.200","IPAddress:192.168.1.201")
# 指定提供target服务的IP和监听的端口,不指定端口即使用默认端口3260
Set-IscsiTargetServerSetting 192.168.1.100 -Enable $true
#创建虚拟磁盘
New-IscsiVirtualDisk -path "e:\iSCSIVirtualDisks\iLUN0.vhdx" -Size 500GB
New-IscsiVirtualDisk -path "e:\iSCSIVirtualDisks\iLUN1.vhdx" -Size 300GB
New-IscsiVirtualDisk -path "e:\iSCSIVirtualDisks\iLUN2.vhdx" -Size 1GB
# 将虚拟磁盘添加到前面建立的Target中
Add-IscsiVirtualDiskTargetMapping -TargetName iSAN -path "e:\iSCSIVirtualDisks\iLUN0.vhdx"
Add-IscsiVirtualDiskTargetMapping -TargetName iSAN -path "e:\iSCSIVirtualDisks\iLUN1.vhdx"
Add-IscsiVirtualDiskTargetMapping -TargetName iSAN -path "e:\iSCSIVirtualDisks\iLUN2.vhdx"