

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

# EC2 实例配置
<a name="sap-hana-pacemaker-sles-ec2-configuration"></a>

Amazon EC2 实例设置可使用基础设施即代码或使用 AWS 命令行界面或 AWS 控制台手动应用。我们建议采用基础设施即代码方法来实现自动化，从而减少手动步骤并确保一致性。

**Topics**
+ [分配或查看 Pacemaker IAM 角色](#_assign_or_review_pacemaker_iam_role)
+ [分配或查看安全组](#_assign_or_review_security_groups)
+ [分配辅助 IP 地址](#_assign_secondary_ip_addresses)
+ [禁用 Source/Destination 检查](#source_dest)
+ [查看停止保护](#stop_protection)
+ [查看自动恢复](#auto_recovery)
+ [创建亚马逊 EC2 STONITH 代理使用的亚马逊 EC2 资源标签](#create-cluster-tags)

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

## 分配或查看 Pacemaker IAM 角色
<a name="_assign_or_review_pacemaker_iam_role"></a>

必须将这两个集群资源 IAM 策略分配给与您的 Amazon EC2 实例关联的 IAM 角色。如果 IAM 角色未与您的实例关联，请创建新 IAM 角色用于集群操作。

1. 打开亚马逊 EC2 控制台，网址为 https://console.aws.amazon.com/ec2/。

1. 选择集群节点之一。

1. 在导航窗格中，依次选择**操作**、**安全**、**修改 IAM 角色**。

1. 选择包含在[为 Pacemaker 创建 IAM 角色和策略](sap-hana-pacemaker-sles-infra-setup.md#iam_roles_sles)中创建的策略的 IAM 角色。

1. 选择**更新 IAM 角色**。

1. 对集群中的所有节点重复这些步骤。

## 分配或查看安全组
<a name="_assign_or_review_security_groups"></a>

必须将在 “ AWS [修改集群通信的安全组](sap-hana-pacemaker-sles-infra-setup.md#sg-sles)” 部分创建的安全组规则分配给您的 Amazon EC2 实例。如果安全组未与您的实例关联，或者分配的安全组中不存在所需的规则，请添加安全组或更新规则。

1. 打开亚马逊 EC2 控制台，网址为 https://console.aws.amazon.com/ec2/。

1. 选择集群节点之一。

1. 在**安全**选项卡中，查看安全组、端口和流量来源。

1. 如果需要，依次选择**操作**、**安全**和**更改安全组**。

1. 在**关联的安全组**下，搜索并选择所需的组。

1. 选择**保存**。

1. 对集群中的所有节点重复这些步骤。

您可以使用 AWS CLI 验证实例上的安全组规则：

```
$ aws ec2 describe-instance-attribute --instance-id <instance_id> --attribute groupSet
```

## 分配辅助 IP 地址
<a name="_assign_secondary_ip_addresses"></a>

辅助 IP 地址用于在 corosync 中为集群创建冗余通信通道（辅助环路）。集群节点可以使用辅助环路进行通信，以防底层网络中断。

 IPs 它们仅用于集群配置。辅助弹性网络接口 (ENI) IPs 提供与辅助弹性网络接口 (ENI) 相同的容错能力。有关更多信息，请参阅[您的 EC2 实例的辅助 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-secondary-ip-addresses.html)。

您可以使用 AWS CLI 验证实例上的辅助 IP 配置：

```
$ aws ec2 describe-instances --instance-id <instance_id> \
    --query 'Reservations[*].Instances[*].NetworkInterfaces[*].PrivateIpAddresses[*].PrivateIpAddress' \
    --output text
```

验证：
+ 每个实例返回来自同一子网的两个 IP 地址
+ 主网络接口 (eth0) 均 IPs 已分配
+ 次要版本稍后 IPs 将用于 corosync.conf 中的 ring0\$1addr 和 ring1\$1addr

## 禁用 Source/Destination 检查
<a name="source_dest"></a>

默认情况下，Amazon EC2 实例 source/destination 会执行检查，要求实例是其发送或接收的任何流量的来源或目的地。在 pacemaker 集群中，必须禁用从叠加 IP 接收流量的两个实例的 source/destination 检查。

以下 AWS 控制台或 AWS CLI 命令可用于修改该属性。

------
#### [  AWS Console ]

1. 打开亚马逊 EC2 控制台，网址为 https://console.aws.amazon.com/ec2/。

1. 选择集群节点之一。

1. 在导航窗格中，选择**操作** → **网络** → **更改 source/destination 检查**。

1. 对于 Source/Destination 检查，当源或目标不是实例本身时，选择**停止**以允许流量。

1. 对集群中的所有节点重复这些步骤。

------
#### [  AWS CLI ]

要使用 AWS CLI 进行修改（需要适当的配置权限），请执行以下操作：

```
$ aws ec2 modify-instance-attribute --instance-id <instance_id> --no-source-dest-check
```

对集群中的所有节点重复执行。

------

要确认特定实例某个属性的值，请使用以下命令。该值`false`表示已禁用 source/destination 检查

```
$ aws ec2 describe-instance-attribute --instance-id <instance_id> --attribute sourceDestCheck
```

输出

```
{
    "InstanceId": "i-xxxxinstidforhost1",
    "SourceDestCheck": {
        "Value": false
    }
}
```

## 查看停止保护
<a name="stop_protection"></a>

为确保可以执行 STONITH 操作，您必须确保对属于起搏器集群的 Amazon EC2 实例禁用停止保护。如果修改了默认设置，请对两个实例使用以下命令通过 AWS CLI 禁用停止保护。

以下 AWS 控制台或 CLI 命令可用于修改该属性。

------
#### [  AWS Console ]

1. 打开亚马逊 EC2 控制台，网址为 https://console.aws.amazon.com/ec2/。

1. 选择集群节点之一。

1. 依次选择**操作**、**实例设置**、**更改停止保护**。

1. 确保未启用**停止保护**。

1. 对集群中的所有节点重复这些步骤。

------
#### [  AWS CLI ]

要使用 AWS CLI 进行修改（需要适当的配置权限），请执行以下操作：

```
$ aws ec2 modify-instance-attribute --instance-id <instance_id> --no-disable-api-stop
```

对集群中的所有节点重复此命令。

------

要确认特定实例某个属性的值，请使用以下命令。该值`false`表示可以使用 AWS CLI 停止实例。

```
$ aws ec2 describe-instance-attribute --instance-id <instance_id> --attribute disableApiStop
```

输出

```
{
    "InstanceId": "i-xxxxinstidforhost1",
    "DisableApiStop": {
        "Value": false
    }
}
```

## 查看自动恢复
<a name="auto_recovery"></a>

故障发生后，必须以协调的方式恢复集群控制的操作。这有助于确保已经确定并解决了导致故障的原因，并且集群的状态符合预期。例如，验证是否没有待处理的隔离操作。

以下 AWS 控制台或 CLI 命令可用于修改该属性。

------
#### [  AWS Console ]

1. 打开亚马逊 EC2 控制台，网址为 https://console.aws.amazon.com/ec2/。

1. 选择集群节点之一。

1. 依次选择**操作**、**实例设置**、**更改自动恢复行为**。

1. 选择**关闭**可禁用系统状态检查失败时的自动恢复。

1. 对集群中的所有节点重复这些步骤。

------
#### [  AWS CLI ]

要修改自动恢复设置（需要相应的配置权限），请执行以下操作：

```
$ aws ec2 modify-instance-maintenance-options --instance-id <instance_id> --auto-recovery disabled
```

对集群中的所有节点重复此命令。

------

要确认特定实例某个属性的值，请使用以下命令。值 `disabled` 表示不会尝试自动恢复。

```
$ aws ec2 describe-instances --instance-ids <instance_id> --query 'Reservations[*].Instances[*].MaintenanceOptions.AutoRecovery'
```

输出：

```
[
    [
        "disabled"
    ]
]
```

## 创建亚马逊 EC2 STONITH 代理使用的亚马逊 EC2 资源标签
<a name="create-cluster-tags"></a>

Amazon EC2 STONITH 代理使用 AWS 资源标签来识别亚马逊 EC2 实例。通过 AWS 控制台或 AWS CLI 为主 Amazon EC2 实例和辅助 Amazon 实例创建标签。有关更多信息，请参阅[使用标签](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)。

使用相同的标签键和本地主机名，该名称通过跨实例使用命令 hostname 返回。例如，使用全局 AWS 参数中定义的值的配置需要下表所示的标签。


| 亚马逊 EC2 | 键示例 | 值示例 | 
| --- | --- | --- | 
|  <instance\$1id>  |  <cluster\$1tag>  |  <hostname>  | 
|  实例 1  |  pacemaker  |  hanahost1  | 
|  实例 2  |  pacemaker  |  hanahost2  | 

您可以在本地运行以下命令来验证标签值以及用于描述标签的 IAM 权限。对集群中的所有实例运行此命令。

```
$ aws ec2 describe-tags --filters "Name=resource-id,Values=<instance_id>" "Name=key,Values=<cluster_tag>" --region=<region> --output=text | cut -f5
```