第 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 文档来获得更多信息。
先决条件
- 您需要安装 AWS 命令行界面(CLI)。有关安装 AWS CLI 的更多信息,请参阅安装 AWS CLI。
- 在 Red Hat Cloud Access 程序中启用您的订阅。Red Hat Cloud Access 程序允许您在红帽的完全支持下将红帽订阅从物理或内部系统移到 AWS。
其它资源
4.1. 创建 AWS 访问密钥和 AWS Secret 访问密钥 复制链接链接已复制到粘贴板!
在安装 AWS CLI 前,您需要创建一个 AWS 访问密钥和 AWS Secret 访问密钥。隔离和资源代理 API 使用 AWS 访问密钥和 Secret 访问密钥连接到集群中的每个节点。
完成以下步骤以创建这些密钥。
先决条件
您的 IAM 用户帐户必须具有 Programmatic 访问权限。如需更多信息,请参阅设置 AWS 环境。
流程
- 启动 AWS 控制台。
- 点击 AWS Account ID 以显示下拉菜单并选择 My Security Credentials。
- 点 Users。
- 选择用户以打开 Summary 屏幕。
- 点 Security credentials 选项卡。
- 点 Create access key。
-
下载
.csv
文件(或者保存这两个密钥)。创建隔离设备时需要输入这些密钥。
4.2. 安装 HA 软件包和代理 复制链接链接已复制到粘贴板!
在所有节点上完成以下步骤以安装 HA 软件包和代理。
流程
输入以下命令删除 AWS Red Hat Update Infrastructure(RHUI)客户端。由于您要使用 Red Hat Cloud Access 订阅,所以您不应该在订阅之外使用 AWS RHUI。
sudo -i yum -y remove rh-amazon-rhui-client*
$ sudo -i # yum -y remove rh-amazon-rhui-client*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在红帽注册虚拟机。
subscription-manager register --auto-attach
# subscription-manager register --auto-attach
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用所有软件仓库。
subscription-manager repos --disable=*
# subscription-manager repos --disable=*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用 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
# subscription-manager repos --enable=rhel-7-server-rpms # subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新所有软件包。
yum update -y
# yum update -y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果内核被更新,则需要重启。
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装 pcs、pacemaker、隔离代理和资源代理。
yum -y install pcs pacemaker fence-agents-aws resource-agents
# yum -y install pcs pacemaker fence-agents-aws resource-agents
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用户
hacluster
在上一步中的pcs
和pacemaker
安装中创建。在所有集群节点上为hacluster
创建密码。所有节点都使用相同的密码。passwd hacluster
# passwd hacluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果启用了
firewalld.service
,在 RHEL 防火墙中添加high availability
服务。firewall-cmd --permanent --add-service=high-availability firewall-cmd --reload
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
pcs
服务并在引导时启用它。systemctl enable pcsd.service --now
# systemctl enable pcsd.service --now
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
确定 pcs
服务正在运行。
systemctl is-active pcsd.service
# systemctl is-active pcsd.service
4.3. 创建集群 复制链接链接已复制到粘贴板!
完成以下步骤以创建节点集群。
流程
在其中一个节点上,输入以下命令验证 pcs 用户
hacluster
。指定集群中的每个节点的名称。pcs host auth _hostname1_ _hostname2_ _hostname3_
# pcs host auth _hostname1_ _hostname2_ _hostname3_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建集群。
pcs cluster setup --name _hostname1_ _hostname2_ _hostname3_
# pcs cluster setup --name _hostname1_ _hostname2_ _hostname3_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
启用集群。
pcs cluster enable --all
# pcs cluster enable --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动集群。
pcs cluster start --all
# pcs cluster start --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4. 创建隔离设备 复制链接链接已复制到粘贴板!
完成以下步骤来配置隔离。
流程
输入以下 AWS 元数据查询以获取每个节点的实例 ID。您需要这些 ID 来配置隔离设备。如需更多信息,请参阅实例元数据和用户数据。
echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id)
# echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id) i-07f1ac63af0ec0ac6
[root@ip-10-0-0-48 ~]# echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id) i-07f1ac63af0ec0ac6
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建隔离设备。使用
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"
# 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 Copied! Toggle word wrap Toggle overflow 例如:
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
[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 Copied! Toggle word wrap Toggle overflow
验证步骤
测试其他其中一个节点的隔离代理。
pcs stonith fence _awsnodename_
# pcs stonith fence _awsnodename_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
pcs stonith fence ip-10-0-0-58
[root@ip-10-0-0-48 ~]# pcs stonith fence ip-10-0-0-58 Node: ip-10-0-0-58 fenced
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查状态以验证该节点是否已隔离。
watch pcs status
# watch pcs status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 在集群节点上安装 AWS CLI 复制链接链接已复制到粘贴板!
在以前的版本中,您在主机系统中安装了 AWS CLI。现在,在配置网络资源代理前,您需要在集群节点上安装 AWS CLI。
在每个集群节点上完成以下步骤。
先决条件
您必须已创建了 AWS Access Key 和 AWS Secret 访问密钥。如需更多信息,请参阅创建 AWS 访问密钥和 AWS Secret 访问密钥。
流程
- 执行安装 AWS CLI 的步骤。
输入以下命令验证 AWS CLI 是否已正确配置。应该会显示实例 ID 和实例名称。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6. 安装网络资源代理 复制链接链接已复制到粘贴板!
要使 HA 操作正常工作,集群使用 AWS 网络资源代理来启用故障切换功能。如果节点在设定的时间里不响应 heartbeat 检查,则该节点会被隔离,操作切换到集群中的额外节点。需要配置网络资源代理才能正常工作。
将两个资源添加到 同一组 以强制 order
和 colocation
限制。
创建二级私有 IP 资源及虚拟 IP 资源
完成以下步骤以添加二级专用 IP 地址并创建虚拟 IP。您可以从集群中的任何节点完成此步骤。
流程
输入以下命令查看
AWS Secondary Private IP Address
资源代理(awsvip)描述。这显示了这个代理的选项和默认操作。pcs resource describe awsvip
# pcs resource describe awsvip
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令使用
VPC CIDR
块中未使用的私有 IP 地址创建二级私有 IP 地址。pcs resource create privip awsvip secondary_private_ip=_Unused-IP-Address_ --group _group-name_
# pcs resource create privip awsvip secondary_private_ip=_Unused-IP-Address_ --group _group-name_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
pcs resource create privip awsvip secondary_private_ip=10.0.0.68 --group networking-group
[root@ip-10-0-0-48 ~]# pcs resource create privip awsvip secondary_private_ip=10.0.0.68 --group networking-group
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建虚拟 IP 资源。这是一个 VPC IP 地址,可以从隔离的节点快速迁移到故障切换节点,从而使子网中隔离的节点失败。
pcs resource create vip IPaddr2 ip=_secondary-private-IP_ --group _group-name_
# pcs resource create vip IPaddr2 ip=_secondary-private-IP_ --group _group-name_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
root@ip-10-0-0-48 ~]# pcs resource create vip IPaddr2 ip=10.0.0.68 --group networking-group
root@ip-10-0-0-48 ~]# pcs resource create vip IPaddr2 ip=10.0.0.68 --group networking-group
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
输入 pcs status
命令来验证资源是否正在运行。
pcs status
# pcs status
例如:
创建弹性 IP 地址
弹性 IP 地址是一个公共 IP 地址,可以从隔离的节点快速迁移到故障转移节点,从而使隔离的节点失败。
请注意,这与之前创建的虚拟 IP 资源不同。弹性 IP 地址用于面向公共的互联网连接,而不是子网连接。
-
将两个资源添加到之前创建的用来强制
order
和colocation
约束的 同一组 中。 输入以下 AWS CLI 命令来创建弹性 IP 地址。
aws ec2 allocate-address --domain vpc --output text
[root@ip-10-0-0-48 ~]# aws ec2 allocate-address --domain vpc --output text eipalloc-4c4a2c45 vpc 35.169.153.122
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令查看 AWS 二级 Elastic IP 地址资源代理(awseip)描述。这显示了这个代理的选项和默认操作。
pcs resource describe awseip
# pcs resource describe awseip
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用步骤 1 中创建的分配的 IP 地址创建二级 Elastic IP 地址资源。
pcs resource create elastic awseip elastic_ip=_Elastic-IP-Address_allocation_id=_Elastic-IP-Association-ID_ --group networking-group
# pcs resource create elastic awseip elastic_ip=_Elastic-IP-Address_allocation_id=_Elastic-IP-Association-ID_ --group networking-group
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
pcs resource create elastic awseip elastic_ip=35.169.153.122 allocation_id=eipalloc-4c4a2c45 --group networking-group
# pcs resource create elastic awseip elastic_ip=35.169.153.122 allocation_id=eipalloc-4c4a2c45 --group networking-group
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
输入 pcs status
命令来验证资源是否正在运行。
pcs status
# pcs status
例如:
测试弹性 IP 地址
输入以下命令验证虚拟 IP(awsvip)和弹性 IP(awseip)资源是否可以正常工作。
流程
从本地工作站启动 SSH 会话到之前创建的弹性 IP 地址。
ssh -l ec2-user -i ~/.ssh/<KeyName>.pem elastic-IP
$ ssh -l ec2-user -i ~/.ssh/<KeyName>.pem elastic-IP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
ssh -l ec2-user -i ~/.ssh/cluster-admin.pem 35.169.153.122
$ ssh -l ec2-user -i ~/.ssh/cluster-admin.pem 35.169.153.122
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 验证您通过 SSH 连接到的主机是否与创建的弹性资源关联。