

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

# 操作系统要求
<a name="sap-hana-pacemaker-rhel-os-settings"></a>

此部分概述了 Red Hat Enterprise Linux for SAP（RHEL for SAP）集群节点所需的操作系统配置。请注意，这不是在上面运行 SAP HANA 的配置要求的完整列表 AWS，而是专门介绍集群管理先决条件。

请考虑使用配置管理工具或自动部署脚本，确保在集群基础设施中准确且可重复地完成设置。

**Topics**
+ [根访问](#_root_access)
+ [安装缺失的操作系统软件包](#packages)
+ [更新和检查操作系统版本](#_update_and_check_operating_system_versions)
+ [系统日志记录](#_system_logging)
+ [禁用 NetworkManager 云服务](#_disable_networkmanager_cloud_services)
+ [时间同步服务](#_time_synchronization_services)
+ [AWS CLI 配置文件](#shared_aws_cli_profile)
+ [Pacemaker 代理设置（可选）](#_pacemaker_proxy_settings_optional)
+ [为初始数据库访问添加重叠 IP](#_add_overlay_ip_for_initial_database_access)
+ [主机名解析](#_hostname_resolution)

**重要**  
以下配置必须在所有集群节点上执行。确保节点间的一致性以防止出现集群问题。

## 根访问
<a name="_root_access"></a>

验证两个集群节点上的根访问权限。本文档中的大多数设置命令都需要以根用户身份执行。除非明确说明了有其他选择，否则假定命令应以根用户身份运行。

## 安装缺失的操作系统软件包
<a name="packages"></a>

这适用于所有集群节点。您必须安装任意缺失的操作系统软件包。

Pacemaker 设置需要以下软件包及其依赖项。根据您的基准映像（例如，RHEL for SAP），这些软件包可能已经安装。


| 程序包 | 说明 | 类别 | 必需 | 配置模式 | 
| --- | --- | --- | --- | --- | 
|  chrony  |  时间同步  |  系统支持  |  强制性  |  全部  | 
|  pacemaker  |  集群资源管理器  |  核心集群  |  强制性  |  全部  | 
|  corosync  |  集群通信引擎  |  核心集群  |  强制性  |  全部  | 
|  pcs  |  集群管理 CLI  |  核心集群  |  强制性  |  全部  | 
|  resource-agents  |  基础资源代理  |  核心集群  |  强制性  |  全部  | 
|  resource-agents-cloud  |  云资源代理包括 aws-vpc-move-ip  |  核心集群  |  强制性  |  全部  | 
|  fence-agents-aws  |  隔离功能  |  核心集群  |  强制性  |  全部  | 
|  sap-hana-ha  |  新一代 HANA 系统复制代理  |  SAP HANA HA  |  强制性\$1  |  SAPHANAScaleup-sapangi，out-sapangi SAPHANAScale  | 
|  resource-agents-sap-hana  |  SAP HANA 资源代理  |  SAP HANA HA  |  强制性\$1  |  SAPHANAScale向上经典  | 
|  resource-agents-sap-hana-向外扩展  |  SAP HANA 资源代理  |  SAP HANA HA  |  强制性\$1  |  SAPHANAScale超越经典  | 
|  sos  |  信息收集  |  支持工具  |  强制性  |  全部  | 
|  sysstat  |  性能监控工具  |  支持工具  |  强制性  |  全部  | 
|  pcp-system-tools  |  性能 Co-Pilot 工具  |  监控  |  推荐  |  全部  | 

**注意**  
有关配置模式的更多信息，请参阅[部署类型的供应商支持](sap-hana-pacemaker-rhel-references.md#deployments-rhel)。`Mandatory*` 表示根据配置模式，此软件包必需。

```
#!/bin/bash

# Mandatory core packages for SAP HANA HA on AWS
mandatory_packages="pacemaker corosync pcs chrony resource-agents resource-agents-sap-hana resource-agents-cloud fence-agents-aws"

# HANA SR packages - Previous Generation (still in common use)
hanaSR_scaleup="resource-agents-sap-hana"  # For scale-up deployments
hanaSR_scaleout="resource-agents-sap-hana-scaleout"  # For scale-out deployment

# HANA SR packages - New Generation
hanaSR_angi="sap-hana-ha"  # New generation package for both scale-up and scale-out

# Recommended monitoring and support packages
support_packages="pcp-system-tools sos sysstat"

# Note: Choose hanaSR_scaleup/hanaSR_scaleout or hanaSR_angi
# Uncomment the appropriate line based on your deployment:
packages="${mandatory_packages} ${hanaSR_scaleup} ${support_packages}"
#packages="${mandatory_packages} ${hanaSR_scaleout} ${support_packages}"
#packages="${mandatory_packages} ${hanaSR_angi} ${support_packages}"

missingpackages=""

for package in ${packages}; do
    echo "Checking if ${package} is installed..."
    if ! rpm -q ${package} &>/dev/null; then
        echo " ${package} is missing and needs to be installed"
        missingpackages="${missingpackages} ${package}"
    fi
done

if [ -z "$missingpackages" ]; then
    echo "All packages are installed."
else
    echo "Missing mandatory packages: $(echo ${missingpackages} | tr ' ' '\n' | grep -E "^($(echo ${mandatory_packages} | tr ' ' '|'))$")"
    echo "Missing support packages: $(echo ${missingpackages} | tr ' ' '\n' | grep -E "^($(echo ${support_packages} | tr ' ' '|'))$")"
    echo -n "Do you want to install the missing packages (y/n)? "
    read response
    if [ "$response" = "y" ]; then
        dnf install -y $missingpackages
    fi
fi
```

如果您在安装高可用性软件包时遇到问题，请验证存储库访问权限：

```
$ sudo dnf repolist
```

对于 BYOL（自带许可证）系统，还需要使用 subscription-manager 验证订阅状态。

要安装或更新一个或多个软件并直接确认，请使用以下命令：

```
$ sudo dnf install <package_name(s)>
```

## 更新和检查操作系统版本
<a name="_update_and_check_operating_system_versions"></a>

您必须对各个节点更新和确认版本。将所有最新补丁应用到您的操作系统版本。这样可以确保错误得到解决并且新功能可用。

您可以使用 `dnf update` 命令单独更新补丁或更新所有系统补丁。建议在设置集群之前进行清理重启。

```
$ sudo dnf update
$ sudo reboot
```

比较两个集群节点上的操作系统软件包版本，并确保两个节点上的版本匹配。

## 系统日志记录
<a name="_system_logging"></a>

建议同时使用 systemd-journald 和 rsyslog 实现全面的日志记录。Systemd-journald（默认启用）提供结构化且编制了索引的日志记录，可以直接访问事件，而维护 rsyslog 是为了向后兼容，以及用于传统的基于文件的日志记录。这种双重方法可确保既采用了现代化的日志记录功能，又可以兼容现有的日志管理工具和实践。

 **1。启用并启动 rsyslog：**

```
# systemctl enable --now rsyslog
```

**2. （可选）为 systemd-journald 配置持久日志记录：**  
如果您不使用日志代理（例如 Uni AWS CloudWatch fied Agent 或 Vector）将日志传送到集中位置，则可能需要配置永久日志以在系统重启后保留日志。

```
# mkdir -p /etc/systemd/journald.conf.d
```

使用以下命令创建 `/etc/systemd/journald.conf.d/99-logstorage.conf`：

```
[Journal]
Storage=persistent
```

持续日志记录需要谨慎管理存储。在 `journald.conf` 中配置适当的保留和轮换设置，以防止日志占用过多的磁盘空间。查看`man journald.conf`可用选项 SystemMaxUse，例如 RuntimeMaxUse、和 MaxRetentionSec。

要应用更改，请重新启动 journald：

```
# systemctl restart systemd-journald
```

启用持久存储后，只会持久存储新的日志。当前启动会话中的现有日志将保留在易失性存储中，下次重启时就会丢失。

 **3。验证服务是否正在运行：**

```
# systemctl status systemd-journald
# systemctl status rsyslog
```

## 禁用 NetworkManager 云服务
<a name="_disable_networkmanager_cloud_services"></a>

使用红帽企业 Linux 8.6 或更高版本时，必须禁用 NetworkManager 云设置服务才能保持集群稳定性。这些服务可能会自动从网络接口删除重叠 IP 地址，对集群操作造成干扰。

在每个集群节点上运行以下命令：

```
# systemctl disable --now nm-cloud-setup.timer
# systemctl disable --now nm-cloud-setup
```

验证服务是否已禁用并停止：

```
# systemctl status nm-cloud-setup.timer
# systemctl status nm-cloud-setup
```

状态命令应将两个服务显示为“已禁用”和“非活动（僵死）”。

## 时间同步服务
<a name="_time_synchronization_services"></a>

时间同步对集群操作很重要。确保安装了 chrony rpm，并在配置文件中配置相应的时间服务器。

您可以使用 Amazon Time Sync Service，在 VPC 中运行的所有实例上都可以使用此服务。此服务不需要互联网访问。为确保闰秒处理的一致性，请勿将 Amazon Time Sync Service 与任何其他 ntp 时间同步服务器或服务器池混用。

创建或检查 `/etc/chrony.d/ec2.conf` 文件以定义服务器：

```
# Amazon EC2 time source config
server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
```

使用以下命令启动 chronyd 服务。

```
# systemctl enable --now chronyd.service
# systemctl status chronyd
```

有关更多信息，请参阅[为 Linux 实例设置时间](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html)。

## AWS CLI 配置文件
<a name="shared_aws_cli_profile"></a>

 AWS 群集资源代理使用 AWS 命令行界面 (AWS CLI)。您需要为根账户创建 AWS CLI 配置文件。

您可以`/root/.aws`手动编辑配置文件，也可以使用 `aws configure` AWS CLI 命令编辑配置文件。

您应跳过为访问密钥和秘密访问密钥提供信息的步骤。这些权限是通过附加到 Amazon EC2 实例的 IAM 角色提供的。

```
# aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: <region>
Default output format [None]:
```

除非进行了配置，否则配置文件名称为 `default`。如果您选择使用其他名称，则可以指定 `--profile`。在此示例中选择的名称是 cluster。它用于起搏器的 AWS 资源代理定义中。该 AWS 区域必须是实例的默认 AWS 区域。

```
# aws configure --profile cluster
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: <region>
Default output format [None]:
```

在主机上，您可以使用以下命令验证可用的配置文件：

```
# aws configure list-profiles
```

并可通过查询调用方身份来查看代入的角色是否已关联：

```
# aws sts get-caller-identity --profile=<profile_name>
```

## Pacemaker 代理设置（可选）
<a name="_pacemaker_proxy_settings_optional"></a>

如果您的 Amazon EC2 实例已配置为通过代理服务器访问互联网和/或 AWS 云，则需要在 pacemaker 配置中复制设置。有关更多信息，请参阅[使用 HTTP 代理](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-proxy.html)。

将以下行添加到 `/etc/sysconfig/pacemaker`：

```
http_proxy=http://<proxyhost>:<proxyport>
https_proxy=http://<proxyhost>:<proxyport>
no_proxy=127.0.0.1,localhost,169.254.169.254,fd00:ec2::254
```
+ 修改 proxyhost 和 proxyport 以匹配您的设置。
+ 确保排除了用于访问实例元数据的地址。
+ 将 no\$1proxy 配置为包含实例元数据服务的 IP 地址 — 169.254.169.254 () 和 fd00: ec2:: 254 ()。IPV4 IPV6该地址保持不变。

## 为初始数据库访问添加重叠 IP
<a name="_add_overlay_ip_for_initial_database_access"></a>

此步骤可选，只有在设置集群之前要求客户端能够连接到 SAP HANA 数据库时才需要。重叠 IP 稍后将由集群资源自动管理。

要启用初始数据库访问，请手动将重叠 IP 添加到主实例（当前运行 SAP HANA 数据库的位置）：

```
# ip addr add <hana_overlayip>/32 dev eth0
```
+ 此配置是临时配置，在实例重启后会丢失
+ 仅在当前的主实例上进行此配置
+ 配置完成后，集群将接管对此 IP 的管理

## 主机名解析
<a name="_hostname_resolution"></a>

您必须确保所有实例都能解析所有正在使用的主机名。将集群节点的主机名添加到所有集群节点上的 `/etc/hosts` 文件中。这样可以确保即使出现 DNS 问题也能解析集群节点的主机名。有关双节点集群，请参阅以下示例：

```
# cat /etc/hosts
10.2.10.1 hanahost01.example.com hanahost01
10.2.20.1 hanahost02.example.com hanahost02
172.16.52.1 hanahdb.example.com hanahdb
```

在此示例中，未提及 IPs 用于第二个群集环的辅助环路。它们仅在集群配置中使用。您可以分配虚拟主机名用于管理和标识用途。

**重要**  
重叠 IP 不在 VPC 范围中，无法从未与路由表关联的位置（包括本地）访问。