群集配置 - SAP HANA on AWS

群集配置

引导集群并配置所有必需的集群资源和限制。

为资源创建做准备

为确保集群在设置资源和配置期间不会执行任何意外操作,请将维护模式设置为 true。

运行以下命令,将集群置于维护模式:

# pcs property set maintenance-mode=true

要验证当前的维护状态,请执行以下操作:

$ pcs status
注意

维护模式分为两种类型:

  • 集群范围的维护(使用 pcs property set maintenance-mode=true 进行设置)

  • 特定于节点的维护(使用 pcs node maintenance nodename 进行设置)

更改配置时,请务必使用集群范围的维护模式。有关特定于节点的操作,例如硬件维护,请参阅“操作”部分以了解正确的步骤。

要在配置完成后禁用维护模式,请执行以下操作:

# pcs property set maintenance-mode=false

集群引导

配置集群属性

配置集群属性以建立隔离行为和资源失效转移设置:

# pcs property set stonith-enabled="true" # pcs property set stonith-timeout="600" # pcs property set priority-fencing-delay="20"
  • 建议使用 priority-fencing-delay,以便在网络分区事件期间保护 SAP HANA 节点。进行集群分区时,这种延迟会优先考虑托管更高优先级资源的节点,而 SAP HANA 主(已提升)实例将获得额外的优先级权重。这有助于确保主 HANA 节点在脑裂场景中存活下来。建议将 20 秒的 priority-fencing-delay 与在 stonith 中配置的 pcmk_delay_max(10 秒)结合使用,这样就能在发生隔离前提供总共可达 30 秒的潜在延迟。

要验证集群属性设置,请执行以下操作:

# pcs property list # pcs property config <property_name>

配置资源默认值

配置资源默认行为:

RHEL 8.4 and above
# pcs resource defaults update resource-stickiness="1000" # pcs resource defaults update migration-threshold="5000"
RHEL 7.x and RHEL 8.0 to 8.3
# pcs resource defaults resource-stickiness="1000" # pcs resource defaults migration-threshold="5000"
  • resource-stickiness 值可以防止不必要的资源移动,从而有效地为移动资源设置“成本”。值为 1000 会强烈推荐将资源保留在当前节点上,避免与移动相关的停机时间。

  • migration-threshold 为 5000 可确保集群在声明该节点不适合托管资源之前,多次尝试在同一节点上恢复资源。

各个资源可以用自己定义的值覆盖这些默认值。

要验证您的资源默认设置,请执行以下操作:

配置操作默认值

# pcs resource op defaults update timeout="600"

如果未定义特定于资源的超时,op_defaults 超时可确保所有集群操作的默认超时为合理的 600 秒。默认值不适用于使用自己定义的值进行了覆盖的资源

创建 STONITH 隔离资源

正确的集群隔离操作需要 AWS STONITH 资源。建议将 fence_aws 资源用于 AWS 部署,因为该资源利用 AWS API,通过停止节点的 EC2 实例来安全地隔离出现故障或无法通信的节点。

使用资源代理 fence_aws 创建 STONITH 资源:

# pcs stonith create <stonith_resource_name> fence_aws \ pcmk_host_map="<hostname_1>:<instance_id_1>;<hostname_2>:<instance_id_2>" \ region="<aws_region>" \ pcmk_delay_max="10" \ pcmk_reboot_timeout="600" \ pcmk_reboot_retries="4" \ op start interval="0" timeout="600" \ op stop interval="0" timeout="180" \ op monitor interval="300" timeout="60"

详细信息:

  • pcmk_host_map:将集群节点主机名映射到其 EC2 实例 ID。此映射在 AWS 账户中必须唯一,并遵循 hostname:instance-id 的格式,使用分号分隔多个条目。

  • region:部署 EC2 实例的 AWS 区域。

  • pcmk_delay_max:执行隔离操作前的随机延迟。与集群属性 priority-fencing-delay 配合使用以防止同时执行隔离。过去会设置为较高的值,但现在由 priority-fencing-delay 处理主节点保护,较低的值(10 秒)便已足够。

  • pcmk_reboot_timeout:重启操作允许的最长时间,以秒为单位。

  • pcmk_reboot_retries:重试失败的重新引导操作的次数。

  • 使用参数参考中的值的示例

    # pcs stonith create rsc_fence_aws fence_aws \ pcmk_host_map="hanahost01:i-xxxxinstidforhost1;hanahost02:i-xxxxinstidforhost2" \ region="us-east-1" \ pcmk_delay_max="10" \ pcmk_reboot_timeout="600" \ pcmk_reboot_retries="4" \ op start interval="0" timeout="600" \ op stop interval="0" timeout="180" \ op monitor interval="300" timeout="60"
注意

配置 STONITH 资源时,请考虑实例的启动和关闭时间。默认 pcmk_reboot_action 是“reboot”,此时集群会等待停止和启动操作完成,然后才会将隔离操作视为成功。这使得集群可以返回受保护状态。设置 pcmk_reboot_action=off 可允许集群在关闭后立即继续。对于内存增强型裸机实例,建议只使用“off”,因为启动期间初始化内存的时间会延长。

# pcs resource update <stonith_resource_name> pcmk_reboot_action="off" # pcs resource update <stonith_resource_name> pcmk_off_timeout="600" # pcs resource update <stonith_resource_name> pcmk_off_retries="4"

创建重叠 IP 资源

此资源通过更新 AWS 路由表条目来确保在失效转移期间,客户端连接会跟随 SAP HANA 主实例。它管理一个始终指向活动 SAP HANA 数据库的重叠 IP 地址

创建 IP 资源:

# pcs resource create rsc_ip_<SID>_HDB<hana_sys_nr> ocf:heartbeat:aws-vpc-move-ip \ ip="<hana_overlayip>" \ routing_table="<routetable_id>" \ interface="eth0" \ profile="<cli_cluster_profile>" \ op start interval="0" timeout="180" \ op stop interval="0" timeout="180" \ op monitor interval="60" timeout="60"

详细信息:

  • ip:将用于连接主要 SAP HANA 数据库的重叠 IP 地址。参见重叠 IP 概念

  • routing_table:需要更新的 AWS 路由表的 ID。要指定多个路由表,可以使用逗号分隔(例如,routing_table=rtb-xxxxxroutetable1,rtb-xxxxxroutetable2)。确保已按照为重叠 IP 添加 VPC 路由表条目中的说明创建初始条目

  • interface:IP 地址的网络接口(通常为 eth0)

  • profile:(可选)用于 API 身份验证的 AWS CLI 配置文件名称。使用 aws configure list-profiles 验证配置文件是否存在。如果配置文件没有明确地进行配置,则将使用默认配置文件。

  • 使用参数参考中的值的示例

    # pcs resource create rsc_ip_HDB_HDB00 ocf:heartbeat:aws-vpc-move-ip \ ip="172.16.52.1" \ routing_table="rtb-xxxxxroutetable1" \ interface="eth0" \ profile="cluster" \ op start interval="0" timeout="180" \ op stop interval="0" timeout="180" \ op monitor interval="60" timeout="60"
对于启用主动/主动只读

仅适用于您正在使用 logreplay_readenabled 并要求可通过重叠 IP 访问辅助系统时。您可以创建其他 IP 资源。

# pcs resource create primitive rsc_ip_<SID>_HDB<hana_sys_nr>_readenabled ocf:heartbeat:aws-vpc-move-ip \ ip="<readenabled_overlayip>" \ routing_table="<routetable_id>" \ interface="eth0" \ profile="<cli_cluster_profile>" \ op start interval="0" timeout="180" \ op stop interval="0" timeout="180" \ op monitor interval="60" timeout="60"
  • 使用参数参考中的值的示例

    # crm configure primitive rsc_ip_HDB_HDB00_readenabled ocf:heartbeat:aws-vpc-move-ip \ params ip="172.16.52.2" \ routing_table="rtb-xxxxxroutetable1" \ interface="eth0" \ profile="cluster" \ op start interval="0" timeout="180" \ op stop interval="0" timeout="180" \ op monitor interval="60" timeout="60"
对于共享 VPC

如果您的配置需要共享 VPC,则需要另外两个参数。

# pcs resource create primitive rsc_ip_<SID>_HDB<hana_sys_nr> ocf:heartbeat:aws-vpc-move-ip \ ip="<hana_overlayip>" routing_table=<routetable_id> interface=eth0 \ profile="<cli_cluster_profile>" lookup_type=NetworkInterfaceId \ routing_table_role="arn:aws:iam::<sharing_vpc_account_id>:role/<sharing_vpc_account_cluster_role>" \ op start interval="0" timeout="180" \ op stop interval="0" timeout="180" \ op monitor interval="60" timeout="60"

其他详细信息:

  • lookup_type=NetworkInterfaceId

  • routing_table_role="arn:aws:iam::<shared_vpc_account_id>:role/<sharing_vpc_account_cluster_role>"

创建 SAPHanaTopology 资源

SAPHanaTopology 资源代理通过系统复制,帮助管理 SAP HANA 数据库的高可用性。它分析 HANA 拓扑并通过节点状态属性报告调查发现。SAPHana 或 SAPHanaController 资源代理使用这些属性来控制 HANA 数据库。SAPHanaTopology 启动并监控本地 saphostagent,利用 landscapeHostConfiguration.py、hdbnsutil 和 saphostctrl 等 SAP 接口收集有关系统状态、角色和配置的信息。

对于纵向扩展部署和横向扩展部署

有关该资源的文档,您可以查看 man 页面。

# man ocf_heartbeat_SAPHanaTopology
For scale-up (2-node)

对于原始资源和克隆资源:

# pcs resource create rsc_SAPHanaTopology_<SID>_HDB<hana_sys_nr> ocf:heartbeat:SAPHanaTopology \ SID="<SID>" InstanceNumber="<hana_sys_nr>" \ op start interval="0" timeout="600" \ op stop interval="0" timeout="300" \ op monitor interval="10" timeout="600" \ clone clone-node-max="1" interleave="true" clone-max="2"
  • 使用参数参考中的值的示例

    # pcs resource create rsc_SAPHanaTopology_HDB_HDB00 ocf:heartbeat:SAPHanaTopology \ SID="HDB" \ InstanceNumber="00" \ op start interval="0" timeout="600" \ op stop interval="0" timeout="300" \ op monitor interval="10" timeout="600" \ clone clone-node-max="1" interleave="true" clone-max="2"
For scale-out

对于原始资源和克隆资源:

# pcs resource create rsc_SAPHanaTopology_<SID>_HDB<hana_sys_nr> ocf:heartbeat:SAPHanaTopology \ SID="<SID>" InstanceNumber="<hana_sys_nr>" \ op start interval="0" timeout="600" \ op stop interval="0" timeout="300" \ op monitor interval="10" timeout="600" \ clone clone-node-max="1" interleave="true" clone-max="<number-of-nodes>"
  • 使用参数参考中的值的示例

    # pcs resource create rsc_SAPHanaTopology_HDB_HDB00 ocf:heartbeat:SAPHanaTopology \ SID="HDB" InstanceNumber="00" \ op start interval="0" timeout="600" \ op stop interval="0" timeout="300" \ op monitor interval="10" timeout="600" \ clone clone-node-max="1" interleave="true" clone-max="6"

详细信息:

  • SID:HANA 实例的 SAP 系统 ID

  • InstanceNumber:SAP HANA 实例的实例编号

  • clone-node-max:定义在单个节点上可以启动多少个资源代理副本(设置为 1)

  • interleave:允许在同一节点上并行启动依赖克隆资源(设置为 true)

  • clone-max:定义可以在集群中启动的克隆实例总数(例如,使用 2 用于横向扩展,或设置为 6 用于横向扩展,每个站点 3 个节点,不包括仲裁生成器节点)

创建 SAPHANA 资源(基于资源代理 SAPHana 或 SAPHanaController)

SAP HANA 资源代理管理 SAP HANA 数据库之间的系统复制和失效转移。这些代理控制启动、停止和监视操作,同时检查同步状态,以保持数据一致性。代理利用 SAP 接口,包括 sapcontrol、landscapeHostConfiguration、hdbnsutil、systemReplicationStatus 和 saphostctrl。所有配置都与 SAPHanaTopology 代理配合使用,后者收集有关集群节点间系统复制状态的信息。

根据您的 SAP HANA 架构选择合适的资源代理配置:

SAPHanaSR-angi 部署(在 RHEL 9.6 和 10+ 版本中可用)

在 RHEL 9.6 和 10+ 版本上可用,并推荐用于新部署。SAPHanaController 资源代理采用新一代系统复制架构(SAPHanaSR-angi),为纵向扩展和横向扩展部署提供了改进的集成和管理功能。有关详细信息:

有关该资源的文档,您可以查看 man 页面。

# man ocf_heartbeat_SAPHanaController
For scale-up (2-node)

创建原始资源

# pcs resource create rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> ocf:heartbeat:SAPHanaController \ SID="<SID>" \ InstanceNumber="<hana_sys_nr>" \ PREFER_SITE_TAKEOVER="true" \ DUPLICATE_PRIMARY_TIMEOUT="7200" \ AUTOMATED_REGISTER="true" \ op start interval="0" timeout="3600" \ op stop interval="0" timeout="3600" \ op promote interval="0" timeout="3600" \ op monitor interval="60" role="Promoted" timeout="700" \ op monitor interval="61" role="Unpromoted" timeout="700" \ promotable notify="true" clone-node-max="1" interleave="true" clone-max="2" \ meta priority="100"
  • 使用参数参考中的值的示例

    # pcs resource create rsc_SAPHanaController_HDB_HDB00 ocf:heartbeat:SAPHanaController \ SID="HDB" \ InstanceNumber="00" \ PREFER_SITE_TAKEOVER="true" \ DUPLICATE_PRIMARY_TIMEOUT="7200" \ AUTOMATED_REGISTER="true" \ op start interval="0" timeout="3600" \ op stop interval="0" timeout="3600" \ op promote interval="0" timeout="3600" \ op monitor interval="60" role="Promoted" timeout="700" \ op monitor interval="61" role="Unpromoted" timeout="700" \ promotable notify="true" clone-node-max="1" interleave="true" clone-max="2" \ meta priority="100"
For scale-out

使用 SAPHanaController 资源代理创建原始资源:

# pcs resource create rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> ocf:heartbeat:SAPHanaController \ SID="<SID>" \ InstanceNumber="<hana_sys_nr>" \ PREFER_SITE_TAKEOVER="true" \ DUPLICATE_PRIMARY_TIMEOUT="7200" \ AUTOMATED_REGISTER="true" \ op start interval="0" timeout="3600" \ op stop interval="0" timeout="3600" \ op promote interval="0" timeout="3600" \ op monitor interval="60" role="Promoted" timeout="700" \ op monitor interval="61" role="Unpromoted" timeout="700" \ promotable notify="true" clone-node-max="1" interleave="true" clone-max="<number-of-nodes>"
  • 使用参数参考中的值的示例

    # pcs resource create rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> ocf:heartbeat:SAPHanaController \ params SID="HDB" \ InstanceNumber="00" \ PREFER_SITE_TAKEOVER="true" \ DUPLICATE_PRIMARY_TIMEOUT="7200" \ AUTOMATED_REGISTER="true" \ op start interval="0" timeout="3600" \ op stop interval="0" timeout="3600" \ op promote interval="0" timeout="3600" "\ op monitor interval="60" role="Promoted" timeout="700" \ op monitor interval="61" role="Unpromoted" timeout="700" \ promotable notify="true" clone-node-max="1" interleave="true" clone-max="<number-of-nodes>"

详细信息:

  • SID:HANA 实例的 SAP 系统 ID

  • InstanceNumber:SAP HANA 实例的实例编号

  • clone-node-max:定义在单个节点上可以启动多少个资源代理副本(设置为 1)

  • interleave:允许在同一节点上并行启动依赖克隆资源(设置为 true)

  • clone-max:定义可以在集群中启动的克隆实例总数(例如,使用 2 用于横向扩展,或设置为 6 用于横向扩展,每个站点 3 个节点,不包括仲裁生成器节点)

  • PREFER_SITE_TAKEOVER 定义是否首选接管辅助系统。查看非标准部署。

  • AUTOMATED_REGISTER 定义是否应将前主系统注册为辅助系统。查看非标准部署。

  • DUPLICATE_PRIMARY_TIMEOUT 是等待时间,用于尽可能降低意外的双主系统风险。

  • meta priority:将其设置为 100 可与 priority-fencing-delay 配合使用,以确保正确的失效转移顺序并防止同时执行隔离操作

  • 对于较大的数据库,可能需要增加启动和停止超时值(3600 秒)。根据数据库大小和观察到的启动/关闭时间调整这些值

  • 如果您需要更新配置,以下示例可帮助您确定正确的命令

    # pcs resource update rsc_SAPHanaController_HDB_HDB00 op monitor role="Promoted" timeout=900
    # pcs resource update rsc_SAPHanaController_HDB_HDB00 DUPLICATE_PRIMARY_TIMEOUT=3600
    # pcs resource meta rsc_SAPHanaController_HDB_HDB00-clone priority=100

经典部署

对于经典的纵向扩展部署,SAPHana 资源代理管理两个 SAP HANA 数据库之间的接管。有关详细信息:

# man ocf_heartbeat_SAPHana
For scale-up (2-node)

使用 SAPHana 资源代理创建原始资源

# pcs resource create rsc_SAPHana_<SID>_HDB<hana_sys_nr> ocf:heartbeat:SAPHana \ SID="<SID>" \ InstanceNumber="<hana_sys_nr>" \ PREFER_SITE_TAKEOVER="true" \ DUPLICATE_PRIMARY_TIMEOUT="7200" \ AUTOMATED_REGISTER="true" \ op start interval="0" timeout="3600" \ op stop interval="0" timeout="3600" \ op promote interval="0" timeout="3600" \ op monitor interval="60" role="Promoted" timeout="700" \ op monitor interval="61" role="Unpromoted" timeout="700" \ promotable notify="true" clone-node-max="1" interleave="true" clone-max="2" \ meta priority="100"
  • 使用参数参考中的值的示例

    # pcs resource create rsc_SAPHana_HDB_HDB00 ocf:heartbeat:SAPHana \ SID="HDB" \ InstanceNumber="00" \ PREFER_SITE_TAKEOVER="true" \ DUPLICATE_PRIMARY_TIMEOUT="7200" \ AUTOMATED_REGISTER="true" \ op start interval="0" timeout="3600" \ op stop interval="0" timeout="3600" \ op promote interval="0" timeout="3600" \ op monitor interval="60" role="Promoted" timeout="700" \ op monitor interval="61" role="Unpromoted" timeout="700" \ promotable notify="true" clone-node-max="1" interleave="true" clone-max="2" \ meta priority="100"
For scale-out

使用 SAPHanaController 资源代理创建原始资源:

# pcs resource create rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> ocf:heartbeat:SAPHanaController \ SID="<SID>" \ InstanceNumber="<hana_sys_nr>" \ PREFER_SITE_TAKEOVER="true" \ DUPLICATE_PRIMARY_TIMEOUT="7200" \ AUTOMATED_REGISTER="true" \ op start interval="0" timeout="3600" \ op stop interval="0" timeout="3600" \ op promote interval="0" timeout="3600" \ op monitor interval="60" role="Promoted" timeout="700" \ op monitor interval="61" role="Unpromoted" timeout="700" \ promotable notify="true" clone-node-max="1" interleave="true" clone-max="<number-of-nodes>"
  • 使用参数参考中的值的示例

    # pcs resource create rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> ocf:heartbeat:SAPHanaController \ params SID="HDB" \ InstanceNumber="00" \ PREFER_SITE_TAKEOVER="true" \ DUPLICATE_PRIMARY_TIMEOUT="7200" \ AUTOMATED_REGISTER="true" \ op start interval="0" timeout="3600" \ op stop interval="0" timeout="3600" \ op promote interval="0" timeout="3600" "\ op monitor interval="60" role="Promoted" timeout="700" \ op monitor interval="61" role="Unpromoted" timeout="700" \ promotable notify="true" clone-node-max="1" interleave="true" clone-max="<number-of-nodes>"

详细信息:

  • SID:HANA 实例的 SAP 系统 ID

  • InstanceNumber:SAP HANA 实例的实例编号

  • clone-node-max:定义在单个节点上可以启动多少个资源代理副本(设置为 1)

  • interleave:允许在同一节点上并行启动依赖克隆资源(设置为 true)

  • clone-max:定义可以在集群中启动的克隆实例总数(例如,使用 2 用于横向扩展,或设置为 6 用于横向扩展,每个站点 3 个节点,不包括仲裁生成器节点)

  • PREFER_SITE_TAKEOVER 定义是否首选接管辅助系统。查看非标准部署。

  • AUTOMATED_REGISTER 定义是否应将前主系统注册为辅助系统。查看非标准部署。

  • DUPLICATE_PRIMARY_TIMEOUT 是等待时间,用于尽可能降低意外的双主系统风险。

  • meta priority:将其设置为 100 可与 priority-fencing-delay 配合使用,以确保正确的失效转移顺序并防止同时执行隔离操作

  • 对于较大的数据库,可能需要增加启动和停止超时值(3600 秒)。根据数据库大小和观察到的启动/关闭时间调整这些值

  • 如果您需要更新配置,以下示例可帮助您确定正确的命令

    # pcs resource update rsc_SAPHana_HDB_HDB00 op monitor role="Promoted" timeout=900
    # pcs resource update rsc_SAPHana_HDB_HDB00 DUPLICATE_PRIMARY_TIMEOUT=3600
    # pcs resource meta rsc_SAPHana_HDB_HDB00-clone priority=100

创建资源约束

以下约束是必需的。

顺序约束

此约束定义 SAPHanaTopology 与 SAPHana 资源之间的启动顺序:

# pcs constraint order <SAPHanaTopology-clone> <SAPHana/SAPHanaController-clone> symmetrical=false
  • 示例

    # pcs constraint order start rsc_SAPHanaTopology_HDB_HDB00-clone then rsc_SAPHana_HDB_HDB00-clone symmetrical=false

主机托管约束

主资源的 IP

此约束可确保用于确定重叠 IP 的目标的 IP 资源,运行在具有主 SAP Hana 角色的节点上:

# pcs constraint colocation add <ip_resource> with promoted <SAPHana/SAPHanaController-clone> 2000
  • 示例

    # pcs constraint colocation add rsc_ip_HDB_HDB00 with promoted rsc_SAPHana_HDB_HDB00-clone 2000

辅助资源的只读 IP(仅适用于只读模式)

此约束可确保启用只读的 IP 资源运行在辅助(未提升)节点上。当辅助节点不可用时,IP 将移至主节点,读取工作负载将与主工作负载共享容量:

# pcs constraint colocation add <ip_resource> with unpromoted <SAPHana/SAPHanaController-clone> 2000
  • 示例

    # pcs constraint colocation add rsc_ip_HDB_HDB00_readenabled with unpromoted rsc_SAPHana_HDB_HDB00-clone 2000

位置约束

仲裁生成器上没有 SAP HANA 资源(仅限横向扩展)

这种位置约束可确保 SAP HANA 资源避开仲裁生成器,因为其上不适合运行这些资源。

# pcs constraint location <SAPHanaTopology-clone> avoids <hostname_mm> # pcs constraint location <SAPHana/SAPHanaController-clone> avoids <hostname_mm>

激活集群

使用 pcs config show 来检查是否正确输入了所有值。

确认值正确之后,使用以下命令将维护模式设置为 false。这使得集群可以控制资源:

# pcs property set maintenance-mode=false

重置配置 – 可选

重要

以下说明可帮助您重置完整配置。只有当您想从头开始进行设置时,才运行这些命令。

运行以下命令可备份当前配置以供参考:

# pcs config backup /tmp/cluster_backup_$(date +%Y%m%d) # pcs config show > /tmp/config_backup_$(date +%Y%m%d).txt

运行以下命令可停止并清除当前配置

# pcs cluster stop --all hanahost02: Stopping Cluster (pacemaker)... hanahost01: Stopping Cluster (pacemaker)... hanahost02: Stopping Cluster (corosync)... hanahost01: Stopping Cluster (corosync)... # pcs cluster destroy Shutting down pacemaker/corosync services... Killing any remaining services... Removing all cluster configuration files...

执行上述擦除命令后,它将从集群信息库(CIB)中删除所有集群资源,并断开从 corosync 到集群的通信。只有在绝对需要将所有设置重置为默认值时才执行这些步骤。对于较小的更改,请改用 pcs 资源更新或 pcs 属性设置。