

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

# 操作
<a name="sap-hana-pacemaker-operations"></a>

**Topics**
+ [查看集群状态](sap-hana-pacemaker-sles-ops-cluster-state.md)
+ [执行计划内维护](sap-hana-pacemaker-sles-ops-planned-maint.md)
+ [故障后分析和重置](sap-hana-pacemaker-sles-ops-post-failure.md)
+ [提醒和监控](sap-hana-pacemaker-sles-ops-alert-monitor.md)

# 查看集群状态
<a name="sap-hana-pacemaker-sles-ops-cluster-state"></a>

您可以通过两种方式查看集群的状态：根据您的操作系统，或者使用 SUSE 提供的基于 Web 的控制台。

**Topics**
+ [基于操作系统](#_operating_system_based)
+ [SUSE Hawk2](#_suse_hawk2)

## 基于操作系统
<a name="_operating_system_based"></a>

有多个操作系统命令可以通过根用户身份运行，也可以通过具有适当权限的用户身份运行。这些命令让您能够大致了解集群及其服务的状态。有关更多详细信息，请参阅以下命令。

```
# crm status
```

示例输出：

```
Cluster Summary:
  * Stack: corosync
  * Current DC: sapsecdb (version 2.0.5+20201202.ba59be712-150300.4.45.2-2.0.5+20201202.ba59be712) - partition with quorum
  * Last updated: Wed Aug 20 14:05:19 2025
  * Last change:  Wed Aug 20 14:04:54 2025 by root via crm_attribute on hanahost01
  * 2 nodes configured
  * 6 resource instances configured

Node List:
  * Online: [ hanahost01 hanahost02  ]

Full List of Resources:
  * rsc_AWS_STONITH     (stonith:external/ec2):  Started sapsecdb
  * rsc_ip_HDB_HDB00    (ocf::heartbeat:aws-vpc-move-ip):        Started hanahost01
  * Clone Set: cln_SAPHanaTopology_HDB_HDB00 [rsc_SAPHanaTopology_HDB_HDB00]:
    * Started: [ hanahost01 hanahost02 ]
  * Clone Set: msl_SAPHana_HDB_HDB00 [rsc_SAPHana_HDB_HDB00] (promotable):
    * Masters: [ hanahost01 ]
    * Slaves: [ hanahost02 ]
```

下表提供了有用命令的列表。


| 命令 | 说明 | 
| --- | --- | 
|   `crm_mon`   |  在控制台上显示集群状态，并在进行更新时显示进展  | 
|   `crm_mon -1`   |  在控制台上仅显示一次集群状态，然后退出  | 
|   `crm_mon -Arnf`   |  -A 显示节点属性 -n 按节点对资源分组 -r 显示不活动的资源 -f 显示资源失败计数  | 
|   `crm help`   |  查看更多选项  | 
|   `crm_mon --help-all`   |  查看更多选项  | 

## SUSE Hawk2
<a name="_suse_hawk2"></a>

Hawk2 是基于 Web 的图形用户界面，用于管理和监控 Pacemaker 高可用性集群。此功能必须在集群中的每个节点上启用，才能将您的 Web 浏览器指向任何节点进行访问。使用以下命令来启用 Hawk2。

```
# systemctl enable --now hawk
# systemctl status hawk
```

使用以下 URL 检查安全组，确认是否可以从管理主机访问端口 7630。

```
https://your-server:7630/

e.g https://hanahost01:7630
```

有关更多信息，请参阅 SUSE 文档中的[使用 Hawk2 配置和管理群集资源](https://documentation.suse.com/sle-ha/12-SP5/html/SLE-HA-all/cha-conf-hawk2.html)。

# 执行计划内维护
<a name="sap-hana-pacemaker-sles-ops-planned-maint"></a>

在集群环境中对 SAP HANA 系统执行维护时，务必要了解集群如何与 SAP HANA 系统复制进行交互。计划内维护活动应谨慎进行，以防止不必要的失效转移或集群干预。

在对节点、资源和集群执行计划内维护时，有不同的选项可用。

**Topics**
+ [维护模式](#_maintenance_mode)
+ [将节点置于备用模式](#_placing_a_node_in_standby_mode)
+ [标记资源](#_moving_a_resource)

## 维护模式
<a name="_maintenance_mode"></a>

如果要对配置进行任何更改或控制集群中的资源和节点，请使用维护模式。在大多数情况下，这是执行管理任务的最安全的选项。

**Example**  
使用以下命令之一启用维护模式。  

```
# crm maintenance on
```

```
# crm configure property maintenance-mode="true"
```
使用以下命令之一关闭维护模式。  

```
# crm maintenance off
```

```
# crm configure property maintenance-mode="false"
```

## 将节点置于备用模式
<a name="_placing_a_node_in_standby_mode"></a>

要在避免系统完全中断的情况下对集群执行维护，对于移动活动的资源，建议的方法是将要从集群中移除的节点置于备用模式。

```
# crm node standby <hostname>
```

集群将清洁地重新放置资源，您可以执行活动，包括重新启动处于备用模式的节点。维护活动完成后，您可以使用以下命令重新引入节点。

```
# crm node online <hostname>
```

## 标记资源
<a name="_moving_a_resource"></a>

建议不要移动单独的资源，因为创建的迁移或移动约束是为了将资源锁定在新位置。您可以按照信息消息中的说明进行清除，但这会引入额外的设置。

```
 # crm resource move msl_SAPHanaController_HDB_HDB00 hanahost02
INFO: Move constraint created for msl_SAPHanaController_HDB_HDB00 to hanahost02
INFO: Use `crm resource clear msl_SAPHanaController_HDB_HDB00` to remove this constraint
```

注意：确切的资源名称将因您的 SAP HANA 系统 ID 和实例编号而异。请相应调整命令。

资源重新放置到目标位置后，使用以下命令。

```
# crm resource clear msl_SAPHanaController_HDB_HDB00
```

# 故障后分析和重置
<a name="sap-hana-pacemaker-sles-ops-post-failure"></a>

每次出现故障后都必须进行检查，来了解故障的根源以及集群的反应。在大多数情况下，集群可以防止应用程序中断。但是，通常需要手动操作才能将集群重置为保护状态，以防后续出现任何故障。

**Topics**
+ [查看日志](#_checking_the_logs)
+ [清理 crm 状态](#_cleanup_crm_status)
+ [重启出现故障的节点或 Pacemaker](#_restart_failed_nodes_or_pacemaker)
+ [深入分析](#_further_analysis)

## 查看日志
<a name="_checking_the_logs"></a>
+ 要对集群问题进行故障排除，请使用 journalctl 检查 Pacemaker 和 corosync 日志：

  ```
  # journalctl -u pacemaker -u corosync --since "1 hour ago"
  ```
  + 使用 `--since` 指定时间段（例如，“2 小时前”、“今天”）
  + 添加 `-f` 以实时跟踪日志
  + 与 grep 结合使用可执行特定搜索
+ 系统消息和资源代理活动可在 `/var/log/messages` 中找到。
+ 有关 HANA 特定的问题，请查看 HANA 跟踪目录。以 <sid>adm 身份登录时，可以使用“cdtrace”进行访问。另请查阅 HANA 跟踪目录中的 DB\$1<tenantdb> 目录。

## 清理 crm 状态
<a name="_cleanup_crm_status"></a>

如果使用 `crm status` 命令报告了失败的操作，并且已经对其进行了调查，您可以使用以下命令清除报告。

```
# crm resource cleanup <resource> <hostname>
```

## 重启出现故障的节点或 Pacemaker
<a name="_restart_failed_nodes_or_pacemaker"></a>

建议不要自动重启出现故障（或已隔离）的节点。这样操作员才有机会调查故障，并确保集群不会对资源状态做出假设。

您需要根据自己的方法重启实例或 Pacemaker 服务。

## 深入分析
<a name="_further_analysis"></a>

对于集群特定的问题，请使用 `hb_report`，对所有节点上的集群组件生成针对性分析：

```
# hb_report -f "YYYY-MM-DD HH:MM:SS" -t "YYYY-MM-DD HH:MM:SS" /tmp/hb_report
```

要快速分析最近的事件，您可以使用：

```
# crm history events
# crm history log
```
+ `hb_report` 和 `crm history` 命令都需要在节点之间使用无密码 SSH
+ 有关更多信息，请参阅 SUSE 文档：[Usage of hb\$1report for SLES HAE](https://www.suse.com/support/kb/doc/?id=000017501) 

# 提醒和监控
<a name="sap-hana-pacemaker-sles-ops-alert-monitor"></a>

本节涵盖以下主题。

**Topics**
+ [使用 Amazon CloudWatch 应用程序见解](#_using_amazon_cloudwatch_application_insights)
+ [使用集群警报代理](#_using_the_cluster_alert_agents)

## 使用 Amazon CloudWatch 应用程序见解
<a name="_using_amazon_cloudwatch_application_insights"></a>

为了监控和查看集群状态及操作，Application Insights 提供了多个指标用于监控入队复制状态、集群指标以及 SAP 和高可用性检查。EFS 和 CPU 监控等其他指标也有助于进行根本原因分析。

有关更多信息，请参阅[亚马逊 CloudWatch 应用程序见解入门和亚马逊](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/appinsights-getting-started.html)[上的 SAP HANA 高可用性 EC2](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/component-configuration-examples-hana-ha.html)。

## 使用集群警报代理
<a name="_using_the_cluster_alert_agents"></a>

在集群配置中，您可以调用外部程序（警报代理）来处理警报。这是一条*推送*通知。它通过环境变量传递有关事件的信息。

然后，您可以配置代理来发送电子邮件、记录到文件、更新监控系统等。例如，以下脚本可用于访问 Amazon SNS。

```
#!/bin/sh

# alert_sns.sh
# modified from /usr/share/pacemaker/alerts/alert_smtp.sh.sample

##############################################################################
# SETUP
# * Create an SNS Topic and subscribe email or chatbot
# * Note down the ARN for the SNS topic
# * Give the IAM Role attached to both Instances permission to publish to the SNS Topic
# * Ensure the aws cli is installed
# * Copy this file to /usr/share/pacemaker/alerts/alert_sns.sh or other location on BOTH nodes
# * Ensure the permissions allow for hacluster and root to execute the script
# * Run the following as root (modify file location if necessary and replace SNS ARN):
#
# SLES:
# crm configure alert aws_sns_alert /usr/share/pacemaker/alerts/alert_sns.sh meta timeout=30s timestamp-format="%Y-%m-%d_%H:%M:%S" to <{ arn:aws:sns:region:account-id:myPacemakerAlerts  }>
#
# RHEL:
# pcs alert create id=aws_sns_alert path=/usr/share/pacemaker/alerts/alert_sns.sh meta timeout=30s timestamp-format="%Y-%m-%d_%H:%M:%S"
# pcs alert recipient add aws_sns_alert value=arn:aws:sns:region:account-id:myPacemakerAlerts
##############################################################################

# Additional information to send with the alerts
node_name=`uname -n`
sns_body=`env | grep CRM_alert_`

# Required for SNS
TOKEN=$(/usr/bin/curl --noproxy '*' -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

# Get metadata
REGION=$(/usr/bin/curl --noproxy '*' -w "\n" -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document | grep region | awk -F\" '{print $4}')

sns_subscription_arn=${CRM_alert_recipient}

# Format depending on alert type
case ${CRM_alert_kind} in
   node)
     sns_subject="${CRM_alert_timestamp} ${cluster_name}: Node '${CRM_alert_node}' is now '${CRM_alert_desc}'"
   ;;
   fencing)
     sns_subject="${CRM_alert_timestamp} ${cluster_name}: Fencing ${CRM_alert_desc}"
   ;;
   resource)
     if [ ${CRM_alert_interval} = "0" ]; then
         CRM_alert_interval=""
     else
         CRM_alert_interval=" (${CRM_alert_interval})"
     fi
     if [ ${CRM_alert_target_rc} = "0" ]; then
         CRM_alert_target_rc=""
     else
         CRM_alert_target_rc=" (target: ${CRM_alert_target_rc})"
     fi
     case ${CRM_alert_desc} in
         Cancelled)
           ;;
         *)
           sns_subject="${CRM_alert_timestamp}: Resource operation '${CRM_alert_task}${CRM_alert_interval}' for '${CRM_alert_rsc}' on '${CRM_alert_node}': ${CRM_alert_desc}${CRM_alert_target_rc}"
           ;;
     esac
     ;;
   attribute)
     sns_subject="${CRM_alert_timestamp}: The '${CRM_alert_attribute_name}' attribute of the '${CRM_alert_node}' node was updated in '${CRM_alert_attribute_value}'"
     ;;
   *)
     sns_subject="${CRM_alert_timestamp}: Unhandled $CRM_alert_kind alert"
     ;;
esac

# Use this information to send the email
aws sns publish --topic-arn "${sns_subscription_arn}" --subject "${sns_subject}" --message "${sns_body}" --region ${REGION}
```