如何在SLES for SAP高可用环境下不停机修改SBD设备的Timeout设置

更新时间:

问题描述

阿里云上SAP用户系统的核心应用(如SAP S/4HANA、SAP PO、SAP HANA等)主要是通过操作系统的高可用组件(如SUSE HAE、RHEL HA、Microsoft Windows Cluster等)实现SAP系统高可用架构,为业务连续性提供保障。
 
SLES HAE是SUSE linux的高可用组件,它能够确保关键资源(如SAP HANA、SAP ASCS/SCS等)的高可用性,避免单点故障保持业务的连续性。基于SLES HAE构建的SAP系统高可用环境中,阿里云的共享块存储产品承担SBD(STONITH Block Device)的角色,STONITH是在脑裂场景下关闭故障节点的方法。而用来监控STONITH进程状态的watchdog是在节点自身的STONITH出现故障时self-fence,以保证集群的正常运行。
 
优化SBD的超时参数可以避免由于微码热升级引起的CPU抖动、网络抖动等场景导致的非预期的ECS重启故障,进一步提升SAP系统的可用性。

适用于

  • SUSE Linux Enterprise High Availability Extension 12
  • SUSE Linux Enterprise High Availability Extension 15

影响和限制

  • 使用阿里云共享块存储作为SBD的SAP高可用环境。
    说明:开发、测试或生产的单机环境不涉及SBD的配置,不在本文档讨论的范围。
  • 整体配置变更操作无需停机,可在线完成调整。
    注意:强烈建议选业务低峰期进行操作。
  • 此配置变更不影响高可用集群的切换时间和资源的管理策略。
  • 强烈建议做变更前对ECS的数据盘创建快照,您可以参考单块云盘快照或者多个云盘快照

解决方案

将SBD的watchdog timeout和msgwait timeout从默认的5s和10s修改成30s和60s,以下操作以SAP PO SCS HA高可用环境为例描述操作流程。

SAP S/4HANA ASCS HA和SAP HANA HA等高可用环境的操作过程与其近似,具体如下:

  1. 登录服务器,执行以下命令,查看所有资源的状态。
    说明:未特殊说明的步骤只需要在HA的一个节点上操作即可。
    crm_mon -r
    系统显示类似如下,当前有两个ECS,POSCS1和POSCS2,集群状态和被管理的资源状态正常。
  2. 执行以下命令,查找当前SBD的块设备名。
    cat /etc/sysconfig/sbd | grep SBD_DEVICE
    系统显示类似如下,SBD块设备名是/dev/vdd
  3. 执行以下命令,查询当前SBD的设置。确认当前watchdog timeout是5s,msgwait timeout是10s,这两个都是默认配置。
    sbd -d /dev/vxx dump
    说明/dev/vxx替换成当前应用的SBD块设备名。
    系统显示类似如下。
  4. 执行以下命令,将集群设置为维护模式。
    crm configure property maintenance-mode=true
  5. 设置成功后,执行以下命令,确认所有资源都是unmanaged状态。
    crm_mon -r
    系统显示类似如下。

    提示:可能会出现已经存在维护模式资源的提示,输入Y
    'maintenance' attribute already exists in rsc_sbd. Remove it (y/n)? y
    提示:SAP HANA设置为维护模式时可能会出现以下提示,输入Y
    'is-managed' conflicts with 'maintenance' in cln_SAPHanaTopology_HDB. Remove it (y/n)? y
    说明:如果还有没被unmanaged的资源,需要手工将其设置成unmanaged,命令语法如下:
    crm resource maintenance <resource name> true
    例如,下图中的SAP HANA的资源没有被正常设置为unmanaged,需要手工设置一下。

    执行以下命令来完成设置:
    crm resource maintenance rsc_SAPHana_HDB true
  6. 执行以下命令,停用STONITH功能,确保接下来的操作不会触发fencing(重启)。
    crm configure property stonith-enabled=false
  7. 系统显示类似如下。
  8. 执行以下命令,确认设置已经生效。
    crm configure show | grep stonith-enabled
    系统显示类似如下。
  9. 执行以下命令,停止pacemaker服务。
    说明:两个节点都需要操作。
    systemctl stop pacemaker
  10. 执行以下命令,重建SBD设备的metadata。
    注意请再次确认正确的SBD块设备名,错误的块设备名可能导致生产环境的数据丢失。
    sbd -d /dev/vxx -4 60 -1 30 create
    说明/dev/vxx替换成当前应用的SBD块设备名。
    系统显示类似如下。
  11. 执行以下命令,启动pacemaker服务。
    说明:两个节点都需要操作。
    systemctl start pacemaker
  12. 执行以下命令,检查SBD设置是否生效。
    sbd -d /dev/vxx dump
    说明/dev/vxx替换成当前应用的SBD块设备名。
    系统显示类似如下。
  13. 执行以下命令,确保集群节点被分配到一个slot。
    sbd -d /dev/vxx list
    说明/dev/vxx替换成当前应用的SBD块设备名。
    系统显示类似如下。
  14. 执行以下命令,重新启用STONITH,并验证配置。
    crm configure property stonith-enabled=true
    系统显示类似如下。
  15. 执行以下命令,关闭集群维护模式。
    crm configure property maintenance-mode=false
    系统显示类似如下。
    说明:如果在步骤5手动设置过某个资源的maintenance状态为on,最后也需要手动将此资源的maintenance状态设置回off
    命令语法如下:
    crm resource maintenance <resource name> false

相关文档