

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

# SAP HANA 和集群设置
<a name="sap-hana-pacemaker-sles-deployment-cluster"></a>

**Topics**
+ [SAP HANA 设置和 HSR](sap-hana-pacemaker-sles-hana-setup-hsr.md)
+ [SAP HANA 服务控制](sap-hana-pacemaker-sles-hana-control.md)
+ [集群节点设置](sap-hana-pacemaker-sles-cluster-node-setup.md)
+ [群集配置](sap-hana-pacemaker-sles-cluster-config.md)
+ [客户端连接](sap-hana-pacemaker-sles-client-connectivity.md)

# SAP HANA 设置和 HSR
<a name="sap-hana-pacemaker-sles-hana-setup-hsr"></a>

通过配置参数和创建所需备份，使 SAP HANA 做好系统复制（HSR）准备。

**Topics**
+ [查看 AWS 和 SAP 安装指南](#review_guides)
+ [检查 global.ini 参数](#global_ini)
+ [在主系统上创建 SAP HANA 备份](#pre_setup_backup)
+ [在主系统和辅助系统上配置系统复制](#register_hsr)
+ [检查 SAP 主机代理版本](#sap_host_agent)

**重要**  
本指南假设 SAP HANA Platform 已按照和 SAP 的指导作为扩展配置进行安装，其中两个 EC2 实例位于不同的可用区，或者作为横向扩展配置，在两个可用区中安装了多个 EC2 实例。 AWS 

## 查看 AWS 和 SAP 安装指南
<a name="review_guides"></a>
+  AWS 文档-开[启 SAP HANA 环境设置 AWS](https://docs.aws.amazon.com/sap/latest/sap-hana/std-sap-hana-environment-setup.html) 
+ SAP 文档：[SAP HANA Server Installation and Update Guide](https://help.sap.com/docs/SAP_HANA_PLATFORM/2c1988d620e04368aa4103bf26f17727/7eb0167eb35e4e2885415205b8383584.html) 

SAP 制作了文档，讲解如何使用 SAP HANA Cockpit、SAP HANA Studio 或命令行中的 `hdbnsutil` 来配置 SAP HANA 系统复制。请查看该文档中适合您的 SAP HANA 版本的内容，确保该指南没有变化，或者使用命令行以外的方法。
+ SAP 文档：[Configuring SAP HANA System Replication](https://help.sap.com/docs/SAP_HANA_PLATFORM/4e9b18c116aa42fc84c7dbfd02111aba/442bf027937746248f69701aa9b94112.html) 

## 检查 global.ini 参数
<a name="global_ini"></a>

以 <sid>adm 的身份运行以下命令。这些命令将提示输入 SYSTEMDB 数据库的系统密码。

**检查 log\$1mode 是否设置为 normal**  
确保在 global.ini 文件的 persistence 部分中，将配置参数 log\$1mode 设置为 `normal`：

```
hdbsql -jx -i <hana_sys_nr> -u system -d SYSTEMDB "SELECT VALUE FROM M_INIFILE_CONTENTS WHERE FILE_NAME = 'global.ini' AND SECTION = 'persistence' AND KEY = 'log_mode';"
```

例如：

```
hdbadm> hdbsql -jx -i 00 -u system -d SYSTEMDB "SELECT VALUE FROM M_INIFILE_CONTENTS WHERE FILE_NAME = 'global.ini' AND SECTION = 'persistence' AND KEY = 'log_mode';"
VALUE
"normal"
```

**查看 global.ini 文件复制**  
SAP HANA 系统复制功能需要在主系统和辅助系统之间采用一致的配置来确保正常运行，尤其是在失效转移场景中。global.ini 中的 `inifile_checker/replicate` 参数为满足该要求而提供了自动化解决方案。在主系统上启用该参数后，对主系统上的 ini 文件所做的任何配置更改都会自动同步到辅助站点。这样就无需手动复制配置，并有助于防止可能影响系统可用性的配置不匹配。该参数只需在主系统上配置，因为辅助系统将通过正常的系统复制过程接收这些配置更改。

将以下内容添加到 `global.ini` 中：

```
[inifile_checker]
replicate = true
```

请参阅 SAP Note [2978895 - Changing parameters on Primary and Secondary site of SAP HANA system](https://me.sap.com/notes/2978895) 

## 在主系统上创建 SAP HANA 备份
<a name="pre_setup_backup"></a>

 **获取所有活动数据库的列表：**

```
hdbsql -jx -i <hana_sys_nr> -u system -d SYSTEMDB "SELECT DATABASE_NAME,ACTIVE_STATUS from M_DATABASES"
```

例如：

```
hdbadm> hdbsql -jx -i 00 -u system -d SYSTEMDB "SELECT DATABASE_NAME,ACTIVE_STATUS from M_DATABASES"
Password:
DATABASE_NAME,ACTIVE_STATUS
"SYSTEMDB","YES"
"HDB","YES"
```

**创建 SYSTEMDB 和每个租户数据库的备份：**  
以下命令是针对基于文件的备份的示例。您可以使用首选工具和位置执行备份。如果使用文件系统（例如 /backup），请确保有足够的空间进行完整备份。

------
#### [ Backint ]

对于 SystemDB

```
hdbsql -i 00 -u SYSTEM  -d SYSTEMDB "BACKUP DATA USING BACKINT ('initial_hsr_db_SYSTEMDB') COMMENT 'Initial backup for HSR'";
```

对于每个租户数据库

```
hdbsql -i 00 -u SYSTEM  -d <TENANT_DB> "BACKUP DATA USING BACKINT ('initial_hsr_db_<TENANT_DB>') COMMENT 'Initial backup for HSR'";
```
+ 以 <sid>adm 的身份运行
+ 确保已正确配置 backint
+ 系统将提示您提供密码，您也可以使用 `-p password` 

------
#### [ File ]

对于 SystemDB

```
hdbsql -i <hana_sys_nr> -u system -d SYSTEMDB "BACKUP DATA USING FILE ('/<backup location>/initial_hsr_db_SYSTEMDB') COMMENT 'Initial backup for HSR'";
```

对于每个租户数据库

```
hdbsql -i <hana_sys_nr> -u system -d <TENANT_DB> "BACKUP DATA USING FILE ('/<backup location>/initial_hsr_db_<TENANT_DB>') COMMENT 'Initial backup for HSR'";
```
+ 以 <sid>adm 的身份运行
+ 确保备份位置有足够的空间和正确的文件权限
+ 系统将提示您提供密码，您也可以使用 `-p password` 

------

### 停止辅助系统并复制系统 PKI 密钥
<a name="copy_keys"></a>

**停止辅助系统**  
以 <sid>adm 的身份在辅助系统上停止 HANA 应用程序

```
sapcontrol -nr <hana_sys_nr> -function StopSystem <SID>
```

**复制系统 PKI 密钥**  
使用 scp、共享文件系统或 S3 存储桶，将以下 PKI SSFS 系统密钥和数据文件从主系统复制到辅助系统上的相同位置：

```
/usr/sap/<SID>/SYS/global/security/rsecssfs/data/SSFS_<SID>.DAT
/usr/sap/<SID>/SYS/global/security/rsecssfs/key/SSFS_<SID>.KEY
```

例如，可以使用 scp：

```
hdbadm>scp -p /usr/sap/HDB/SYS/global/security/rsecssfs/data/SSFS_HDB.DAT hdbadm@hanahost02:/usr/sap/HDB/SYS/global/security/rsecssfs/data/SSFS_HDB.DAT
hdbadm>scp -p /usr/sap/HDB/SYS/global/security/rsecssfs/key/SSFS_HDB.KEY hdbadm@hanahost02:/usr/sap/HDB/SYS/global/security/rsecssfs/key/SSFS_HDB.KEY
```

## 在主系统和辅助系统上配置系统复制
<a name="register_hsr"></a>

**在主系统上启用系统复制**  
确保主 SAP HANA 系统已**启动**，然后以 <sid>adm 的身份，使用唯一的站点名称启用系统复制：

```
hdbnsutil -sr_enable --name=<site_1>
```

例如：

```
hdbadm> hdbnsutil -sr_enable --name=siteA
```

**在辅助系统上注册系统复制**  
确保辅助 SAP HANA 系统**已停止**，然后以 <sid>adm 的身份，使用唯一的站点名称、主系统的连接详细信息和首选复制选项来启用系统复制。

```
hdbnsutil -sr_register \
 --name=<site_2> \
 --remoteHost=<hostname_1> \
 --remoteInstance=<hana_sys_nr> \
 --replicationMode=[sync|syncmem] \
 --operationMode=[logreplay|logreplay_readenabled]
```

例如：

```
hdbadm> hdbnsutil -sr_register --name=siteB --remoteHost=hanahost01 --remoteInstance=00 --replicationMode=syncmem --operationMode=logreplay
```

或者，如果您的设置要求对辅助服务器进行 active/active 读取访问权限，请执行以下操作：

```
hdbadm> hdbnsutil -sr_register --name=siteB --remoteHost=hanahost01 --remoteInstance=00 --replicationMode=syncmem --operationMode=logreplay_readenabled
```
+  `hostname_1` 是用于安装 SAP HANA 的主机名，可能是虚拟名称。
+ 复制模式可以是 `sync` 或 `syncmem`。
+ 要使复制支持集群系统和热备用系统，操作模式必须为 `logreplay` 或 `logreplay_readenabled`。
+ 有关更多信息，请参阅 SAP 文档。
  + SAP 文档：[Replication Modes for SAP HANA System Replication](https://help.sap.com/docs/SAP_HANA_PLATFORM/6b94445c94ae495c83a19646e7c3fd56/c039a1a5b8824ecfa754b55e0caffc01.html) 
  + SAP 文档：[Operaton Modes for SAP HANA System Replication](https://help.sap.com/docs/SAP_HANA_PLATFORM/6b94445c94ae495c83a19646e7c3fd56/627bd11e86c84ec2b9fcdf585d24011c.html) 
  + SAP 文档：[SAP HANA 系统复制- Active/Active （已启用读取）](https://help.sap.com/docs/SAP_HANA_PLATFORM/6b94445c94ae495c83a19646e7c3fd56/fe5fc53706a34048bf4a3a93a5d7c866.html) 

## 检查 SAP 主机代理版本
<a name="sap_host_agent"></a>

SAP 主机代理用于 SAP 实例的控制和监控。此代理由 SAP 集群资源代理和钩子使用。建议您在所有实例上安装主机代理的最新版本。有关更多详细信息，请参阅 [SAP Note 2219592 – Upgrade Strategy of SAP Host Agent](https://me.sap.com/notes/2219592)。

使用以下命令检查主机代理的版本，在所有 SAP HANA 节点上重复此操作：

```
# /usr/sap/hostctrl/exe/saphostexec -version
```

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

# 集群节点设置
<a name="sap-hana-pacemaker-sles-cluster-node-setup"></a>

使用 Corosync 并配置所需的身份验证，在节点之间建立集群通信。

**Topics**
+ [部署仲裁生成器节点（仅限横向扩展集群）](#_deploy_a_majority_maker_node_scale_out_clusters_only)
+ [更改 hacluster 密码](#_change_the_hacluster_password)
+ [设置无密码身份验证](#_setup_passwordless_authentication)
+ [配置集群节点](#_configure_the_cluster_nodes)
+ [修改创建的 Corosync 配置](#_modify_generated_corosync_configuration)
+ [验证 Corosync 配置](#_verify_corosync_configuration)
+ [配置集群服务](#_configure_cluster_services)
+ [验证集群状态](#_verify_cluster_status)

## 部署仲裁生成器节点（仅限横向扩展集群）
<a name="_deploy_a_majority_maker_node_scale_out_clusters_only"></a>

**注意**  
只有拥有两个以上节点的集群才需要此选项。

在中部署 SAP HANA Scale-Out 集群时 AWS，必须在第三个可用区 (AZ) 中包含一个多数制造商节点。仲裁生成器（平局决胜机制）节点在一个可用区出现故障时，通过保留仲裁权来确保集群保持正常运行。要使横向扩展集群正常运行，必须至少有一个可用区中的所有节点以及仲裁生成器节点在运行。如果不满足此最低要求，则集群将失去其仲裁状态，所有剩余的 SAP HANA 节点都将被隔离。

多数制造商要求最低 EC2 实例配置为 2 v CPUs、2 GB RAM 和 50 GB 磁盘空间；此实例专门用于法定人数管理，不托管 SAP HANA 数据库或任何其他集群资源。

## 更改 hacluster 密码
<a name="_change_the_hacluster_password"></a>

在所有集群节点上，更改操作系统用户 hacluster 的密码：

```
# passwd hacluster
```

## 设置无密码身份验证
<a name="_setup_passwordless_authentication"></a>

SUSE 提供了多种报告工具，可以用来获取更全面、更易于使用的集群活动视图。其中许多工具都需要不输入密码来访问两个节点的权限。SUSE 建议由根用户执行此设置。

有关更多详细信息，请参阅 SUSE 文档 [Usage of hb\$1report for SLES HAE](https://www.suse.com/support/kb/doc/?id=000017501) 中的“Configuration to collect cluster report as root with root SSH access between cluster nodes”部分。

**警告**  
在实施此配置之前，请查看配置对组织的安全影响，包括根访问权限控制和网络分段。

## 配置集群节点
<a name="_configure_the_cluster_nodes"></a>

在第一个节点上初始化集群框架，包括所有已知的集群节点。

在主节点上以根用户身份运行以下命令：

```
# crm cluster init -u -n <cluster_name> -N <hostname_1> -N <hostname_2>
```

 *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：

```
hanahost01:~ # crm cluster init -u -n myCluster -N hanahost01 -N hanahost02
INFO: Detected "amazon-web-services" platform
INFO: Loading "default" profile from /etc/crm/profiles.yml
INFO: Configure Corosync (unicast):
  This will configure the cluster messaging layer.  You will need
  to specify a network address over which to communicate (default
  is eth0's network, but you can use the network address of any
  active interface).

Address for ring0 [10.2.10.1]
Port for ring0 [5405]

Do you wish to use SBD (y/n)? n
WARNING: Not configuring SBD - STONITH will be disabled.

Do you wish to configure a virtual IP address (y/n)? n

Do you want to configure QDevice (y/n)? n
INFO: Done (log saved to /var/log/crmsh/crmsh.log)

INFO: Adding node hanahost02 to cluster
INFO: Running command on hanahost02: crm cluster join -y -c root@hanahost01
...
INFO: Done (log saved to /var/log/crmsh/crmsh.log)
```

此命令：
+ 初始化名为 `myCluster` 的双节点集群 
+ 配置单播通信（-u）
+ 设置基本 corosync 配置
+ 自动将第二个节点加入集群
+ 我们`fence_aws`不会像在环境中用于 STONITH 那样配置 SBD。 AWS 
+ QDevice 配置是可能的，但本文档中没有介绍。请参阅 [SUSE Linux 企业高可用性文档- QDevice 和 QNet D](https://documentation.suse.com/en-us/sle-ha/15-SP7/html/SLE-HA-all/cha-ha-qdevice.html).
+ 对于具有两个以上节点的集群，可以在初始化期间使用额外的 `-N <hostname_3>` 参数添加其他节点，也可以稍后在每个新节点上使用以下命令添加：

  ```
  # crm cluster join -c <hostname_1>
  ```

## 修改创建的 Corosync 配置
<a name="_modify_generated_corosync_configuration"></a>

初始化集群后，需要对生成的 corosync 配置进行一些修改，以便针对云环境进行优化。

 **1。编辑 corosync 配置：**

```
# vi /etc/corosync/corosync.conf
```

生成的文件通常如以下所示：

```
# Please read the corosync.conf.5 manual page
totem {
        version: 2
        cluster_name: myCluster
        clear_node_high_bit: yes
        interface {
                ringnumber: 0
                mcastport: 5405
                ttl: 1
        }

        transport: udpu
        crypto_hash: sha1
        crypto_cipher: aes256
        token: 5000     # This needs to be changed
        join: 60
        max_messages: 20
        token_retransmits_before_loss_const: 10
}

logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        logfile: /var/log/cluster/corosync.log
        to_syslog: yes
        debug: off
        timestamp: on
        logger_subsys {
                subsys: QUORUM
                debug: off
        }

}

nodelist {
    node {
        ring0_addr: <node1_primary_ip>    # Only single ring configured
        nodeid: 1
    }
    node {
        ring0_addr: <node2_primary_ip>    # Only single ring configured
        nodeid: 2
    }
}

quorum {

        # Enable and configure quorum subsystem (default: off)
        # see also corosync.conf.5 and votequorum.5
        provider: corosync_votequorum
        expected_votes: 2
        two_node: 1
}

totem {
    version: 2
    token: 5000             # This needs to be changed
    transport: udpu
    interface {
        ringnumber: 0
        mcastport: 5405
    }
}
```

 **2。修改配置以添加第二个环路并优化设置：**

```
totem {
    token: 15000           # Changed from 5000 to 15000
    rrp_mode: passive      # Added for dual ring support
}

nodelist {
    node {
        ring0_addr: <node1_primary_ip>     # Primary network
        ring1_addr: <node1_secondary_ip>   # Added secondary network
        nodeid: 1
    }
    node {
        ring0_addr: <node2_primary_ip>     # Primary network
        ring1_addr: <node2_secondary_ip>   # Added secondary network
        nodeid: 2
    }
}
```

 *示例 IP 配置：*


| 网络接口 | 节点 1 | 节点 2 | 
| --- | --- | --- | 
|  ring0\$1addr  |  10.2.10.1  |  10.2.20.1  | 
|  ring1\$1addr  |  10.2.10.2  |  10.2.20.2  | 

 **3。将修改后的配置同步到所有节点：**

```
# csync2 -f /etc/corosync/corosync.conf
```

 **4。重启集群** 

```
# crm cluster restart --all
```

## 验证 Corosync 配置
<a name="_verify_corosync_configuration"></a>

验证网络环路是否活动：

```
# corosync-cfgtool -s
```

 *输出示例：*

```
Printing ring status.
Local node ID 1
RING ID 0
        id      = 10.2.10.1
        status  = ring 0 active with no faults
RING ID 1
        id      = 10.2.10.2
        status  = ring 1 active with no faults
```

两个网络环路都应报告“活动且没有故障”。如果缺少任何一个环路，请查看 corosync 配置并检查 `/etc/corosync/corosync.conf` 更改是否已同步到辅助节点。您可能需要手动执行此操作。如有必要，请重启集群。

## 配置集群服务
<a name="_configure_cluster_services"></a>

启用 Pacemaker，使其在重启后自动启动：

```
# systemctl enable pacemaker
```

启用 Pacemaker 还可以通过服务依赖关系来处理 corosync。集群将在重启后自动启动。对于故障排除场景，您可以改为选择在启动后手动启动服务。

## 验证集群状态
<a name="_verify_cluster_status"></a>

 **1。检查 Pacemaker 服务状态：**

```
# systemctl status pacemaker
```

 **2。验证集群状态：**

```
# crm_mon -1
```

 *输出示例：*

```
Cluster Summary:
  * Stack: corosync
  * Current DC: hanahost01 (version 2.1.5+20221208.a3f44794f) - partition with quorum
  * 2 nodes configured
  * 0 resource instances configured

Node List:
  * Online: [ hanahost01 hanahost02 ]

Active Resources:
  * No active resources
```

# 群集配置
<a name="sap-hana-pacemaker-sles-cluster-config"></a>

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

**Topics**
+ [为资源创建做准备](#_prepare_for_resource_creation)
+ [集群引导](#cluster-bootstrap)
+ [创建 STONITH 隔离资源](#resource-stonith)
+ [创建重叠 IP 资源](#resource-overlayip)
+ [创建 SAPHana拓扑资源](#resource-saphanatop)
+ [创建 SAPHANA 资源（基于资源代理 SAPHana 或 SAPHana控制器）](#resource-saphana)
+ [创建资源约束](#resource-constraints)
+ [激活集群](#_activate_cluster)
+ [重置配置 – 可选](#_reset_configuration_optional)

## 为资源创建做准备
<a name="_prepare_for_resource_creation"></a>

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

运行以下命令，将集群置于维护模式：

```
# crm maintenance on
```

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

```
# crm status
```

**注意**  
维护模式分为两种类型：  
集群范围的维护（使用 `crm maintenance on` 进行设置）
特定于节点的维护（使用 `crm node maintenance nodename` 进行设置）
更改配置时，请务必使用集群范围的维护模式。有关特定于节点的操作，例如硬件维护，请参阅“操作”以了解正确的步骤。  
要在配置完成后禁用维护模式，请执行以下操作：  

```
# crm maintenance off
```

## 集群引导
<a name="cluster-bootstrap"></a>

### 配置集群属性
<a name="_configure_cluster_properties"></a>

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

```
# crm configure property stonith-enabled="true"
# crm configure property stonith-timeout="600"
# crm configure property priority-fencing-delay="20"
# crm configure property stonith-action="off"
```
+ 建议**priority-fencing-delay**在网络分区事件期间保护 SAP HANA 节点。进行集群分区时，这种延迟会优先考虑托管更高优先级资源的节点，而 SAP HANA 主（已提升）实例将获得额外的优先级权重。这有助于确保主 HANA 节点在脑裂场景中存活下来。建议的 20 秒 priority-fencing-delay与 stonith 资源中配置的 pcmk\$1delay\$1max（10 秒）配合使用，在进行围栏之前，总共可能延迟长达 30 秒
+ 设置 **stonith-action="off"** 可确保被隔离的节点在手动调查之前一直处于关闭状态，从而防止可能受损的节点自动重新加入集群。在首选自动恢复时，“reboot”可以作为替代方案，但建议对 SAP HANA 集群使用“off”，以防止可能出现的数据损坏并启用根本原因分析

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

```
# crm configure show property
```

### 配置资源默认值
<a name="_configure_resource_defaults"></a>

配置资源默认行为：

```
# crm configure rsc_defaults resource-stickiness="1000"
# crm configure rsc_defaults migration-threshold="5000"
```
+ **resource-stickiness** 值可以防止不必要的资源移动，从而有效地为移动资源设置“成本”。值为 1000 会强烈推荐将资源保留在当前节点上，避免与移动相关的停机时间。
+ **migration-threshold** 为 5000 可确保集群在声明该节点不适合托管资源之前，多次尝试在同一节点上恢复资源。

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

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

```
# crm configure show rsc_defaults
```

### 配置操作默认值
<a name="_configure_operation_defaults"></a>

配置操作超时默认值：

```
# crm configure op_defaults timeout="600"
```
+ **op\$1defaults timeout** 可确保所有集群操作的默认超时为合适的 600 秒。各个资源可以用自己的超时值覆盖这些默认值。

要验证您的操作默认设置，请执行以下操作：

```
# crm configure show op_defaults
```

## 创建 STONITH 隔离资源
<a name="resource-stonith"></a>

建议在 SUSE 上 AWS 部署 AWS STONITH 资源代理，因为它利用 AWS API 通过停止 EC2 实例来安全地屏蔽出现故障或无法传染的节点。请参阅[Pacemaker – STONITH 隔离代理](sap-hana-pacemaker-sles-concepts.md#fencing-sles)。

使用资源代理 **`external/ec2`** 创建 STONITH 资源：

```
# crm configure primitive <stonith_resource_name> stonith:external/ec2 \
params tag="<cluster_tag>" profile="<cli_cluster_profile>" pcmk_delay_max="10" \
op start interval="0" timeout="180" \
op stop interval="0" timeout="180" \
op monitor interval="300" timeout="60"
```

详细信息：
+  **tag**-将实例与此集群配置关联的 EC2 实例标签密钥名称。此标签密钥在 AWS 账户中必须是唯一的，并且其值必须与实例主机名相匹配。[创建亚马逊 EC2 STONITH 代理使用的亚马逊 EC2 资源标签](sap-hana-pacemaker-sles-ec2-configuration.md#create-cluster-tags)有关 EC2 实例标记配置，请参阅。
+  **profil** e-（可选）用于 AP AWS I 身份验证的 CLI 配置文件名称。使用 `aws configure list-profiles` 验证配置文件是否存在。如果配置文件没有明确地进行配置，则将使用默认配置文件。
+  **pcmk\$1delay\$1max**：执行隔离操作前的随机延迟。与集群属性 `priority-fencing-delay` 配合使用以防止同时执行隔离。过去会设置为较高的值（45 秒），但现在由 `priority-fencing-delay` 处理主节点保护，较低的值（10 秒）便已足够。
+  *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：

```
# crm configure primitive res_stonith_ec2 stonith:external/ec2 \
params tag="pacemaker" profile="cluster" \
pcmk_delay_max="10" \
op start interval="0" timeout="180" \
op stop interval="0" timeout="180" \
op monitor interval="300" timeout="60"
```

## 创建重叠 IP 资源
<a name="resource-overlayip"></a>

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

创建 IP 资源：

```
# crm configure primitive rsc_ip_<SID>_HDB<hana_sys_nr> ocf:heartbeat:aws-vpc-move-ip \
params 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 概念](sap-hana-pacemaker-sles-concepts.md#overlay-ip-sles) 
+  **routing\$1tab** le-需要更新的 AWS 路由表 ID。要指定多个路由表，可以使用逗号分隔（例如，`routing_table=rtb-xxxxxroutetable1,rtb-xxxxxroutetable2`）。确保已按照[为叠加层添加 VPC 路由表条目 IPs](sap-hana-pacemaker-sles-infra-setup.md#rt-sles)中的说明创建初始条目 
+  **interface**：IP 地址的网络接口（通常为 eth0）
+  **profil** e-（可选）用于 AP AWS I 身份验证的 CLI 配置文件名称。使用 `aws configure list-profiles` 验证配置文件是否存在。如果配置文件没有明确地进行配置，则将使用默认配置文件。
+  **awscli**-（可选）CL AWS I 可执行文件的路径。默认路径为 `/usr/bin/aws`。仅当 AWS CLI 安装在其他位置时才指定此参数。要确认系统上的路径，请运行`which aws`。
+  *使用[参数参考](sap-hana-pacemaker-rhel-parameters.md)中的值的示例*：  
**Example**  

  ```
  # crm configure primitive rsc_ip_HDB_HDB00 ocf:heartbeat:aws-vpc-move-ip \
  params 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"
  ```

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

```
# crm configure primitive rsc_ip_<SID>_HDB<hana_sys_nr>_readenabled ocf:heartbeat:aws-vpc-move-ip \
params 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"
```
+  *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：  
**Example**  

  ```
  # 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，则需要另外两个参数。

```
# crm configure primitive rsc_ip_<SID>_HDB<hana_sys_nr> ocf:heartbeat:aws-vpc-move-ip \
params 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"
```

其他详细信息：
+  **查找类型 =** NetworkInterfaceId
+  **routing\$1table\$1role** = "arn:aws:iam::<shared\$1vpc\$1account\$1id>:role/<sharing\$1vpc\$1account\$1cluster\$1role>"

## 创建 SAPHana拓扑资源
<a name="resource-saphanatop"></a>

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

### SAPHanaSR-angi 和经典部署
<a name="_saphanasr_angi_and_classic_deployments"></a>

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

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

```
# man ocf_suse_SAPHanaTopology
```

------
#### [ For scale-up (2-node) ]

对于原始资源：

```
# crm configure primitive rsc_SAPHanaTopology_<SID>_HDB<hana_sys_nr> ocf:suse:SAPHanaTopology \
params SID="<SID>" \
InstanceNumber="<hana_sys_nr>" \
op start interval="0" timeout="600" \
op stop interval="0" timeout="300" \
op monitor interval="10" timeout="600"
```

对于克隆资源：

```
# crm configure clone cln_SAPHanaTopology_<SID>_HDB<hana_sys_nr> rsc_SAPHanaTopology_<SID>_HDB<hana_sys_nr> \
meta clone-node-max="1" interleave="true" clone-max="2"
```
+  *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：  
**Example**  

  ```
  # crm configure primitive rsc_SAPHanaTopology_HDB_HDB00 ocf:suse:SAPHanaTopology \
  params SID="HDB" \
  InstanceNumber="00" \
  op start interval="0" timeout="600" \
  op stop interval="0" timeout="300" \
  op monitor interval="10" timeout="600"
  
  # crm configure clone cln_SAPHanaTopology_HDB_HDB00 rsc_SAPHanaTopology_HDB_HDB00 \
  meta clone-node-max="1" interleave="true" clone-max="2"
  ```

------
#### [ For scale-out ]

对于原始资源：

```
# crm configure primitive rsc_SAPHanaTopology_<SID>_HDB<hana_sys_nr> ocf:suse:SAPHanaTopology \
params SID="<SID>" InstanceNumber="<hana_sys_nr>" \
op start interval="0" timeout="600" \
op stop interval="0" timeout="300" \
op monitor interval="10" timeout="600"
```

对于克隆资源：

```
# crm configure clone cln_SAPHanaTopology_<SID>_HDB<hana_sys_nr> rsc_SAPHanaTopology_<SID>_HDB<hana_sys_nr> \
meta clone-node-max="1" interleave="true" clone-max="<number-of-nodes>"
```
+  *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：  
**Example**  

  ```
  # crm configure primitive rsc_SAPHanaTopology_HDB_HDB00 ocf:suse:SAPHanaTopology \
  params SID="HDB" InstanceNumber="00" \
  op start interval="0" timeout="600" \
  op stop interval="0" timeout="300" \
  op monitor interval="10" timeout="600"
  
  # crm configure clone cln_SAPHanaTopology_HDB_HDB00 rsc_SAPHanaTopology_HDB_HDB00 \
  meta 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 或 SAPHana控制器）
<a name="resource-saphana"></a>

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

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

### SAPHanaSR-angi 部署（在 SLES 15 及以上版本中可用） SP4
<a name="_saphanasr_angi_deployments_available_in_sles_15_sp4"></a>

在 SLES 15 及更高版本上推出 SP4 并推荐用于新部署。具有下一代系统复制架构 (SAPHanaSR-angi) 的 SAPHana控制器资源代理为纵向扩展和横向扩展部署提供了改进的集成和管理功能。有关详细信息：

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

```
# man ocf_suse_SAPHanaController
```

------
#### [ For scale-up (2-node) ]

创建原始资源

```
# crm configure primitive rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> ocf:suse:SAPHanaController \
params 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" \
meta priority="100"
```

创建克隆

```
# crm configure clone msl_SAPHanaController_<SID>_HDB<hana_sys_nr> rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> \
meta clone-node-max="1" interleave="true" clone-max="2"
```
+  *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：  
**Example**  

  ```
  # crm configure primitive rsc_SAPHanaController_HDB_HDB00 ocf:suse: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" \
  meta priority="100"
  # crm configure clone msl_SAPHanaController_HDB_HDB00 rsc_SAPHanaController_HDB_HDB00 \
  meta clone-node-max="1" interleave="true" clone-max="2"
  ```

------
#### [ For scale-out ]

创建原始资源

```
# crm configure primitive rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> ocf:suse:SAPHanaController \
params 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"
```

创建克隆

```
# crm configure clone msl_SAPHanaController_<SID>_HDB<hana_sys_nr> rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> \
meta clone-node-max="1" interleave="true" clone-max="<number-of-nodes>"
```
+  *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：  
**Example**  

  ```
  # crm configure primitive rsc_SAPHanaController_HDB_HDB00 ocf:suse: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"
  
  # crm configure clone msl_SAPHanaController_HDB_HDB00 rsc_SAPHanaController_HDB_HDB00 \
  meta 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 个节点，不包括仲裁生成器节点）
+  **PREFER\$1SITE\$1TAKEOVER** 定义是否首选接管辅助系统。查看非标准部署。
+  **AUTOMATED\$1REGISTER** 定义是否应将前主系统注册为辅助系统。查看非标准部署。
+  **DUPLICATE\$1PRIMARY\$1TIMEOUT** 是等待时间，用于尽可能降低意外的双主系统风险。
+  **meta pri** ority-将其设置为 100 可以同时 priority-fencing-delay确保正确的故障转移顺序并防止同步屏蔽操作
+ 对于较大的数据库，可能需要增加启动和停止超时值（3600 秒）。根据您的数据库大小和观测 startup/shutdown 时间调整这些值

### 经典部署
<a name="_classic_deployments"></a>

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

```
# man ocf_suse_SAPHana
```

------
#### [ For scale-up (2-node) ]

使用 SAPHana 资源代理创建基元

```
# crm configure primitive rsc_SAPHana_<SID>_HDB<hana_sys_nr> ocf:suse:SAPHana \
params 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="Master" timeout="700" \
op monitor interval="61" role="Slave" timeout="700" \
meta priority="100"
```

创建克隆

```
# crm configure clone msl_SAPHana_<SID>_HDB<hana_sys_nr> rsc_SAPHana_<SID>_HDB<hana_sys_nr> \
meta clone-node-max="1" interleave="true" clone-max="2"
```
+  *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：

  ```
  # crm configure primitive rsc_SAPHana_HDB_HDB00 ocf:suse:SAPHana \
  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="Master" timeout="700" \
  op monitor interval="61" role="Slave" timeout="700" \
  meta priority="100"
  
  # crm configure clone msl_SAPHana_HDB_HDB00 rsc_SAPHana_HDB_HDB00 \
  meta clone-node-max="1" interleave="true" clone-max="2"
  ```

------
#### [ For scale-out ]

使用 SAPHana控制器资源代理创建基元：

```
# crm configure primitive rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> ocf:suse:SAPHanaController \
params 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="Master" timeout="700" \
op monitor interval="61" role="Slave" timeout="700"
```

创建克隆

```
# crm configure clone msl_SAPHanaController_<SID>_HDB<hana_sys_nr> rsc_SAPHanaController_<SID>_HDB<hana_sys_nr> \
meta clone-node-max="1" interleave="true" clone-max="<number-of-nodes>"
```
+  *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：

  ```
  # crm configure primitive rsc_SAPHanaController_HDB_HDB00 ocf:suse: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="Master" timeout="700" \
  op monitor interval="61" role="Slave" timeout="700"
  
  # crm configure clone msl_SAPHana_HDB_HDB00 rsc_SAPHana_HDB_HDB00 \
  meta 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 个节点，不包括仲裁生成器节点）
+  **PREFER\$1SITE\$1TAKEOVER** 定义是否首选接管辅助系统。查看非标准部署。
+  **AUTOMATED\$1REGISTER** 定义是否应将前主系统注册为辅助系统。查看非标准部署。
+  **DUPLICATE\$1PRIMARY\$1TIMEOUT** 是等待时间，用于尽可能降低意外的双主系统风险。
+  **meta pri** ority-将其设置为 100 可以同时 priority-fencing-delay确保正确的故障转移顺序并防止同步屏蔽操作
+ 对于较大的数据库，可能需要增加启动和停止超时值（3600 秒）。根据您的数据库大小和观测 startup/shutdown 时间调整这些值

## 创建资源约束
<a name="resource-constraints"></a>

以下约束是必需的。

### 顺序约束
<a name="_order_constraint"></a>

此约束定义了 SAPHana拓扑和 SAPHana 资源之间的起始顺序：

```
# crm configure order <order_rule_name> Optional: <SAPHanaTopology_clone> <SAPHana/SAPHanaController_Clone>
```
+  *示例*：

  ```
  # crm configure order ord_SAPHana Optional: cln_SAPHanaTopology_HDB_HDB00 msl_SAPHana_HDB_HDB00
  ```

### 主机托管约束
<a name="_colocation_constraint"></a>

#### 主资源的 IP
<a name="_ip_with_primary"></a>

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

```
# crm configure colocation <colocation_rule_name> 2000: <ip_resource_name> <saphana/saphanacontroller name>:Master
```
+  *示例*：

  ```
  # crm configure colocation col_ip_SAPHana_Primary 2000: rsc_ip_HDB_HDB00 msl_SAPHana_HDB_HDB00:Master
  ```

#### ReadOnly 带辅助的 IP（仅适用于 ReadOnly 模式）
<a name="_readonly_ip_with_secondary_only_for_readonly_patterns"></a>

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

```
# crm configure colocation <colocation_rule_name> 2000: rsc_ip_<SID>_HDB<hana_sys_nr>_readenabled msl_SAPHana/SAPHanaController_<SID>_HDB<hana_sys_nr>:Unpromoted
```
+  *示例*：

  ```
  # crm configure colocation col_ip_readenabled_SAPHana_Secondary 2000: rsc_ip_HDB_HDB00_readenabled msl_SAPHana_HDB_HDB00:Unpromoted
  ```

### 位置约束
<a name="_location_constraint"></a>

#### 仲裁生成器上没有 SAP HANA 资源（仅限横向扩展）
<a name="_no_sap_hana_resources_on_the_majority_maker_scale_out_only"></a>

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

```
# crm configure location loc_SAPHanaTopology_avoid_majority_maker cln_SAPHanaTopology_<SID>_HDB<hana_sys_nr> -inf:<hostname_mm>

# crm configure location loc_SAPHana/SAPHanaController_avoid_majority_maker msl_SAPHana/SAPHanaController_<SID>_HDB<hana_sys_nr> -inf:<hostname_mm>
```
+  *示例*：

  ```
  # crm configure location loc_SAPHanaTopology_avoid_majority_maker cln_SAPHanaTopology_HDB_HDB00 -inf:hanamm
  # crm configure location loc_SAPHana_avoid_majority_maker msl_SAPHana_HDB_HDB00 -inf:hanamm
  ```

## 激活集群
<a name="_activate_cluster"></a>

使用 `crm config show` 和 `crm config edit` 来检查是否正确输入了所有值。

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

```
# crm maintenance off
```

## 重置配置 – 可选
<a name="_reset_configuration_optional"></a>

**重要**  
以下说明可帮助您重置完整配置。只有当您想从头开始进行设置时，才运行这些命令。您可以使用 crm edit 命令进行小的更改。

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

```
# crm config show > /tmp/crmconfig_backup.txt
```

运行以下命令可清除当前配置：

```
# crm configure erase
```

执行上述擦除命令后，它将从集群信息库（CIB）中删除所有集群资源，并断开从 corosync 到集群的通信。在开始资源配置之前，请运行 crm cluster restart，以便集群重新建立与 corosync 的通信并检索配置。集群的重启会移除维护模式。在开始其他配置和资源设置之前，请重新应用。

# 客户端连接
<a name="sap-hana-pacemaker-sles-client-connectivity"></a>

对于正确连接 SAP HANA 数据库：
+ 确保在所有应用程序服务器中都能正确解析重叠 IP
+ DNS 配置或本地主机条目必须有效
+ 网络路由必须正确配置
+ SAP HANA 客户端库必须已安装并处于最新状态

确保 SAP HANA 数据库的连接数据引用了与重叠 IP 关联的主机名。有关更多信息，请参阅 SAP 文档：[Setting Connectivity Data for the SAP HANA Database](https://help.sap.com/docs/SLTOOLSET/39c32e9783f6439e871410848f61544c/b7ed2d55b0a7f857e10000000a441470.html?version=CURRENT_VERSION_SWPM20) 

使用 R3trans 实用程序测试数据库连接：

```
sidadm> R3trans -d
```

查看其他需要高可用性的 SAP HANA 连接。虽然应用程序连接应使用重叠 IP，但管理工具（SAP HANA Studio、hdbsql 命令、监控工具）需要直接连接到单独 SAP HANA 实例。