第 4 章 在 AWS 上配置红帽高可用性集群


本章包含使用 EC2 实例作为集群节点在 Amazon Web Services(AWS)上配置红帽高可用性(HA)集群的信息和步骤。您有多个选项来获取您用于集群的 Red Hat Enterprise Linux(RHEL)镜像。有关 AWS 镜像选项的详情,请查看 AWS 的 Red Hat Enterprise Linux 镜像选项

本章包含为 AWS 设置环境的先决条件。设置环境后,您可以创建并配置 EC2 实例。

本章还包含与创建 HA 集群相关的流程,该集群将单个节点转换为 AWS 上的一个 HA 节点集群。这包括在每个集群节点上安装高可用性软件包和代理、配置隔离以及安装 AWS 网络资源代理的步骤。

本章在很多位置使用了 Amazon 文档。更多信息,请参阅引用的 Amazon 文档来获得更多信息。

先决条件

4.1. 创建 AWS 访问密钥和 AWS Secret 访问密钥

在安装 AWS CLI 前,您需要创建一个 AWS 访问密钥和 AWS Secret 访问密钥。隔离和资源代理 API 使用 AWS 访问密钥和 Secret 访问密钥连接到集群中的每个节点。

完成以下步骤以创建这些密钥。

先决条件

您的 IAM 用户帐户必须具有 Programmatic 访问权限。如需更多信息,请参阅设置 AWS 环境

流程

  1. 启动 AWS 控制台
  2. 点击 AWS Account ID 以显示下拉菜单并选择 My Security Credentials
  3. Users
  4. 选择用户以打开 Summary 屏幕。
  5. Security credentials 选项卡。
  6. Create access key
  7. 下载 .csv 文件(或者保存这两个密钥)。创建隔离设备时需要输入这些密钥。

4.2. 安装 HA 软件包和代理

在所有节点上完成以下步骤以安装 HA 软件包和代理。

流程

  1. 输入以下命令删除 AWS Red Hat Update Infrastructure(RHUI)客户端。由于您要使用 Red Hat Cloud Access 订阅,所以您不应该在订阅之外使用 AWS RHUI。

    $ sudo -i
    # yum -y remove rh-amazon-rhui-client*
    Copy to Clipboard Toggle word wrap
  2. 在红帽注册虚拟机。

    # subscription-manager register --auto-attach
    Copy to Clipboard Toggle word wrap
  3. 禁用所有软件仓库。

    # subscription-manager repos --disable=*
    Copy to Clipboard Toggle word wrap
  4. 启用 RHEL 7 Server 和 RHEL 7 Server HA 软件仓库。

    # subscription-manager repos --enable=rhel-7-server-rpms
    # subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
    Copy to Clipboard Toggle word wrap
  5. 更新所有软件包。

    # yum update -y
    Copy to Clipboard Toggle word wrap
  6. 如果内核被更新,则需要重启。

    # reboot
    Copy to Clipboard Toggle word wrap
  7. 安装 pcs、pacemaker、隔离代理和资源代理。

    # yum -y install pcs pacemaker fence-agents-aws resource-agents
    Copy to Clipboard Toggle word wrap
  8. 用户 hacluster 在上一步中的 pcspacemaker 安装中创建。在所有集群节点上为 hacluster 创建密码。所有节点都使用相同的密码。

    # passwd hacluster
    Copy to Clipboard Toggle word wrap
  9. 如果启用了 firewalld.service,在 RHEL 防火墙中添加 high availability 服务。

    # firewall-cmd --permanent --add-service=high-availability
    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  10. 启动 pcs 服务并在引导时启用它。

    # systemctl enable pcsd.service --now
    Copy to Clipboard Toggle word wrap

验证步骤

确定 pcs 服务正在运行。

# systemctl is-active pcsd.service
Copy to Clipboard Toggle word wrap

4.3. 创建集群

完成以下步骤以创建节点集群。

流程

  1. 在其中一个节点上,输入以下命令验证 pcs 用户 hacluster。指定集群中的每个节点的名称。

    # pcs host auth  _hostname1_ _hostname2_ _hostname3_
    Copy to Clipboard Toggle word wrap

    例如:

    [root@node01 clouduser]# pcs host auth node01 node02 node03
    Username: hacluster
    Password:
    node01: Authorized
    node02: Authorized
    node03: Authorized
    Copy to Clipboard Toggle word wrap
  2. 创建集群。

    # pcs cluster setup --name _hostname1_ _hostname2_ _hostname3_
    Copy to Clipboard Toggle word wrap

    例如:

    [root@node01 clouduser]# pcs cluster setup --name newcluster node01 node02 node03
    
    ...omitted
    
    Synchronizing pcsd certificates on nodes node01, node02, node03...
    node02: Success
    node03: Success
    node01: Success
    Restarting pcsd on the nodes in order to reload the certificates...
    node02: Success
    node03: Success
    node01: Success
    Copy to Clipboard Toggle word wrap

验证步骤

  1. 启用集群。

    # pcs cluster enable --all
    Copy to Clipboard Toggle word wrap
  2. 启动集群。

    # pcs cluster start --all
    Copy to Clipboard Toggle word wrap

    例如:

    [root@node01 clouduser]# pcs cluster enable --all
    node02: Cluster Enabled
    node03: Cluster Enabled
    node01: Cluster Enabled
    
    [root@node01 clouduser]# pcs cluster start --all
    node02: Starting Cluster...
    node03: Starting Cluster...
    node01: Starting Cluster...
    Copy to Clipboard Toggle word wrap

4.4. 创建隔离设备

完成以下步骤来配置隔离。

流程

  1. 输入以下 AWS 元数据查询以获取每个节点的实例 ID。您需要这些 ID 来配置隔离设备。如需更多信息,请参阅实例元数据和用户数据

    # echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id)
    Copy to Clipboard Toggle word wrap

    例如:

    [root@ip-10-0-0-48 ~]# echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id) i-07f1ac63af0ec0ac6
    Copy to Clipboard Toggle word wrap
  2. 创建隔离设备。使用 pcmk_host_map 命令将 RHEL 主机名映射到实例 ID。使用之前在创建 AWS 访问密钥和 AWS Secret 访问密钥中设置的 AWS 访问密钥和 AWS Secret 访问密钥。

    # pcs stonith create cluster_fence fence_aws access_key=access-key secret_key=_secret-access-key_ region=_region_ pcmk_host_map="rhel-hostname-1:Instance-ID-1;rhel-hostname-2:Instance-ID-2;rhel-hostname-3:Instance-ID-3"
    Copy to Clipboard Toggle word wrap

    例如:

    [root@ip-10-0-0-48 ~]# pcs stonith create clusterfence fence_aws access_key=AKIAI*******6MRMJA secret_key=a75EYIG4RVL3h*******K7koQ8dzaDyn5yoIZ/ region=us-east-1 pcmk_host_map="ip-10-0-0-48:i-07f1ac63af0ec0ac6;ip-10-0-0-46:i-063fc5fe93b4167b2;ip-10-0-0-58:i-08bd39eb03a6fd2c7" power_timeout=240 pcmk_reboot_timeout=480 pcmk_reboot_retries=4
    Copy to Clipboard Toggle word wrap

验证步骤

  1. 测试其他其中一个节点的隔离代理。

    # pcs stonith fence _awsnodename_
    Copy to Clipboard Toggle word wrap

    例如:

    [root@ip-10-0-0-48 ~]# pcs stonith fence ip-10-0-0-58
    Node: ip-10-0-0-58 fenced
    Copy to Clipboard Toggle word wrap
  2. 检查状态以验证该节点是否已隔离。

    # watch pcs status
    Copy to Clipboard Toggle word wrap

    例如:

    [root@ip-10-0-0-48 ~]# pcs status
    Cluster name: newcluster
    Stack: corosync
    Current DC: ip-10-0-0-46 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum
    Last updated: Fri Mar  2 20:01:31 2018
    Last change: Fri Mar  2 19:24:59 2018 by root via cibadmin on ip-10-0-0-48
    
    3 nodes configured
    1 resource configured
    
    Online: [ ip-10-0-0-46 ip-10-0-0-48 ip-10-0-0-58 ]
    
    Full list of resources:
    
      clusterfence  (stonith:fence_aws):    Started ip-10-0-0-46
    
    Daemon Status:
      corosync: active/disabled
      pacemaker: active/disabled
      pcsd: active/enabled
    Copy to Clipboard Toggle word wrap

4.5. 在集群节点上安装 AWS CLI

在以前的版本中,您在主机系统中安装了 AWS CLI。现在,在配置网络资源代理前,您需要在集群节点上安装 AWS CLI。

在每个集群节点上完成以下步骤。

先决条件

您必须已创建了 AWS Access Key 和 AWS Secret 访问密钥。如需更多信息,请参阅创建 AWS 访问密钥和 AWS Secret 访问密钥

流程

  1. 执行安装 AWS CLI 的步骤。
  2. 输入以下命令验证 AWS CLI 是否已正确配置。应该会显示实例 ID 和实例名称。

    例如:

    [root@ip-10-0-0-48 ~]# aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key==`Name`].Value]'
    i-07f1ac63af0ec0ac6
    ip-10-0-0-48
    i-063fc5fe93b4167b2
    ip-10-0-0-46
    i-08bd39eb03a6fd2c7
    ip-10-0-0-58
    Copy to Clipboard Toggle word wrap

4.6. 安装网络资源代理

要使 HA 操作正常工作,集群使用 AWS 网络资源代理来启用故障切换功能。如果节点在设定的时间里不响应 heartbeat 检查,则该节点会被隔离,操作切换到集群中的额外节点。需要配置网络资源代理才能正常工作。

将两个资源添加到 同一组 以强制 ordercolocation 限制。

创建二级私有 IP 资源及虚拟 IP 资源

完成以下步骤以添加二级专用 IP 地址并创建虚拟 IP。您可以从集群中的任何节点完成此步骤。

流程

  1. 输入以下命令查看 AWS Secondary Private IP Address 资源代理(awsvip)描述。这显示了这个代理的选项和默认操作。

    # pcs resource describe awsvip
    Copy to Clipboard Toggle word wrap
  2. 输入以下命令使用 VPC CIDR 块中未使用的私有 IP 地址创建二级私有 IP 地址。

    # pcs resource create privip awsvip secondary_private_ip=_Unused-IP-Address_ --group _group-name_
    Copy to Clipboard Toggle word wrap

    例如:

    [root@ip-10-0-0-48 ~]# pcs resource create privip awsvip secondary_private_ip=10.0.0.68 --group networking-group
    Copy to Clipboard Toggle word wrap
  3. 创建虚拟 IP 资源。这是一个 VPC IP 地址,可以从隔离的节点快速迁移到故障切换节点,从而使子网中隔离的节点失败。

    # pcs resource create vip IPaddr2 ip=_secondary-private-IP_ --group _group-name_
    Copy to Clipboard Toggle word wrap

    例如:

    root@ip-10-0-0-48 ~]# pcs resource create vip IPaddr2 ip=10.0.0.68 --group networking-group
    Copy to Clipboard Toggle word wrap

验证步骤

输入 pcs status 命令来验证资源是否正在运行。

# pcs status
Copy to Clipboard Toggle word wrap

例如:

[root@ip-10-0-0-48 ~]# pcs status
Cluster name: newcluster
Stack: corosync
Current DC: ip-10-0-0-46 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum
Last updated: Fri Mar  2 22:34:24 2018
Last change: Fri Mar  2 22:14:58 2018 by root via cibadmin on ip-10-0-0-46

3 nodes configured
3 resources configured

Online: [ ip-10-0-0-46 ip-10-0-0-48 ip-10-0-0-58 ]

Full list of resources:

clusterfence    (stonith:fence_aws):    Started ip-10-0-0-46
 Resource Group: networking-group
     privip (ocf::heartbeat:awsvip):    Started ip-10-0-0-48
     vip    (ocf::heartbeat:IPaddr2):   Started ip-10-0-0-58

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled
Copy to Clipboard Toggle word wrap

创建弹性 IP 地址

弹性 IP 地址是一个公共 IP 地址,可以从隔离的节点快速迁移到故障转移节点,从而使隔离的节点失败。

请注意,这与之前创建的虚拟 IP 资源不同。弹性 IP 地址用于面向公共的互联网连接,而不是子网连接。

  1. 将两个资源添加到之前创建的用来强制 ordercolocation 约束的 同一组 中。
  2. 输入以下 AWS CLI 命令来创建弹性 IP 地址。

    [root@ip-10-0-0-48 ~]# aws ec2 allocate-address --domain vpc --output text
    eipalloc-4c4a2c45   vpc 35.169.153.122
    Copy to Clipboard Toggle word wrap
  3. 输入以下命令查看 AWS 二级 Elastic IP 地址资源代理(awseip)描述。这显示了这个代理的选项和默认操作。

    # pcs resource describe awseip
    Copy to Clipboard Toggle word wrap
  4. 使用步骤 1 中创建的分配的 IP 地址创建二级 Elastic IP 地址资源。

    # pcs resource create elastic awseip elastic_ip=_Elastic-IP-Address_allocation_id=_Elastic-IP-Association-ID_ --group networking-group
    Copy to Clipboard Toggle word wrap

    例如:

    # pcs resource create elastic awseip elastic_ip=35.169.153.122 allocation_id=eipalloc-4c4a2c45 --group networking-group
    Copy to Clipboard Toggle word wrap

验证步骤

输入 pcs status 命令来验证资源是否正在运行。

# pcs status
Copy to Clipboard Toggle word wrap

例如:

[root@ip-10-0-0-58 ~]# pcs status
Cluster name: newcluster
Stack: corosync
Current DC: ip-10-0-0-58 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum
Last updated: Mon Mar  5 16:27:55 2018
Last change: Mon Mar  5 15:57:51 2018 by root via cibadmin on ip-10-0-0-46

3 nodes configured
4 resources configured

Online: [ ip-10-0-0-46 ip-10-0-0-48 ip-10-0-0-58 ]

Full list of resources:

 clusterfence   (stonith:fence_aws):    Started ip-10-0-0-46
 Resource Group: networking-group
     privip (ocf::heartbeat:awsvip):  Started ip-10-0-0-48
     vip    (ocf::heartbeat:IPaddr2):    Started ip-10-0-0-48
     elastic (ocf::heartbeat:awseip):    Started ip-10-0-0-48

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled
Copy to Clipboard Toggle word wrap

测试弹性 IP 地址

输入以下命令验证虚拟 IP(awsvip)和弹性 IP(awseip)资源是否可以正常工作。

流程

  1. 从本地工作站启动 SSH 会话到之前创建的弹性 IP 地址。

    $ ssh -l ec2-user -i ~/.ssh/<KeyName>.pem elastic-IP
    Copy to Clipboard Toggle word wrap

    例如:

    $ ssh -l ec2-user -i ~/.ssh/cluster-admin.pem 35.169.153.122
    Copy to Clipboard Toggle word wrap
  2. 验证您通过 SSH 连接到的主机是否与创建的弹性资源关联。

4.7. 配置共享块存储

本节提供了使用 Amazon EBS Multi-Attach 卷为红帽高可用性集群配置共享块存储的可选步骤。此流程假设三个带有 1TB 共享磁盘的实例(三节点集群)。

流程

  1. 使用 AWS 命令 create-volume 创建共享块卷。

    $ aws ec2 create-volume --availability-zone availability_zone --no-encrypted --size 1024 --volume-type io1 --iops 51200 --multi-attach-enabled
    Copy to Clipboard Toggle word wrap

    例如,以下命令在 us-east-1a 可用区中创建卷。

    $ aws ec2 create-volume --availability-zone us-east-1a --no-encrypted --size 1024 --volume-type io1 --iops 51200 --multi-attach-enabled
    
    {
        "AvailabilityZone": "us-east-1a",
        "CreateTime": "2020-08-27T19:16:42.000Z",
        "Encrypted": false,
        "Size": 1024,
        "SnapshotId": "",
        "State": "creating",
        "VolumeId": "vol-042a5652867304f09",
        "Iops": 51200,
        "Tags": [ ],
        "VolumeType": "io1"
    }
    Copy to Clipboard Toggle word wrap
    注意

    下一步需要 VolumeId

  2. 对于集群中的每个实例,使用 AWS 命令 attach-volume 附加一个共享块卷。使用您的 <instance_id><volume_id>

    $ aws ec2 attach-volume --device /dev/xvdd --instance-id instance_id --volume-id volume_id
    Copy to Clipboard Toggle word wrap

    例如:以下命令将共享块卷 vol-042a5652867304f09 附加到 instance i-0eb803361c2c887f2

    $ aws ec2 attach-volume --device /dev/xvdd --instance-id i-0eb803361c2c887f2 --volume-id vol-042a5652867304f09
    
    {
        "AttachTime": "2020-08-27T19:26:16.086Z",
        "Device": "/dev/xvdd",
        "InstanceId": "i-0eb803361c2c887f2",
        "State": "attaching",
        "VolumeId": "vol-042a5652867304f09"
    }
    Copy to Clipboard Toggle word wrap

验证步骤

  1. 对于集群中的每个实例,使用带有实例 <ip_address> 的 SSH 命令验证块设备是否可用。

    # ssh <ip_address> "hostname ; lsblk -d | grep ' 1T '"
    Copy to Clipboard Toggle word wrap

    例如:以下命令列出了包括实例 IP 198.51.100.3 的主机名和块设备的详情。

    # ssh 198.51.100.3 "hostname ; lsblk -d | grep ' 1T '"
    
    nodea
    nvme2n1 259:1    0   1T  0 disk
    Copy to Clipboard Toggle word wrap
  2. 使用 ssh 命令验证集群中的每个实例是否使用相同的共享磁盘。

    # ssh ip_address "hostname ; lsblk -d | grep ' 1T ' | awk '{print \$1}' | xargs -i udevadm info --query=all --name=/dev/{} | grep '^E: ID_SERIAL='"
    Copy to Clipboard Toggle word wrap

    例如,以下命令列出了包括实例 IP 地址 198.51.100.3 的主机名和共享磁盘卷 ID 的详情。

     # ssh 198.51.100.3 "hostname ; lsblk -d | grep ' 1T ' | awk '{print \$1}' | xargs -i udevadm info --query=all --name=/dev/{} | grep '^E: ID_SERIAL='"
    
    nodea
    E: ID_SERIAL=Amazon Elastic Block Store_vol0fa5342e7aedf09f7
    Copy to Clipboard Toggle word wrap

在确认将共享磁盘附加到每个实例后,您可以为集群配置弹性存储。有关为红帽高可用性集群配置弹性存储的详情,请参考在集群中配置 GFS2 文件系统。有关 GFS2 文件系统的常规信息,请参考配置和管理 GFS2 文件系统

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat