SAP HANA 服务控制 - SAP HANA on AWS

SAP HANA 服务控制

修改管理 SAP HANA 服务的方式以启用集群接管和操作。

将 sidadm 添加到 haclient 组

Pacemaker 软件会创建一个 haclient 操作系统组。为确保集群访问权限正确,请在所有集群节点上将 sidadm 用户添加到此组中。以根用户身份运行以下命令:

# usermod -a -G haclient hdbadm

修改 HANA 的 SAP 配置文件

为了防止 SAP 启动框架在实例重启时自动启动 SAP HANA,请修改所有节点上的 SAP HANA 实例配置文件。这些配置文件位于 /usr/sap/<SID>/SYS/profile/

以 <sid>adm 用户的身份,编辑 SAP HANA 配置文件 <SID>_HDB<hana_sys_nr>_<hostname> 并修改或添加 Autostart 参数,确保将其设置为 0:

Autostart = 0

配置 SAPHanaSR 集群钩子用于优化集群响应

如果系统复制失败,SAPHanaSR 钩子会立即通知集群,这是对标准集群轮询机制的补充。这种优化可以显著缩短失效转移响应时间。

按照以下步骤配置 SAPHanaSR 钩子:

  1. 验证集群软件包

    钩子配置因正在使用的资源代理而异(有关详细信息,请参阅部署指南)。

    SAPHanaSR

    检查是否安装了预期的软件包

    # rpm -qa resource-agents-sap-hana
    SAPHanaSR-angi

    检查是否安装了预期的软件包

    # rpm -qa sap-hana-ha
  2. 确认钩子位置

    默认情况下软件包安装在 /usr/share/sap-hana-ha//usr/share/SAPHanaSR/srHook 中。我们建议使用默认位置,但您可以选择将其复制到自定义目录,例如 /hana/share/myHooks。该钩子必须在所有 SAP HANA 集群节点上可用。

  3. 配置 global.ini

    更新位于每个 SAP HANA 集群节点上 /hana/shared/<SID>/global/hdb/custom/config/global.ini 文件。继续操作之前,请先制作一份备份副本。

    SAPHanaSR
    [ha_dr_provider_SAPHanaSR] provider = SAPHanaSR path = /usr/share/SAPHanaSR/srHook execution_order = 1 [trace] ha_dr_saphanasr = info
    注意

    如果您修改了软件包的位置,请更新路径。

    sap-hana-ha (newer agent)
    [ha_dr_provider_sushanasr] provider = HanaSR path = /usr/share/sap-hana-ha/ execution_order = 1 [trace] ha_dr_sushanasr = info
    注意

    如果您修改了软件包的位置,请更新路径。

  4. 配置 Sudo 权限

    SAPHanaSR Python 钩子需要 sudo 权限才能让 <sid>adm 用户访问集群属性:

    1. /etc/sudoers.d/ 中以根用户身份创建新的 sudoers 文件,例如 60-SAPHanaSR-hook

    2. 使用 visudo 安全地编辑新文件 visudo /etc/sudoers.d/60-SAPHanaSR-hook

    3. 添加以下配置,将 <sid> 替换为小写的系统 ID,将 <SID> 替换为大写的系统 ID:

      Cmnd_Alias SITE_SOK = /usr/sbin/crm_attribute -n hana_<sid>_site_srHook_[a-zA-Z0-9_]* -v SOK -t crm_config -s SAPHanaSR Cmnd_Alias SITE_SFAIL = /usr/sbin/crm_attribute -n hana_<sid>_site_srHook_[a-zA-Z0-9_]* -v SFAIL -t crm_config -s SAPHanaSR Cmnd_Alias HOOK_HELPER = /usr/sbin/SAPHanaSR-hookHelper --sid=<SID> --case=checkTakeover hdbadm ALL=(ALL) NOPASSWD: SITE_SOK, SITE_SFAIL, HOOK_HELPER

      例如:

      Cmnd_Alias SITE_SOK = /usr/sbin/crm_attribute -n hana_hdb_site_srHook_[a-zA-Z0-9_]* -v SOK -t crm_config -s SAPHanaSR Cmnd_Alias SITE_SFAIL = /usr/sbin/crm_attribute -n hana_hdb_site_srHook_[a-zA-Z0-9_]* -v SFAIL -t crm_config -s SAPHanaSR Cmnd_Alias HOOK_HELPER = /usr/sbin/SAPHanaSR-hookHelper --sid=HDB --case=checkTakeover hdbadm ALL=(ALL) NOPASSWD: SITE_SOK, SITE_SFAIL, HOOK_HELPER
      注意

      该语法使用 glob 表达式,使得它可以适应不同的 HSR 站点名称,同时避免使用通配符。这确保了灵活性和安全性。在 SID 发生变化时,仍需要进行修改。将 <sid> 替换为与安装匹配的小写 sid,将 <SID> 替换为与安装匹配的大写 SID

  5. 重新加载配置

    <sid>adm 将更改重新加载到 global.ini 时,使用 HANA 重新启动或以下命令:

    hdbadm> hdbnsutil -reconfig
  6. 验证钩子配置

    以 <sid>adm 的身份验证钩子是否已加载:

    hdbadm> cdtrace hdbadm> grep "loading HA/DR Provider" nameserver*
  7. 将配置复制到辅助系统

    1. 确认 global.ini 更改已复制到辅助系统

    2. 在辅助系统上创建对应的 sudoers.d 文件

(可选)配置快速启动选项

SAP HANA 快速重启选项不在本文档的讨论范围内,该选项使用 tmpfs 文件系统来保留和重复使用 MAIN 数据片段,从而加快 SAP HANA 的重启速度。这在操作系统未重新启动(包括索引服务器的本地重启)的情况下很有用。

快速启动选项可以作为 susChkSrv 钩子的替代方案。

有关更多信息,请参阅 SAP 文档:SAP HANA Fast Restart Option

查看 systemd 集成

查看 HANA 版本和 systemd 版本以确定是否满足了 systemd 的先决条件:

sidadm> systemctl --version
操作系统版本
  • Red Hat Enterprise Linux 8(systemd 版本 239)

SAP HANA 修订版
  • SAP HANA SPS07 修订版 70

使用带有 systemd 集成的 SAP HANA 版本(SPS07 及更高版本)时,您必须运行以下步骤,以防止在特意停止 Amazon EC2 实例时节点被隔离。请参阅 Note 3189534 - Linux: systemd integration for sapstartsrv and SAP HANA

  1. 验证 SAP HANA 是否已与 systemd 集成。如果已集成,则会显示 systemd 服务名称,例如 SAP<SID>_<hana_sys_nr>.service。例如,对于 SID HDB 和实例编号 00,服务名称是 SAPHDB_00.service。

    以根用户身份使用以下命令查找 SAP systemd 服务:

    # systemctl list-unit-files | grep -i sap
  2. 创建 Pacemaker 服务即时接入文件:

    # mkdir -p /etc/systemd/system/pacemaker.service.d/
  3. 创建包含以下内容的文件 /etc/systemd/system/pacemaker.service.d/50-saphana.conf

    [Unit] Description=pacemaker needs SAP instance service Documentation=man:SAPHanaSR_basic_cluster(7) Wants=SAP<SID>_<hana_sys_nr>.service After=SAP<SID>_<hana_sys_nr>.service
  4. 通过重新加载 systemd 来启用即时接入文件:

    # systemctl daemon-reload
  5. 验证更改是否生效:

    # systemctl show pacemaker.service | grep SAP<SID>_<hana_sys_nr>

    例如,对于 SID HDB 和实例编号 00,预计输出如下:

    # systemctl show pacemaker.service | grep SAPHDB_00
    Wants=SAPHDB_00.service resource-agents-deps.target dbus.service
    After=system.slice network.target corosync.service resource-agents-deps.target basic.target rsyslog.service SAPHDB_00.service systemd-journald.socket sysinit.target time-sync.target dbus.service sbd.service