

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

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

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

**Topics**
+ [将 sidadm 添加到 haclient 组](#_add_sidadm_to_haclient_group)
+ [修改 HANA 的 SAP 配置文件](#_modify_sap_profile_for_hana)
+ [配置 SAPHana SR 集群挂钩以优化集群响应](#hook_saphanasr)
+ [配置 susTkOver 集群挂钩以确保集群意识到手动接管](#hook_sustkover)
+ [（可选）配置 susChkSrv 群集挂钩（快死索引服务器）](#hook_suschksrv)
+ [（可选）配置快速启动选项](#_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 SAPHanaSR
   ```

   有关更多详细信息，请查看 man 页面。

   ```
   # man SAPHanaSR
   # man SAPHanaSR.py
   ```

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

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

   ```
   # rpm -qa SAPHanaSR-angi
   ```

   有关更多详细信息，请查看 man 页面

   ```
   # man SAPHanaSR-angi
   # man SAPHanaSR.py
   ```

------

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

   默认情况下软件包安装在 `/usr/share/SAPHanaSR-angi` 或 `/usr/share/SAPHanaSR` 中。我们建议使用默认位置，但您可以选择将其复制到自定义目录，例如 `/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
   execution_order = 1
   
   [trace]
   ha_dr_saphanasr = info
   ```

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

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

   ```
   [ha_dr_provider_sushanasr]
   provider = susHanaSR
   path = /usr/share/SAPHanaSR-angi
   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
      <sid>adm 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 文件

## 配置 susTkOver 集群挂钩以确保集群意识到手动接管
<a name="hook_sustkover"></a>

susTkOver如果 SAP HANA 多状态资源（由 SAPHana 或 SAPHana控制器管理）处于活动状态，.py 可防止手动接管 HANA 主资源，除非集群设置为维护模式或 Linux 集群已停止。

有关更多详细信息，请参阅以下资源：

```
# man susTkOver.py
```

在用于上述钩子的步骤之外，还可以在每个节点上的 global.ini 中添加一个额外条目。必须重新启动 Hana：

```
[ha_dr_provider_susTkOver]
provider = susTkOver
path = /usr/share/SAPHanaSR
execution_order = 2
sustkover_timeout = 30

[trace]
ha_dr_sustkover = info
```

## （可选）配置 susChkSrv 群集挂钩（快死索引服务器）
<a name="hook_suschksrv"></a>

在默认配置中，即使受集群保护，SAP HANA 的故障 IndexServer 也会导致进程在本地重新启动。停止进程和重新加载内存所花费的时间可能会影响恢复时间目标（RTO）和性能。SAP HANA 挂钩 suschksRV 提供了一个选项来触发操作，例如基于 HA/DR 提供者挂钩方法 srServiceState Changed () 的屏蔽或关闭，这反过来又会触发故障转移。

**重要**  
因此此钩子可以使用几个不同的选项来配置。建议您查阅 man 页面或 SUSE 文档，并评估适合您的设置的最佳选择。

```
# man susChksrv.py
```

使用生产规模的系统测试场景，以评测恢复运营的时间是否符合您对不能正常使用的时间要求。

有关更多信息，请参阅 SUSE 博客：[Emergency Braking for SAP HANA Dying Index Server](https://www.suse.com/c/emergency-braking-for-sap-hana-dying-indexserver/) 

## （可选）配置快速启动选项
<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>

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

```
sidadm> systemctl --version
```

**操作系统版本**
+ SUSE Linux Enterprise Server 15（systemd 版本 234）

**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>_<hana_sys_nr>.service`。例如，对于 SID HDB 和实例编号 00，服务名称是 `SAPHDB_00.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
   ```