

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

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

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

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

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

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

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

```
# pcs status --full
```

注意：如果您不需要查看节点属性，请省略 `--full` 以获得更简洁的输出。

示例输出：

```
Cluster name: hacluster
Cluster Summary:
  * Stack: corosync
  * Current DC: hanahost02 (version 2.1.2-4.el9_0.5-ada5c3b36e2) - partition with quorum
  * Last updated: Tue Jun  3 15:47:15 2025
  * Last change:  Tue Jun  3 15:47:12 2025 by hacluster via crmd on hanahost02
  * 2 nodes configured
  * 6 resource instances configured

Node List:
  * Online: [ hanahost01 hanahost02 ]

Full List of Resources:
  * rsc_fence_aws       (stonith:fence_aws):     Started hanahost01
  * rsc_ip_HDB_HDB00    (ocf:heartbeat:aws-vpc-move-ip):         Stopped
  * Clone Set: rsc_SAPHanaTopology_HDB_HDB00-clone [rsc_SAPHanaTopology_HDB_HDB00]:
    * Started: [ hanahost01 hanahost02 ]
  * Clone Set: rsc_SAPHana_HDB_HDB00-clone [rsc_SAPHana_HDB_HDB00] (promotable):
    * Promoted: [ hanahost02 ]
    * Unpromoted: [ hanahost01 ]

Node Attributes:
  * Node: hanahost01 (1):
    * hana_hdb_clone_state              : PROMOTED
    * hana_hdb_op_mode                  : logreplay
    * hana_hdb_remoteHost               : hanavirt02
    * hana_hdb_roles                    : 4:P:master1:master:worker:master
    * hana_hdb_site                     : siteA
    * hana_hdb_srah                     : -
    * hana_hdb_srmode                   : syncmem
    * hana_hdb_sync_state               : PRIM
    * hana_hdb_version                  : 2.00.073.00
    * hana_hdb_vhost                    : hanavirt01
    * lpa_hdb_lpt                       : 1755493611
    * master-rsc_SAPHana_HDB_HDB00      : 150
  * Node: hanahost02 (2):
    * hana_hdb_clone_state              : DEMOTED
    * hana_hdb_op_mode                  : logreplay
    * hana_hdb_remoteHost               : hanavirt01
    * hana_hdb_roles                    : 4:S:master1:master:worker:master
    * hana_hdb_site                     : siteB
    * hana_hdb_srah                     : -
    * hana_hdb_srmode                   : syncmem
    * hana_hdb_sync_state               : SOK
    * hana_hdb_version                  : 2.00.073.00
    * hana_hdb_vhost                    : hanavirt02
    * lpa_hdb_lpt                       : 30
    * master-rsc_SAPHana_HDB_HDB00      : 100

Migration Summary:

Tickets:

PCSD Status:
  hanahost01: Online
  hanahost02: Online

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled
```

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


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

# 执行计划内维护
<a name="sap-hana-pacemaker-rhel-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**  
使用以下命令启用维护模式。  

```
# pcs property maintenance-mode=true
```
使用以下命令关闭维护模式。  

```
# pcs property maintenance-mode=false
```

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

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

```
# pcs node standby <hostname>
```

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

```
# pcs node unstandby <hostname>
```

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

移动单独的资源时，请务必了解资源的依赖关系和约束。以下命令演示如何强制 HANA 接管。请务必查看集群状态并在接管之后验证任何临时位置限制。

例如：

```
# pcs resource move rsc_SAPHana_HDB_HDB00-clone hanahost02
Location constraint to move resource 'rsc_SAPHana_HDB_HDB00-clone' has been created
Waiting for the cluster to apply configuration changes...
Location constraint created to move resource 'rsc_SAPHana_HDB_HDB00-clone' has been removed
Waiting for the cluster to apply configuration changes...
resource 'rsc_SAPHana_HDB_HDB00-clone' is promoted on node 'hanahost02'; unpromoted on node 'hanahost01'
```

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

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

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

**Topics**
+ [查看日志](#_checking_the_logs)
+ [清理 pcs 状态](#_cleanup_pcs_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> 目录。

## 清理 pcs 状态
<a name="_cleanup_pcs_status"></a>

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

```
# pcs resource cleanup <resource> <hostname>
```

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

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

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

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

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

```
# pcs cluster report --from="YYYY-MM-DD HH:MM:SS" --to="YYYY-MM-DD HH:MM:SS" /tmp/cluster-report
```

**使用 pcs 集群报告**
+ 指定包含事件的时间范围
+ 该报告包括所有节点的日志和配置
+ 查看生成的 tarball 来了解集群事件、资源操作和配置更改

# 提醒和监控
<a name="sap-hana-pacemaker-rhel-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}
```