有许多关于 SAP 运行 High Availability 的博客,但似乎没有一个专注于解释基础知识的工作原理。
1. 基础知识:
一个标准的独立 SAP 系统有 3 个基本组件,每个组件对于系统的工作都至关重要:
1. ASCS -> 代表 ABAP SAP Central Service,它由Message Server和Enqueue Server两部分组成。Message Server 充当应用程序服务器之间的通信通道并处理负载分配,Enqueue Server 控制锁定机制。
2. AS -> 应用程序服务器。在过去,您有一个包含 ASCS 组件的中央实例,现在 ASCS 组件已被删除并独立存在,因此第一个应用程序服务器称为 PAS(主应用程序服务器),之后的应用程序称为 AAS(附加应用程序服务器),但实际上它们之间几乎没有区别。
3. Database -> Database就是数据库,主要进行数据持久化和存储。
传统独立系统如下所示:
那么,要如何使您的系统具备高可用性呢?其实很简单,就是要为这些组件提供冗余,覆盖所有可能的单点故障。
2 .如何实现这一点呢?
对于一个基本的高可用系统来说,您至少需要两台主机(或节点)来部署所需的组件,并且理想情况下,它们应该位于不同的数据中心内。
ASCS -> 对于中心服务而言,推荐的做法是使用ERS(队列复制服务器)。ASCS和ERS安装在两个主机的共享磁盘上。队列服务器将维护锁表,而ERS则保持锁表的一个副本。第三方集群软件将为ASCS实例提供自动故障转移机制。这意味着,在每个主机上都有一个ASCS和一个ERS,如果任何时候某个节点出现问题,它会自动切换到另一个节点,从而保持系统的运行。
AS -> 从应用服务器的角度来看,关键在于数量;最基本的配置是至少需要两台应用服务器(主应用服务器PAS和辅助应用服务器AAS),并使用负载均衡。如果某个节点出现问题,连接到该节点的所有用户会被踢出,但由于另一台应用服务器仍然正常运行,用户可以重新登录。
DB -> 在数据库方面,通常至少需要两个数据库,其中一个作为主数据库服务于系统,而另一个则是备用数据库,通过从主数据库不断接收日志(称为日志传送)来保持同步。除此之外,还需要集群软件和自动故障转移机制。这意味着集群指向的是主数据库,如果主节点不可用,故障转移机制就会启动,将备用数据库提升为主数据库,从而确保系统的持续运行。
完成后,您的新 HA 系统应如下所示
3. 现在,什么是高可用集群(HA-Cluster)?
最基本的层面来说,一个标准的高可用集群在主动-被动(Active-Passive)配置下包含两个节 点,一个是主节点,另一个是备用节点。这意味着主节点正在积极地为系统提供服务,而备用节点则处于待命状态,准备在出现故障时接管服务。
它是如何工作的?
集群被设置了一个虚拟IP(并通过DNS设置了主机名),这些是在SAP配置文件中用来调用特定组件的详细信息。集群会将这个虚拟IP分配给活动节点,并使用心跳监控来确认组件的可用性。如果主节点停止响应,它将触发自动故障转移机制,这一机制会促使备用节点接管成为主节点,并将虚拟IP分配给它,以恢复组件的可用性。一旦故障节点修复后,它将以备用节点的身份重新上线。
4. 使用ERS实现SAP ASCS高可用性的解释
SAP标准的方法是使用ERS来使ASCS实例具备高可用性。
什么是ERS?
ERS代表队列复制服务器,它的任务是保持锁表的最新副本,这样即使ASCS实例发生灾难性事件,锁表的状态也能得到保护。
就是这样吗?……嗯,是的……它并不是一个魔法盒!……或者说,它是?……单独来看,它并不能保证系统的可用性,它只是执行上述的功能。为了实现期望中的高可用性,需要将其功能与带有自动故障转移机制的集群特性结合起来。这样一来,当(或如果)ASCS实例崩溃时,它可以被迁移到不同的主机/节点上,在那里它将使用复制表来创建一个新的锁表,从而使系统能够继续运行。
一个高可用中央实例的基本架构是什么样的?
最简化的表达方式是你至少需要两个节点和一个共享文件系统。为了本篇博客的目的,我将仅关注ASCS/ERS实例,并假设其余的组件分布在其他节点上。
同样,你需要一个带有自动故障转移机制的集群提供者。再次声明,我不会专注于某个特定的提供者,而是尽量做到通用,使之适用于大多数场景。
ASCS/ERS安装
为了让ASCS和ERS实例能够在不同节点之间迁移,它们需要安装在一个共享文件系统上,并使用虚拟主机名。这是为什么呢?因为虚拟IP将会被添加到集群资源组中,这样它们就可以作为一个逻辑单元一起切换。
一些高层次的安装提示:
安装可执行文件应该指向那个虚拟主机。
./sapinst SAPINST_USE_HOSTNAME=<虚拟主机名>
在这个练习中,ASCS实例将安装在sapnode1上,使用虚拟主机名sapascs,而ERS实例将安装在sapnode2上,使用虚拟主机名sapers。
另外,在安装完成后,你需要确保在各自的主机上为ASCS和ERS创建了挂载点(/usr/sap/<SID>/ASCSXX 和 /usr/sap/<SID>/ERSXX)。
还有一些其他特定于安装的步骤是必需的,但为了保持通用性,我在这里就不详细说明了(我在博客底部包含了一些链接,你可以查阅其中的一些步骤)。
下面是启动集群基本配置所需的基本要求,包括非活动(灰色)实例的要求。
一旦您的集群配置完成并且ASCS/ERS实例(以及系统的其他组件)开始运行,您的系统将如下所示:
那么,如果sapnode2出现故障会发生什么?
系统将继续正常运行,因为ASCS的可用性没有受到影响。当sapnode2恢复在线后,ERS也会随之恢复。
当sapnode1出现故障时会发生什么?
心跳监控将触发集群资源的故障转移,ASCS实例将与ERS一起在sapnode2上启动(这是集群共置配置的一部分),并将使用复制表来创建新的锁表并恢复操作。与此同时,ERS将被关闭(这也是共置规则的一部分),并在主机恢复在线后转移到sapnode1上。
需要明确的是,在短时间内,ASCS和ERS将并行运行。这是必要的,因为复制表存储在运行ERS的节点的内存中,只有当ASCS完成读取并重建锁表后,ERS所在的节点才会被关闭,并等待转移到另一个节点。
最终,一旦sapnode1恢复在线,ERS实例将被启动并创建一个新的锁复制表,从而使ASCS再次具备高可用性。