

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# SAP HANA 服务控制
<a name="sap-hana-pacemaker-rhel-hana-control"></a>

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

**Topics**
+ [将 sidadm 添加到 haclient 组](#_add_sidadm_to_haclient_group)
+ [修改 HANA 的 SAP 配置文件](#_modify_sap_profile_for_hana)
+ [配置 SAPHana SR 集群挂钩以优化集群响应](#hook_saphanasr)
+ [（可选）配置快速启动选项](#_optional_configure_fast_start_option)
+ [查看 systemd 集成](#_review_systemd_integration)

## 将 sidadm 添加到 haclient 组
<a name="_add_sidadm_to_haclient_group"></a>

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

```
# usermod -a -G haclient hdbadm
```

## 修改 HANA 的 SAP 配置文件
<a name="_modify_sap_profile_for_hana"></a>

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

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

```
Autostart = 0
```

## 配置 SAPHana SR 集群挂钩以优化集群响应
<a name="hook_saphanasr"></a>

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

按照以下步骤配置 SAPHana SR 挂钩：

1.  **验证集群软件包** 

   钩子配置因正在使用的资源代理而异（有关详细信息，请参阅[部署指南](sap-hana-pacemaker-rhel-references.md#deployments-rhel)）。

------
#### [ SAPHanaSR ]

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

   ```
   # rpm -qa resource-agents-sap-hana
   ```

------
#### [ SAPHanaSR-angi ]

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

   ```
   # rpm -qa sap-hana-ha
   ```

------

1.  **确认钩子位置** 

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

1.  **配置 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
   ```

**注意**  
如果您修改了软件包的位置，请更新路径。

------

1.  **配置 Sudo 权限** 

    SAPHanaSR Python 挂钩需要 su <sid>do 权限才能让管理员用户访问集群属性：

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

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

   1. 添加以下配置，将 <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`。

1.  **重新加载配置** 

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

   ```
   hdbadm> hdbnsutil -reconfig
   ```

1.  **验证钩子配置** 

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

   ```
   hdbadm> cdtrace
   hdbadm> grep "loading HA/DR Provider" nameserver*
   ```

1.  **将配置复制到辅助系统** 

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

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

## （可选）配置快速启动选项
<a name="_optional_configure_fast_start_option"></a>

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

Fast Start Option 可能是 susChkSrv 挂钩的替代方案。

有关更多信息，请参阅 SAP 文档：[SAP HANA Fast Restart Option](https://help.sap.com/docs/SAP_HANA_PLATFORM/6b94445c94ae495c83a19646e7c3fd56/ce158d28135147f099b761f8b1ee43fc.html) 

## 查看 systemd 集成
<a name="_review_systemd_integration"></a>

查看 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](https://me.sap.com/notes/3189534) 

1. 验证 SAP HANA 是否已与 systemd 集成。如果已集成，则会显示 systemd 服务名称，例如 SAP<SID>\$1<hana\$1sys\$1nr>.service。例如，对于 SID HDB 和实例编号 00，服务名称是 SAPHDB\$100.service。

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

   ```
   # systemctl list-unit-files | grep -i sap
   ```

1. 创建 Pacemaker 服务即时接入文件：

   ```
   # mkdir -p /etc/systemd/system/pacemaker.service.d/
   ```

1. 创建包含以下内容的文件 `/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
   ```

1. 通过重新加载 systemd 来启用即时接入文件：

   ```
   # systemctl daemon-reload
   ```

1. 验证更改是否生效：

   ```
   # 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
   ```