用于 AWS 上 SAP 的 Windows 群集
本文分析了 Windows Server 故障转移群集的设计方面,以及在部署期间要牢记的关键方面。
SAP企业客户对可用性有严格要求,为了满足这些关键绩效指标(KPI),架构师寻求集群解决方案来满足需求。Windows Server Failover Cluster(WSFC)就是这样一种集群解决方案。它作为Windows Server Datacenter版的一部分提供。这使得它成为使用Windows Server的设置的默认选择。
值得注意的是,SAP HANA数据库目前仅支持Linux(SUSE和RHEL)。因此,在这种设置中,WSFC可用于SAP Central Services(ASCS/SCS)。对于MS-SQL部署,WSFC也用于通过SQL Always On实现高可用性。
在本文中,我们将详细介绍WSFC的设计方面,并了解在部署过程中应该注意的关键方面。
WSFC设置 WSFC设置需要以下最低组件,这些组件首先必须可访问,并且每个组件都应有相应的管理员。共享文件系统(AWS中的FSx) Windows域控制器 DNS Windows文件共享见证(FileShare Witness) SAP安装的域管理员权限 让我们详细看看每个组件。
共享文件系统 “sapmnt”文件系统在SAP安装中作为核心组件之一,它包含配置文件、托管SAP内核二进制文件,并与集群软件协同工作以提供无缝故障转移能力。这可以通过各种实现方式实现。在AWS中,首选的本机机制是使用FSx。它基本上是由AWS提供的基于Windows Server的可扩展文件存储,以SaaS模式提供。它们可以使用SMB(服务消息块)协议进行访问。
请记住,SAP仅支持长度最长为13个字符的DNS名称;因此,应创建一个额外的DNS名称(C记录),以便在SAP安装期间可以提供符合SAP命名约定和字符限制的名称。
Windows域控制器 Windows集群设计与域控制器协同工作。群集名称对象(CNO)在Active Directory中使用这些域控制器创建。通常客户会使用现有的域控制器和现有的Active Directory。在AWS上运行SAP时,管理员应明确定义这些组件,并确保它们优先位于AWS中,并具有本地副本以避免延迟问题。通常会有多个域控制器以提供高可用性,并且必须清楚地理解此设置的工作原理,因为群集状态可能在多个域控制器之间错误地反映,从而导致不一致。如果客户既有本地和AWS域控制器,则最好将WSFC中的所有配置映射到AWS域控制器本身,进而将其反映在所有域控制器中,并确保SAP服务器与域控制器之间存在最小延迟。
DNS IP地址在DNS中映射为用户友好的名称,并且它与域控制器和Active Directory域服务(AD DS)一起工作来提供查找。 Linux和Windows集群在此处有一个重要的区别,即如何管理集群的虚拟IP地址。此虚拟IP有时称为“浮动IP”。在Linux集群中,实施使用了覆盖IP,而在WSFC中,每个集群节点的IP地址都针对虚拟集群名称在DNS中更新,并且在集群故障转移期间调整了对虚拟名称的查找。因此,DNS的更新成为终端用户访问群集的关键因素,如果此更新无法立即反映在所有终端用户的计算机上,则可能导致终端用户看到错误信息,即使群集本身已经进行了故障切换。
Windows文件共享见证 每个群集都需要一个仲裁者来确定和解决拆网分支情况,其中两个群集节点都可能处于竞争状态,以确定哪个节点是活动节点。外部设备(在本例中为FSx)通过提供作为群集的一部分并充当第三个节点的外部设备来解决此问题。两个群集节点都对见证设备执行IO操作,这两个群集节点与见证设备一起进行投票,决定任何时间点上的活动节点。虽然IO的量很小,但重要的是保持这种IO操作的延迟和吞吐量最小,因为这些操作每隔几秒钟就会发生一次,任何对此操作的稍微延迟都可能将群集带入不健康状态。
域管理员权限 在Windows安装中,域管理员权限可以提供在Windows上安装SAP所需的必要权限。在许多情况下,由于客户的安全限制,不允许使用此权限,并且SAP安装指南列出了在这种情况下需要提供的特定权限。这包括创建/删除/修改用户、组、计算机对象、DNS服务器记录和其他特定组织单位(OU)中用于创建SAP系统的OU对象。
在设置群集时,有几个具有影响的参数需要评估:
RegisterAllProvidersIP 此参数确定群集跨越其他子网的所有IP地址是否由群集在DNS中注册,还是仅注册活动节点IP。值为1(默认值)会在DNS中注册所有IP地址。在AWS中使用此配置时存在问题,特别是对于ASCS/ERS群集,因为它会导致多个IP地址映射到单个主机名,并且解析不一致。
此配置对于MS-SQL Always On群集非常有效,因为数据库群集设计旨在尝试连接到可用IP地址的多个连接,通过设置MultiSubnetFailover=True并利用成功的连接。
目前ASCS/ERS群集设计不支持类似的连接过程,其中可以尝试同一ASCS虚拟名称的多个IP地址进行并行连接。仅成功的连接将进行进一步处理。在ASCS/ERS的情况下,这种实现不存在,这意味着没有可用的一致和可预测的行为。因此,需要将此值设为0,并让群集在故障转移过程中更新IP地址到DNS中。
请注意,这通常可能会在具有多个需要进行同步的DNS服务器的情况下出现问题。请参阅下面的其他参数以处理此问题。
MultiSubnetFailover 这是一个客户端参数,允许客户端应用程序同时尝试与DNS中定义的不同IP地址建立多个连接到MS-SQL数据库服务器。它避免了超时情况。然而,SAP应用层ASCS/ERS群集当前不支持理解此参数。请注意,这与SAP应用程序服务器与MS-SQL数据库之间的连接不同。SAP应用程序服务器可以正确理解MultiSubnetFailver参数,因此能够在故障转移期间处理与数据库的连接。然而,SAP ASCS/ERS群集没有类似的参数来处理故障转移期间的无缝连接。
HostRecordTTL 这是一个群集参数,它定义客户端操作系统上缓存条目在再次查询DNS之前保留的时间。默认值为1200秒。然而,建议根据AWS的建议将其降低到15秒,甚至在需要几乎零停机时间的情况下降低到1秒。
这引入了另一个问题:DNS现在受到所有客户端操作系统的非常频繁的查询影响,对于大型企业客户的SAP应用程序,这个数量可能在数千个范围内。无法确定该参数的通用值。适当的群集测试应该找出最佳值。