在 Amazon Web Services 上部署和管理 RHEL
获取 Red Hat Enterprise Linux 系统镜像并在 AWS 上创建 RHEL 实例
摘要
- 在 AWS 上注册、部署和置备 RHEL 镜像
- 管理 RHEL AWS EC2 实例的网络配置
- 配置平台安全性和可信执行技术
- 为 RHEL 实例管理红帽高可用性(HA)集群
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 在顶部导航栏中点 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 公有云平台上的 RHEL 简介 复制链接链接已复制到粘贴板!
公有云平台将计算资源作为服务提供。除了使用内部硬件,您可以将您的 IT 工作负载,包括 Red Hat Enterprise Linux (RHEL)系统,作为公有云实例运行。
1.1. 在公有云中使用 RHEL 的好处 复制链接链接已复制到粘贴板!
RHEL 作为公有云平台上的云实例,与 RHEL 内部物理系统或虚拟机(VM)相比有以下好处:
- 灵活精细地分配资源
RHEL 的云实例作为云平台上的虚拟机运行,这意味着远程服务器的集群由云服务提供商维护。因此,在软件级别上,为实例分配硬件资源可轻松自定义,如特定类型的 CPU 或存储。
与本地 RHEL 系统相比,您还不受物理主机能力的限制。相反,您可以根据云提供商提供的选择,从各种功能中选择。
- 空间及成本效率
您不需要拥有任何内部服务器来托管云工作负载。这可避免与物理硬件关联的空间、电源和维护要求。
相反,在公有云平台上,您可以直接向云提供商支付使用云实例的费用。成本通常更具分配给实例的硬件以及使用它的时间。因此,您可以根据要求优化您的成本。
- 软件控制的配置
您可以将云实例的整个配置作为数据保存在云平台上,并使用软件对其进行控制。因此,您可以轻松地创建、删除、克隆或迁移实例。您还可以在云提供商控制台中远程操作云实例,其默认连接到远程存储。
另外,您可以随时将云实例的当前状态备份为快照。之后,您可以加载快照,将实例恢复到保存的状态。
- 与主机分离和软件兼容性
与本地虚拟机类似,云实例上的 RHEL 客户机操作系统在基于内核的虚拟机(KVM)上运行。这个内核与主机操作系统以及用来连接实例的 客户端 系统分开。
因此,您可以在云实例上安装任何操作系统。这意味着,在 RHEL 公有云实例上,您可以运行在本地操作系统上不可用的特定于 RHEL 的应用程序。
此外,即使实例的操作系统变得不稳定或被破坏,也不会影响您的客户端系统。
1.2. RHEL 的公有云用例 复制链接链接已复制到粘贴板!
在公有云上部署会带来许多好处,但可能并非是每种场景中最有效的解决方案。如果您要评估是否将 RHEL 部署迁移到公共云,请考虑您的用例是否将从公共云的好处中受益。
- 有益的用例
部署公有云实例对于灵活地增加和减少部署的活跃计算能力(也称为 扩展 和 缩减)非常有效。因此,您可以在以下场景中,在公有云上使用 RHEL:
- 具有高峰值工作负载和一般性能要求的集群。在资源成本方面,根据您的需求扩展和缩减可能非常高效。
- 快速设置或扩展集群。这可避免设置本地服务器的高前期成本。
- 本地环境中发生了什么不会影响云实例。因此,您可以使用它们进行备份和恢复。
- 有潜在问题的用例
- 您正在运行一个无法调整的现有环境。与您当前的主机平台相比,自定义云实例以满足现有部署的具体需求可能经济上并不高效。
- 您有预算方面的硬限制。在本地数据中心中维护您的部署通常具有更大的灵活性,但与公有云相比,您对最大资源成本有更多的控制。
有关如何获取用于公有云部署的 RHEL 的详情,请参阅 获取用于公有云部署的 RHEL。
1.3. 迁移到公有云时的常见关注 复制链接链接已复制到粘贴板!
将 RHEL 工作负载从本地环境移到公有云平台可能会带来有关涉及的变化的担忧。以下是最常见的问题:
- 作为云实例,我的 RHEL 是否与本地虚拟机工作不同?
在大部分方面,公有云平台上的 RHEL 实例的工作方式与本地主机上的 RHEL 虚拟机相同,如内部服务器。主要例外包括:
- 公有云实例使用特定于提供商的控制台接口,而不是私有编排接口,来管理云资源。
- 某些功能(如嵌套虚拟化)可能无法正常工作。如果特定功能对部署至关重要,请提前检查该功能与您选择的公有云提供商的兼容性。
- 与本地服务器相比,我的数据在公有云中是否保持安全?
RHEL 云实例中的数据归您所有,您的公共云提供商对齐没有任何访问权限。此外,主要的云提供商支持传输中的数据加密,这提高了将虚拟机迁移到公共云时数据的安全性。
就 RHEL 公有云实例的安全性而言,以下内容适用:
- 您的公有云供应商负责云 hypervisor 的安全性
- 红帽在您的实例中提供 RHEL 客户机操作系统的安全功能
- 您可以在云基础架构中管理特定的安全设置和实践
- 我的地理区域对 RHEL 公有云实例的功能有何影响?
- 无论您所在的地理位置如何,您都可以在公有云平台上使用 RHEL 实例。因此,您可以在与内部服务器相同的区域中运行实例。但是,在物理上较远的区域中托管您的实例可能会在操作它们时造成高延迟。此外,某些区域可能会提供额外的功能或更具成本效益,具体取决于公有云提供商。在创建 RHEL 实例前,请查看您选择的云提供商提供的托管区域的属性。
1.4. 为公有云部署获取 RHEL 复制链接链接已复制到粘贴板!
要在公有云环境中部署 RHEL 系统,您需要:
根据您的需求和当前市场提供的,为您的使用案例选择最佳云提供商。用于运行 RHEL 实例的认证的云服务提供商(CCSP)是:
- Amazon Web Services (AWS)
- Google Cloud Platform (GCP)
- 注意
本文档专门解决在 AWS 上部署 RHEL 的过程。
- 在您选择的云平台上创建 RHEL 云实例。详情请参阅 创建 RHEL 云实例的方法。
- 要让您的 RHEL 部署保持最新状态,请使用 红帽更新基础设施 (RHUI)。
1.5. 创建 RHEL 云实例的方法 复制链接链接已复制到粘贴板!
要在公有云平台上部署 RHEL 实例,您可以使用以下方法之一:
- 创建一个 RHEL 系统镜像并将其导入到云平台
- 要创建系统镜像,您可以使用 RHEL 镜像构建器,也可以手动构建镜像。
- 此方法使用您现有的 RHEL 订阅,也称为 自带订阅 (BYOS)。
- 您每年预付订阅费,您可以使用您的红帽客户折扣。
- 红帽为您提供客户服务。
-
要有效地创建很多镜像,您可以使用
cloud-init工具。
- 直接从云提供商市场购买 RHEL 实例
- 您按小时为使用的服务后付费。因此,此方法也称为 随用随付(PAYG)。
- 云平台提供商为您提供客户服务。
有关使用各种方法在 Amazon Web Services 上部署 RHEL 实例的详细信息,请参阅本文档中的以下章节。
第 2 章 准备 AMI 镜像并将其上传到 AWS 复制链接链接已复制到粘贴板!
您可以创建自定义镜像,并使用 RHEL 镜像构建器手动或自动将它们更新到 AWS 云。
2.1. 准备手动上传 AWS AMI 镜像 复制链接链接已复制到粘贴板!
在上传 AWS AMI 镜像前,您必须配置系统来上传镜像。
先决条件
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须具有一个可写的 S3 存储桶。
流程
安装 Python 3 和
pip工具:# dnf install python3 python3-pip使用
pip安装 AWS 命令行工具 :# pip3 install awscli设置您的配置文件。终端提示您提供凭证、地区和输出格式:
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:为存储桶定义名称并创建一个存储桶:
$ BUCKET=bucketname $ aws s3 mb s3://$BUCKET使用实际的存储桶名称替换
bucketname。它必须是全局唯一的名称。因此,您的存储桶会被创建。要授予访问 S3 存储桶的权限,如果您还没有这样做,请在 AWS Identity and Access Management (IAM) 中创建一个
vmimportS3 角色:创建一个 JSON 格式的带有信任策略配置的
trust-policy.json文件。例如:{ "Version": "2022-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:Externalid": "vmimport" } } }] }创建一个 JSON 格式的带有角色策略配置的
role-policy.json文件。例如:{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::%s", "arn:aws:s3:::%s/"] }, { "Effect": "Allow", "Action": ["ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe"], "Resource": "*" }] } $BUCKET $BUCKET使用
trust-policy.json文件为您的 Amazon Web Services 帐户创建一个角色:$ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json使用
role-policy.json文件嵌入一个内联策略文档:$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
2.2. 使用 CLI 手动将 AMI 镜像上传到 AWS 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器构建 ami 镜像,并使用 CLI 手动将它们上传到 Amazon AWS Cloud 服务提供商。
流程
使用文本编辑器,使用以下内容创建配置文件:
provider = "aws" [settings] accessKeyID = "AWS_ACCESS_KEY_ID" secretAccessKey = "AWS_SECRET_ACCESS_KEY" bucket = "AWS_BUCKET" region = "AWS_REGION" key = "IMAGE_KEY"将字段中的值替换为您的
accessKeyID、secretAccessKey、bucket和region的凭证。IMAGE_KEY值是要上传到 EC2 的虚拟机镜像的名称。-
将文件保存为
configuration_file.toml,并关闭文本编辑器。 启动 compose 来将其上传到 AWS:
# composer-cli compose start blueprint-name image-type image-key configuration-file.toml替换:
-
带有您创建的蓝图名称的
blueprint-name。 -
带有
ami镜像类型的image-type。 -
带有要上传到 EC2 的虚拟机镜像名称的
image-key。 使用云供应商的配置文件的名称替换
configuration-file.toml。注意您必须有要将自定义镜像发送到的存储桶的正确 AWS 身份和访问管理(IAM)设置。在将镜像上传到存储桶前,您必须对存储桶设置策略。
-
带有您创建的蓝图名称的
检查镜像构建的状态:
# composer-cli compose status上传镜像过程完成后,您可以看到
FINISHED状态。
验证
-
通过访问菜单中的 EC2,并在 AWS 控制台中选择正确的区域来确认镜像上传成功。镜像必须具有
available状态,以指示它已被成功上传。 - 在仪表盘上,选择您的镜像并点击 。
2.3. 创建镜像并将其自动将上传到 AWS Cloud AMI 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器创建一个 .raw 镜像,并选择 Upload to AWS 复选框,来自动将您创建的输出镜像直接推送到 Amazon AWS Cloud AMI 服务提供商。
先决条件
-
您必须有访问系统的
root或wheel组用户权限。 - 您已在浏览器中打开了 RHEL web 控制台的 RHEL 镜像构建器界面。
- 您已创建了一个蓝图。请参阅在 web 控制台界面中创建一个蓝图。
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须具有一个可写的 S3 存储桶。
流程
- 在 RHEL 镜像构建器仪表盘中,点之前创建的 blueprint name。
- 选择 Images 选项卡。
点 Create Image 创建自定义镜像。
Create Image 窗口打开。
-
在 Type 下拉菜单中选择
Amazon Machine Image Disk (.raw)。 - 选中 Upload to AWS 复选框,将您的镜像上传到 AWS 云,然后点 Next。
要验证您是否可以访问 AWS ,请在对应的字段中输入您的
"AWS access key ID"和"AWS secret access key"。点 Next。注意您只能在创建新 Access Key ID 时查看 AWS secret access key 。如果您不知道您的 Secret Key,请生成一个新的 Access Key ID。
-
在
Image name字段中输入镜像名称,在Amazon S3 bucket name字段中输入 Amazon bucket 名称,并为您要添加自定义镜像的存储桶输入AWS region字段。点 Next。 查看信息并点 Finish。
可选,点 Back 来修改任何不正确的详情。
注意您必须具有要发送自定义镜像的存储桶的正确 IAM 设置。此流程使用 IAM 导入和导出,因此您必须在将镜像上传到存储桶前为存储桶设置 策略。如需更多信息,请参阅 IAM 用户所需的权限。
-
在 Type 下拉菜单中选择
右上角的弹出窗口告诉您保存的进度。它还告知镜像创建过程、创建此镜像的过程以及后续的上传到 AWS Cloud。
完成这个过程后,您可以看到 镜像构建完成状态。
在浏览器中,访问 Service→EC2。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
Available状态,以指示它已被上传。 - 在 AWS 仪表盘上,选择您的镜像并点 Launch。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
- 此时会打开一个新窗口。根据启动镜像所需的资源选择实例类型。点 Review and Launch。
- 查看您的实例启动详情。如果需要进行任何更改,您可以编辑任何部分。点击 Launch。
在启动实例之前,选择一个访问它的公钥。
您可以使用您已有的密钥对,也可以创建一个新的密钥对。
按照以下步骤在 EC2 中创建新的密钥对,并将它连接到新实例。
- 在下拉菜单中选择 "Create a new key pair"。
- 输入新密钥对名称。它生成一个新的密钥对。
- 点 "下载密钥对" 在您的本地系统中保存新密钥对。
然后,您可以点 Launch Instance 启动您的实例。
您可以检查实例的状态,它显示为 Initializing。
- 实例状态变为 running 后,连接按钮将变为可用。
点 连接。此时会显示一个窗口,其中包含如何使用 SSH 连接的说明。
- 选择 A standalone SSH client 作为首选连接方法并打开终端。
在您存储私钥的位置,确保您的密钥是公开可见的,以便 SSH 可以正常工作。要做到这一点,请运行以下命令:
$ chmod 400 <your_instance_name>.pem使用其公共 DNS 连接到您的实例:
$ ssh -i <your-instance_name>.pem ec2-user@<your-instance-IP-address>键入
yes以确认您要继续连接。因此,您通过 SSH 连接到您的实例。
验证
- 检查在使用 SSH 连接到您的实例的过程中是否能够执行任何操作。
第 3 章 将 RHEL 镜像部署为 AWS 上的一个 EC2 实例 复制链接链接已复制到粘贴板!
要在 Amazon Web Services (AWS)上使用 RHEL 镜像,请将 RHEL 镜像转换为兼容 AWS 的格式。然后,从 RHEL 镜像部署虚拟机,来作为一个 Elastic Cloud Compute (EC2)实例运行。要创建、自定义和部署 RHEL Amazon Machine Image (AMI),您可以使用以下方法之一:
- 使用 RHEL 镜像构建器。具体说明请参阅 准备 AMI 镜像并上传到 AWS 和 AWS 具体的资源列表。
- 手动创建和配置 AMI。这是一个非常复杂的过程,但提供了更精细的自定义选项。具体说明请查看以下部分。
要将 RHEL 镜像部署为 AWS 上的一个 EC2 实例,请确保完成以下步骤:
- 您已创建了一个 红帽帐户。
- 您已 注册并设置了一个 AWS 帐户。
3.1. 用于公有云的可用 RHEL 镜像类型 复制链接链接已复制到粘贴板!
要将 RHEL 虚拟机部署到认证的云服务提供商(CCSP)上,您可以使用多个选项。下表列出了镜像类型的可用镜像类型、订阅、注意事项和镜像类型的示例场景。
要部署自定义的 ISO 镜像,您可以使用 RHEL 镜像构建器。使用 RHEL 镜像构建器,您可以创建、上传和这些自定义镜像,并将它们部署到您选择的 CCSP 。详情请参阅 制作一个自定义 RHEL 系统镜像 。
| 镜像类型 | 订阅 | 注意事项 | 示例情境 |
|---|---|---|---|
| 部署红帽黄金镜像 | 使用您现有的红帽订阅 | 订阅包括红帽产品成本和对云访问镜像的支持,同时向 CCSP 支付所有其他实例的费用 | 在 CCSP 上选择一个红帽黄金镜像。有关黄金镜像以及如何访问它们的详情,请查看 红帽云访问参考指南 |
| 部署移到 CCSP 的自定义镜像 | 使用您现有的红帽订阅 | 订阅包括红帽产品成本和对自定义 RHEL 镜像的支持,同时向 CCSP 支付所有其他实例的费用 | 上传自定义镜像并附加您的订阅 |
| 部署一个基于 RHEL 的自定义镜像 | 自定义机器镜像包含一个 RHEL 镜像 | 根据 现收现付 模式,按小时向 CCSP 支付费用。对于这种模式,在 CCSP 市场上提供了按需镜像。CCSP 提供对这些镜像的支持,而红帽会处理更新。CCSP 通过 Red Hat Update Infrastructure (RHUI)提供更新。 | 当您在 CCSP 云管理控制台上启动实例时,请选择 RHEL 镜像,或者从 CCSP 市场选择一个镜像。 |
要将一个 按需提供的 EC2 实例转换为 RHEL 的 自带许可证(BYOL) EC2 实例,请参阅 在 License Manager 中转换 Linux 的 许可证类型。
3.2. 使用自定义基础镜像部署 RHEL 实例 复制链接链接已复制到粘贴板!
要手动配置虚拟机(VM),请首先创建一个基础(入门)镜像。然后,您可以修改配置设置,并添加 VM 在云上操作所需的软件包。您也可以在上传镜像后为特定应用程序进行额外的配置更改。
从基础镜像创建虚拟机具有以下优点:
- 完全自定义
- 对任何用例都具有较高的灵活性
- 轻量级 - 仅包含操作系统和所需的运行时库
要从 ISO 镜像创建自定义基础镜像,您可以使用命令行界面(CLI)或 Web 控制台来创建和配置虚拟机。
验证以下虚拟机配置:
- SSH - 启用 SSH 以授予对虚拟机的远程访问权限。
- DHCP - 配置主虚拟适配器,以使用 DHCP。
先决条件
- 您已在主机上 启用了虚拟化。
- 对于 Web 控制台,请确保以下选项:
- 您没有勾选 Immediately Start VM 选项。
- 您已将 Memory 大小改为您喜欢的设置。
- 您已将 Virtual Network Interface Settings 下的 Model 选项改为 virtio ,将 vCPU 改为虚拟机的容量设置。
流程
配置 Red Hat Enterprise Linux (RHEL)虚拟机:
- 要从命令行(CLI)安装,请确保您根据虚拟机的要求设置了默认内存、网络接口和 CPU。详情请参阅 使用命令行创建虚拟机
- 要从 web 控制台安装,请参阅 使用 web 控制台创建虚拟机
当安装开始时:
-
创建
root密码. - 创建管理用户帐户。
-
创建
-
安装完成后,重启虚拟机并登录到
root帐户。 -
以
root身份登录后,您可以配置镜像。 注册虚拟机并启用 RHEL 存储库:
# subscription-manager register对于 AMD64 或 Intel 64 (x86_64)虚拟机,请安装
nvme、xen-netfront和xen-blkfront驱动程序:# dracut -f --add-drivers "nvme xen-netfront xen-blkfront"对于 ARM 64 (aarch64)虚拟机,请安装
nvme驱动程序:# dracut -f --add-drivers "nvme"包括这些驱动程序可防止
dracut超时。或者,您可以将驱动程序添加到
/etc/dracut.conf.d/,然后输入dracut -f来覆盖现有的initramfs文件。
验证
验证系统是否有
cloud-init软件包并启用了它:# dnf install cloud-init # systemctl enable --now cloud-init.service- 关闭虚拟机。
3.3. 使用命令行将 RHEL 镜像上传到 AWS 复制链接链接已复制到粘贴板!
要在 Amazon Web Services (AWS)上运行 RHEL 实例,您必须首先将 RHEL 镜像上传到 AWS。要在 AWS 上配置和管理 RHEL EC2 实例,请使用 awscli2 工具。
3.3.1. 安装 AWSCLI2 复制链接链接已复制到粘贴板!
您可以使用 AWS 命令行界面 awscli2 工具在 AWS 上配置和管理 RHEL 镜像和红帽高可用性(HA)集群。
先决条件
- 您可以访问 AWS Access Key ID 和 AWS Secret Access Key。详情请参阅 管理访问密钥。
流程
安装
awscli2:# dnf install awscli2
验证
验证安装:
$ aws --version aws-cli/1.19.77 Python/3.6.15 Linux/5.14.16-201.fc34.x86_64 botocore/1.20.77为 AWS 凭证和设置配置
awscli2:$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
3.3.2. 转换镜像并将其推送到 Amazon S3 复制链接链接已复制到粘贴板!
您可以使用 qemu-img 工具将 qcow2 镜像格式的 RHEL 镜像转换为 OVA、VHD、VHDX、VMDK 和 raw,然后上传到 Amazon S3 存储。详情请参阅 AWS 支持的镜像格式。
先决条件
- 您已 使用 awscli2 创建了一个 Amazon S3 存储桶 来上传 RHEL 镜像。
流程
运行
qemu-img,来将.qcow2镜像转换为.raw镜像格式:# qemu-img convert -f qcow2 -O raw rhel-10.0-sample.qcow2 rhel-10.0-sample.raw将镜像上传到 Amazon S3 存储桶:
$ aws s3 cp rhel-10.0-sample.raw s3://<example-s3-bucket-name>
验证
- 检查 AWS S3 控制台 ,以确认上传成功。
3.3.3. 使用命令行管理 AWS 上的 RHEL 虚拟机 复制链接链接已复制到粘贴板!
通过使用 awscli2 工具,您可以通过命令行在 AWS 上管理 RHEL EC2 虚拟机。在这种情况下,您可以使用 vmimport 角色来管理 RHEL EC2 镜像快照。使用 awscli2,您还可以导入 RHEL EC2 镜像快照,创建 AMI、启动和连接到 RHEL EC2 实例。
-
使用
vmimport角色:使用vimport角色将 RHEL 镜像导入到 Amazon S3 存储桶的一种替代方法。请参阅 VM 导入/导出所需的权限。 - 将 RHEL 镜像导入为快照 :您可以将 Amazon S3 中的 RHEL 虚拟机镜像作为快照导入到 Amazon EC2 。详情请参阅 开始一个导入快照任务 和 监控一个导入快照任务。
- 创建并启动一个 RHEL EC2 实例:您可以从现有快照创建一个 RHEL Amazon Machine Image (AMI)并启动一个 RHEL EC2 实例。详情请参阅 使用 awscli2 从快照创建一个 AMI 和 使用 awscli2 启动、列出和删除 RHEL 实例 。
-
配置私钥并连接到 RHEL EC2 实例:您可以配置
<example_key>.pem文件,并连接到 RHEL EC2 实例。详情请参阅 使用 Amazon EC2 创建一个密钥对 和 使用 AWS CLI 连接 。
3.3.4. 附加红帽订阅 复制链接链接已复制到粘贴板!
使用 subscription-manager 命令,您可以注册并将红帽订阅附加到 RHEL 实例。
先决条件
- 您有一个活跃的 红帽帐户。
流程
注册您的系统:
# subscription-manager register附加您的订阅:
- 您可以使用激活码来附加订阅。如需更多信息,请参阅创建红帽客户门户网站激活码。
- 否则,您可以使用订阅池(池 ID)的 ID 手动附加订阅。请参阅 将基于主机的订阅附加到 hypervisor。
可选:要在 Red Hat Hybrid Cloud Console 中收集有关实例的各种系统指标,您可以使用 Red Hat Insights 注册实例。
# insights-client register --display-name <display_name_value>有关 Red Hat Insights 的进一步配置的更多信息,请参阅 Red Hat Insights 的客户端配置指南。
3.3.5. 在 AWS 黄金镜像上设置自动注册 复制链接链接已复制到粘贴板!
您可以在 Amazon Web Services (AWS)上更快、更轻松地部署 Red Hat Enterprise Linux (RHEL)虚拟机。为此,您必须将 RHEL 的黄金镜像设置为自动注册到 Red Hat Subscription Manager (RHSM)。
先决条件
您已下载了用于 AWS 的最新 RHEL 黄金镜像。具体说明请参阅在 AWS 上使用黄金镜像。
注意您只能一次将一个 AWS 帐户附加到一个红帽帐户。因此,在将其附加到您的红帽帐户之前,请确保其他用户不需要访问 AWS 帐户。
流程
将黄金镜像上传到 AWS。具体说明请参阅以下之一:
- 使用上传的镜像创建虚拟机。如果您的 RHSM 设置正确,则会自动订阅到 RHSM。
验证
在使用上述说明创建的 RHEL 虚拟机中,通过执行
subscription-manager identity命令来验证系统是否已注册到 RHSM。在成功注册的系统上,这会显示系统的 UUID。例如:# subscription-manager identity system identity: fdc46662-c536-43fb-a18a-bbcb283102b7 name: 192.168.122.222 org name: 6340056 org ID: 6340056
3.4. 使用 AWS 控制台将 RHEL 镜像上传到 AWS 复制链接链接已复制到粘贴板!
要在 Amazon Web Services (AWS)上运行 RHEL 实例,您必须首先将 RHEL 镜像上传到 AWS。要在 AWS 上配置和管理 RHEL EC2 实例,请使用 awscli2 工具。
3.4.1. 使用 AWS 控制台转换镜像,并将其推送到 S3 复制链接链接已复制到粘贴板!
您可以将 qcow2 镜像格式的 RHEL 镜像转换为 OVA、VHD、VHDX、VMDK 或 raw,并使用 qemu-img 工具将它上传到 Amazon Elastic Cloud Computing (EC2)。详情请参阅 AWS 支持的镜像格式。
先决条件
- 您已 使用 Amazon S3 控制台创建了一个 Amazon S3 存储桶 来上传 RHEL 镜像。
流程
运行
qemu-img,来将.qcow2镜像转换为.raw镜像格式:# qemu-img convert -f qcow2 -O raw rhel-10.0-sample.qcow2 rhel-10.0-sample.raw- 使用 Amazon S3 控制台 将镜像上传到 S3 存储桶
验证
- 检查 AWS S3 控制台 ,以确认上传成功。
3.4.2. 使用 AWS 控制台管理 AWS 上的 RHEL 虚拟机 复制链接链接已复制到粘贴板!
您可以使用 AWS 控制台管理 AWS 上的 RHEL EC2 虚拟机。您可以创建 RHEL EC2 镜像快照,管理 Amazon Machine Image (AMI),启动并连接到 RHEL EC2 实例。
先决条件
- 您已使用 AWS 控制台将 RHEL 镜像推送到 Amazon S3 存储桶。详情请参阅 使用 AWS 控制台转换镜像,并将其推送到 S3。
流程
-
使用
vmimport角色:将 RHEL 镜像导入到 Amazon S3 存储桶的另一种方法是使用vmimport角色。请参阅 将您的虚拟机作为镜像导入。 - 将 RHEL 镜像作为快照导入:您可以将 Amazon S3 中的 RHEL 虚拟机镜像作为快照导入到 Amazon EC2。详情请参阅 使用 VM 导入/导出将磁盘作为快照导入,并 监控导入快照的任务。
- 创建并启动一个 RHEL EC2 实例:您可以从现有快照创建一个 RHEL Amazon Machine Image (AMI),并启动一个 RHEL EC2 实例。详情请参阅 从快照创建 AMI 和 使用定义的参数启动实例。
-
配置私钥并连接到 RHEL EC2 实例:您可以配置
<example_key>.pem文件,并连接到 RHEL EC2 实例。详情请参阅 使用 Amazon EC2 创建密钥对 和 使用 Amazon EC2 控制台连接 。 - 有关红帽订阅,请参阅 附加红帽订阅
第 4 章 在 AWS 上配置红帽高可用性集群 复制链接链接已复制到粘贴板!
高可用性(HA)集群提供对 RHEL 节点进行分组,以便在节点失败时自动重新分发工作负载。您可以在包括 Amazon Web Services (AWS)的公有云平台上部署 HA 集群。在 AWS 上设置 HA 集群的过程与在传统非云环境中配置它们的过程类似。
要在 AWS 上配置将 EC2 实例用作集群节点的 Red Hat HA 集群,请参阅以下部分。您有几个用来为集群获取 RHEL 镜像的选项。详情请参阅 用于公有云的可用 RHEL 镜像类型。
在开始前,请确保完成以下步骤:
- 您已创建了一个 红帽帐户。
- 您已 注册并设置了一个 AWS 帐户。
4.1. 在公有云平台上使用高可用性集群的好处 复制链接链接已复制到粘贴板!
高可用性(HA)集群连接一组计算机(称为 节点)来运行特定的工作负载。HA 集群提供冗余来处理硬件或软件故障。当 HA 集群中的一个节点出现故障时,Pacemaker 集群资源管理器会快速地将工作负载分发到其他节点,确保集群上的服务继续,而没有明显的停机。
您还可以在公有云平台上运行 HA 集群。在这种情况下,您要将云中的虚拟机(VM)实例用作单独的集群节点。在公有云平台上使用 HA 集群有以下优点:
- 改进了可用性 :如果出现虚拟机故障,工作负载会被快速重新分发到其他节点,因此运行的服务不会中断。
- 可扩展性 :您可以在需要高时启动额外的节点,并在需求低时停止它们。
- 成本效益 :使用现收现付定价,您只需为运行的节点支付费用。
- 简化了管理 :一些公有云平台提供管理界面,来更轻松地配置 HA 集群。
要在 RHEL 系统上启用 HA,红帽提供了一个 HA Add-On。您可以使用 Red Hat HA Add-On 配置 RHEL 集群,来管理具有一组 RHEL 服务器的 HA 集群。Red Hat HA Add-On 提供对集成的和简化的工具的访问权限。使用集群资源管理器、隔离代理和资源代理,您可以为自动化设置和配置集群。Red Hat HA Add-On 为自动化提供了以下组件:
-
Pacemaker,一个提供命令行工具(pcs)和 GUI (pcsd)来支持多个节点的集群资源管理器 -
创建和管理 HA 集群的
Corosync和Kronosnet - 配置和管理自定义应用程序的资源代理
- 隔离代理,来在裸机服务器和虚拟机等平台上使用集群
Red Hat HA Add-On 处理关键任务,如节点故障、负载均衡和节点健康检查,以实现容错和系统可靠性。
4.2. 安装高可用性软件包和代理 复制链接链接已复制到粘贴板!
在每个节点上,您需要安装高可用性软件包和代理,以便在 AWS 上配置红帽高可用性集群。
先决条件
- 您已完成了 使用命令行将 RHEL 镜像上传到 AWS 的配置。
流程
删除 AWS Red Hat Update Infrastructure (RHUI)客户端。
$ sudo -i # dnf -y remove rh-amazon-rhui-client在红帽注册虚拟机。
# subscription-manager register禁用所有软件仓库。
# subscription-manager repos --disable=启用 RHEL 10 服务器 HA 存储库。
# subscription-manager repos --enable=rhel-10-for-x86_64-highavailability-rpms更新 RHEL AWS 实例。
# dnf update -y安装 Red Hat High Availability Add-On 软件包,以及来自 High Availability 渠道的 AWS 隔离代理。
# dnf install pcs pacemaker fence-agents-aws用户
hacluster在上一步中的pcs和pacemaker安装过程中创建。在所有群集节点上为hacluster创建密码。所有节点都使用相同的密码。# passwd hacluster如果安装了
firewalld.service,请在 RHEL Firewall 中添加high availability服务。# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reload启动
pcs服务,并使其在引导时启动。# systemctl start pcsd.service # systemctl enable pcsd.service-
编辑
/etc/hosts,并添加 Red Hat Enterprise Linux (RHEL)主机名和内部 IP 地址。详情请参阅如何在 RHEL 集群节点上设置 /etc/hosts 文件?
验证
确保
pcs服务正在运行。# systemctl status pcsd.service pcsd.service - PCS GUI and remote configuration interface Loaded: loaded (/usr/lib/systemd/system/pcsd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2018-03-01 14:53:28 UTC; 28min ago Docs: man:pcsd(8) man:pcs(8) Main PID: 5437 (pcsd) CGroup: /system.slice/pcsd.service └─5437 /usr/bin/ruby /usr/lib/pcsd/pcsd > /dev/null & Mar 01 14:53:27 ip-10-0-0-48.ec2.internal systemd[1]: Starting PCS GUI and remote configuration interface… Mar 01 14:53:28 ip-10-0-0-48.ec2.internal systemd[1]: Started PCS GUI and remote configuration interface.
4.3. 创建高可用性集群 复制链接链接已复制到粘贴板!
您可以按照以下流程创建一个 Red Hat High Availability Add-On 集群。这个示例流程会创建一个由节点 z1.example.com 和 z2.example.com 组成的集群。
要显示 pcs 命令的参数以及这些参数的描述,请使用 pcs 命令的 -h 选项。
流程
在要运行
pcs的节点上,为集群中的每个节点验证pcs用户hacluster。以下命令在
z1.example.com上为双节点集群(由z1.example.com和z2.example.com组成)中的两个节点验证用户hacluster。[root@z1 ~]# pcs host auth z1.example.com z2.example.com Username: hacluster Password: z1.example.com: Authorized z2.example.com: Authorized从
z1.example.com执行以下命令,以创建由z1.example.com和z2.example.com组成的双节点集群my_cluster。这会将集群配置文件传播到集群中的两个节点。此命令包含--start选项,该选项将在集群的两个节点上启动群集服务。[root@z1 ~]# pcs cluster setup my_cluster --start z1.example.com z2.example.com在节点引导时,启用集群服务在集群中的每个节点上运行。
注意对于特定环境,您可以跳过这一步来禁用集群服务。这可让您确保在节点重新加入集群前解决集群或您的资源中的任何问题。如果禁用了集群服务,则需要在重新引导节点时手动启动该服务,方法是在该节点上执行
pcs cluster start命令。[root@z1 ~]# pcs cluster enable --all使用
pcs cluster status命令显示您创建的集群的状态。因为在使用pcs cluster setup命令的--start选项启动集群服务时,集群启动和运行可能有一些延迟,所以您应该确保在集群及其配置上执行后续操作前集群已启动并运行。[root@z1 ~]# pcs cluster status Cluster Status: Stack: corosync Current DC: z2.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Thu Oct 11 16:11:18 2018 Last change: Thu Oct 11 16:11:00 2018 by hacluster via crmd on z2.example.com 2 Nodes configured 0 Resources configured ...
4.4. 在 Red Hat High Availability 集群中配置隔离功能 复制链接链接已复制到粘贴板!
如果与集群中某个节点通信失败,那么集群中的其他节点必须能够限制或释放对故障集群节点可访问的资源的访问。这无法通过通过联系集群节点本身来实现,因为集群节点可能没有响应。反之,必须提供一个外部的方法来实现。这个方法为称为隔离(fencing)。隔离设备是一个外部设备,集群使用它用来限制错误节点对共享资源的访问,或对集群的节点执行硬重启。
如果没有配置隔离设备,您就无法知道以前被出现问题的集群节点使用的资源已被释放,这可能会阻止服务在集群的其他节点中运行。因此,该系统可能会错误地假设集群节点释放了它的资源,从而可能导致数据崩溃和数据丢失。没有隔离设备配置的数据完整性就无法保证,集群配置将不被支持。
当隔离进行时,不允许执行其他集群操作。在隔离完成前,或集群节点重启后重新加入集群前,集群的正常操作不能恢复。有关隔离及其在红帽高可用性集群中重要性的更多信息,请参阅红帽知识库解决方案 红帽高可用性集群中的隔离。
4.4.1. 显示可用的隔离代理及其选项 复制链接链接已复制到粘贴板!
以下命令可用于查看可用的隔离代理和特定隔离代理的可用选项。
您的系统硬件决定了用于集群的隔离设备的类型。有关支持的平台和架构,以及不同的隔离设备,请参阅红帽知识库文章 RHEL 高可用性集群的支持策略 中的 集群平台和架构 部分。
运行以下命令列出所有可用的隔离代理。当您指定过滤器时,这个命令只会显示与过滤器匹配的隔离代理。
pcs stonith list [filter]
运行以下命令以显示指定隔离代理的选项。
pcs stonith describe [stonith_agent]
例如:以下命令显示 APC 通过 telnet/SSH 的隔离代理的选项。
# pcs stonith describe fence_apc
Stonith options for: fence_apc
ipaddr (required): IP Address or Hostname
login (required): Login Name
passwd: Login password or passphrase
passwd_script: Script to retrieve password
cmd_prompt: Force command prompt
secure: SSH connection
port (required): Physical plug number or name of virtual machine
identity_file: Identity file for ssh
switch: Physical switch number on device
inet4_only: Forces agent to use IPv4 addresses only
inet6_only: Forces agent to use IPv6 addresses only
ipport: TCP port to use for connection with device
action (required): Fencing Action
verbose: Verbose mode
debug: Write debug information to given file
version: Display version information and exit
help: Display help and exit
separator: Separator for CSV created by operation list
power_timeout: Test X seconds for status change after ON/OFF
shell_timeout: Wait X seconds for cmd prompt after issuing command
login_timeout: Wait X seconds for cmd prompt after login
power_wait: Wait X seconds after issuing ON/OFF
delay: Wait X seconds before fencing is started
retry_on: Count of attempts to retry power on
对于提供 method 选项的隔离代理,fence_sbd 代理除外,cycle 值不被支持,不应被指定,因为它可能导致数据损坏。但是,即使是 fence_sbd,您不应指定一个方法,而是使用默认值。
4.4.2. 创建隔离设备 复制链接链接已复制到粘贴板!
创建隔离设备的命令格式如下。有关可用隔离设备创建选项的列表,请参阅 pcs stonith -h 显示。
pcs stonith create stonith_id stonith_device_type [stonith_device_options] [op operation_action operation_options]
以下命令为单一节点创建一个隔离设备。
# pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s
有些隔离设备只能隔离一个节点,其他设备则可能隔离多个节点。您创建隔离设备时指定的参数取决于您的隔离设备的支持和要求。
- 有些隔离设备可自动决定它们可以隔离哪些节点。
-
您可以在创建隔离设备时使用
pcmk_host_list参数,以指定由该隔离设备控制的所有机器。 -
有些隔离设备需要主机名与隔离设备可识别的规格映射。在创建隔离设备时,您可以使用
pcmk_host_map参数来映射主机名。
有关 pcmk_host_list 和 pcmk_host_map 参数的详情,请参考 隔离设备的常规属性。
配置隔离设备后,您必须测试该设备以保证其可以正常工作。有关测试隔离设备的详情,请参考 测试隔离设备。
4.4.3. 隔离设备的常规属性 复制链接链接已复制到粘贴板!
您可以为隔离设备设置很多常规属性,以及决定隔离行为的各种集群属性。
任何集群节点都可以使用任何隔离设备隔离保护其它集群节点,无论隔离资源是启动还是停止。资源是否启动只控制设备的重复监控,而不控制是否使用资源,但以下情况除外:
-
您可以通过运行
pcs stonith disable stonith_id命令来禁用隔离设备。这将阻止任何节点使用该设备。 -
要防止特定节点使用隔离设备,您可以使用
pcs constraint location … avoids命令为隔离资源配置位置约束。 -
配置
stonith-enabled=false将完全禁用隔离。但请注意,红帽不支持隔离功能被禁用的集群,因为它不适用于生产环境。
下表描述了您可以为隔离设备设置的一般属性。
| 项 | 类型 | Default(默认) | 描述 |
|---|---|---|---|
|
| 字符串 |
用于不支持主机名的设备的主机名到端口号的映射。例如: | |
|
| 字符串 |
此设备控制的机器列表(可选,除非 | |
|
| 字符串 |
如果设置了
* 否则,
* 否则,
* 否则, |
如何确定被设备控制的机器。允许的值: |
下表总结了您可以为隔离设备设置的其他属性。请注意,这些属性仅适用于高级使用。
| 项 | 类型 | Default(默认) | 描述 |
|---|---|---|---|
|
| 字符串 | port |
提供端口的一个替代参数。有些设备不支持标准端口参数,或者可能会提供额外的端口。使用这个参数指定一个替代的、针对于具体设备的参数,它代表要被隔离的机器。值 |
|
| 字符串 | reboot |
要运行的一个替代命令,而不是 |
|
| time | 60s |
指定用于重新启动操作的替代超时,而不是 |
|
| 整数 | 2 |
在超时时间内重试 |
|
| 字符串 | off |
要运行的一个替代命令,而不是 |
|
| time | 60s |
指定用于 off 操作的替代超时,而不是 |
|
| 整数 | 2 | 在超时时间内重试 off 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前重试操作的次数。 |
|
| 字符串 | list |
要运行的一个替代命令,而不是 |
|
| time | 60s | 指定 list 操作使用的特代的超时时间。和一般的设备相比,有些设备需要更长或更短的时间完成。使用此选项指定替代的、list 操作使用的、特定于设备的超时时间。 |
|
| 整数 | 2 |
在超时时间内重试 |
|
| 字符串 | monitor |
要运行的一个替代命令,而不是 |
|
| time | 60s |
指定用于 monitor 操作的替代超时,而不是 |
|
| 整数 | 2 |
在超时时间内重试 |
|
| 字符串 | status |
要运行的一个替代命令,而不是 |
|
| time | 60s |
指定用于 status 操作的替代超时,而不是 |
|
| 整数 | 2 | 在超时时间内重试 status 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前 status 操作的次数。 |
|
| 字符串 | 0s |
为隔离操作启用基本延迟,并指定基本延迟值。您可以使用 |
|
| time | 0s |
为隔离操作启用一个随机延迟,并指定最大延迟,即组合基本延迟和随机延迟的最大值。例如,如果基本延迟为 3,并且 |
|
| 整数 | 1 |
在这个设备上可并行执行的最大操作数量。需要首先配置集群属性 |
|
| 字符串 | on |
仅供高级使用:要运行的一个替代命令,而不是 |
|
| time | 60s |
仅供高级使用:指定用于 |
|
| 整数 | 2 |
仅供高级使用:超时时间内重试 |
除了可以为单独的隔离设备设置的属性外,您还可以设置用来决定隔离行为的集群属性,如下表所述。
| 选项 | 默认 | 描述 |
|---|---|---|
|
| true |
表示失败的节点以及带有资源无法停止的节点应该被隔离。保护数据需要将此设置为
如果为
红帽只支持将这个值设置为 |
|
| reboot |
发送到隔离设备的操作。允许的值: |
|
| 60s | 等待 STONITH 操作完成的时间。 |
|
| 10 | 在集群不再立即重新尝试之前,隔离可以失败的次数。 |
|
| 在认为某个节点被硬件 wathcdog 终止前等待的最长时间。建议将此值设置为硬件 watchdog 超时值的两倍。只有在使用 watchdog-only SBD 配置进行隔离时才需要这个选项。 | |
|
| true | 允许并行执行隔离操作。 |
|
| stop |
决定集群节点在收到其自身隔离通知时应如何响应。如果错误配置了隔离,或者使用 fabric 隔离方式当没有中断集群的通信,集群节点可能会收到其自身隔离的通知信息。允许的值为
虽然此属性的默认值是 |
|
| 0(禁用) | 设置一个允许您配置双节点集群的隔离延迟,以便在脑裂情况下,运行最少或最不重要资源的节点是被隔离的节点。有关隔离延迟参数及其相互作用的一般信息,请查看 隔离延迟。 |
4.4.4. 隔离延迟 复制链接链接已复制到粘贴板!
当集群通信在双节点集群中丢失时,一个节点可能首先检测到此节点,并隔离其他节点。但是,如果两个节点同时检测到这个,则每个节点都可以启动其他节点的隔离,使两个节点关闭或重置。通过设置隔离延迟,您可以降低两个集群节点相互隔离的可能性。您可以在具有超过两个节点的集群中设置延迟,但这通常不会有任何好处,因为只有具有仲裁的分区将启动隔离。
您可以根据系统要求设置不同类型的隔离延迟。
静态隔离延迟
静态隔离延迟是一个固定的、预先确定的延迟。在一个节点上设置静态延迟使该节点更有可能被隔离,因为它增加了检测到丢失的通信后,其他节点首先启动隔离的机会。在主动/被动集群中,在被动节点上设置一个延迟,使得在通信中断时,被动节点将更有可能被隔离。您可以使用
pcs_delay_base集群属性配置静态延迟。当单独的隔离设备用于每个节点时,或者一个隔离设备用于所有节点时,您可以设置此属性。动态隔离延迟
动态隔离延迟是随机的。它可能会有所不同,并在需要隔离时确定。您可以配置一个随机延迟,并使用
pcs_delay_max集群属性为组合的基本延迟和随机延迟指定最大值。当每个节点的隔离延迟是随机的时,被隔离的节点也是随机的。如果您的集群被配置为在主动/主动设计中具有所有节点的单个隔离设备,则可能会发现此功能很有用。优先级隔离延迟
优先级隔离延迟基于活跃的资源优先级。如果所有资源具有相同的优先级,则运行最少资源的节点是被隔离的节点。在大多数情况下,您只使用一个与延迟相关的参数,但可以组合它们。合并与延迟相关的参数,将资源的优先级值加在一起,以创建总延迟。您可以使用
priority-fencing-delay集群属性配置优先级隔离延迟。您可以在主动/主动集群设计中发现此功能,因为它可以在节点之间的通信丢失时让运行最少资源的节点更有可能被隔离。
pcmk_delay_base 集群属性
设置 pcmk_delay_base 集群属性为隔离启用了基本延迟,并指定了基本延迟值。
当您除了设置 pcmk_delay_base 属性,又设置了 pcmk_delay_max 集群属性时,整个延迟会从添加到此静态延迟的随机延迟值中派生,以便总和保持在最大延迟之下。当您设置了 pcmk_delay_base ,但没有设置 pcmk_delay_max 时,延迟没有随机的组件,它将是 pcmk_delay_base 的值。
您可以使用 pcmk_delay_base 参数为不同的节点指定不同的值。这允许在双节点集群中使用单个隔离设备,每个节点有不同的延迟。您不需要配置两个单独的设备来使用单独的延迟。要为不同的节点指定不同的值,您可以使用与 pcmk_host_map 类似的语法,将主机名映射到该节点的延迟值。例如,在隔离 node1 时,node1:0;node2:10s 将不会使用延迟,在隔离 node2 时使用 10 秒的延迟。
pcmk_delay_max集群属性设置
pcmk_delay_max集群属性启用了隔离操作的随机延迟,并指定了最大延迟,这是组合的基本延迟和随机延迟的最大值。例如,如果基本延迟为 3,并且pcmk_delay_max为 10,则随机延迟将在 3 和 10 之间。当您除了设置
pcmk_delay_max属性外,还设置了pcmk_delay_base集群属性时,整个延迟是从添加到此静态延迟的随机延迟值中派生的,以便总和保持在最大延迟之下。当您设置pcmk_delay_max,但没有设置pcmk_delay_base时,这个延迟没有静态组件。
priority-fencing-delay 集群属性
设置 priority-fencing-delay 集群属性允许您配置一个双节点集群,以便在脑裂的情况下,运行最少或最不重要资源的节点是被隔离的节点。
priority-fencing-delay 属性可以设置为持续时间。这个属性的默认值为 0(禁用)。如果将此属性被设置为非零值,并且优先级 meta-attribute 为至少一个资源进行了配置,那么在脑裂的情况下,在其上运行的具有所有资源的最高组合优先级的节点将更有可能保持正常运行。例如,如果您设置了 pcs resource defaults update priority=1 和 pcs property set priority-fencing-delay=15s,且没有设置其他优先级,那么运行最多资源的节点将更有可能保持正常运行,因为其他节点在启动隔离前将等待 15 秒。如果特定资源比其他资源更重要,您可以赋予它更高的优先权。
如果为该克隆配置了优先级,运行可升级的克隆 master 角色的节点会得到额外的 1 点。
隔离延迟的交互
设置多种类型的隔离延迟会产生以下结果:
-
使用
priority-fencing-delay属性设置的任何延迟都被添加到pcmk_delay_base和pcmk_delay_max隔离设备属性中的任何延迟中。当两个节点具有相等的优先级时,或者两个节点因为节点丢失以外的原因需要隔离时,这种行为允许一些延迟,例如当为资源监控器操作设置了on-fail=fencing时。当设置这些延迟的组合时,将priority-fencing-delay属性设置为一个明显大于pcmk_delay_base和pcmk_delay_max中的最大延迟的值,以确保优先级的节点是首选的。将此属性设置为此值的两倍通常是安全的。 -
只有 Pacemaker 本身调度的隔离才能观察到隔离延迟。由外部代码(如
dlm_controld)调度的隔离和由pcs stonith fence命令实现的隔离不会向隔离设备提供必要信息。 -
有些单独的隔离代理实现一个延迟参数,其名称由代理决定,并且其独立于使用
pcmk_delay_* 属性配置的延迟。如果同时配置了这些延迟,它们会被加在一起,通常不会一起使用。
4.4.5. 测试隔离设备 复制链接链接已复制到粘贴板!
隔离(fencing)是红帽集群基础结构的基本部分,对于验证或测试隔离是否正常运行至关重要。
当 Pacemaker 集群节点或 Pacemaker 远程节点被隔离时,应该发生硬终止,而不是操作系统的安全关闭。如果您的系统隔离节点时发生安全关闭,请在 /etc/systemd/logind.conf 文件中禁用 ACPI 软关闭,以便您的系统会忽略任何按电源按钮的信号。有关在 logind.conf 文件中禁用 ACPI soft-off 的说明,请参阅在 logind.conf 文件中禁用 ACPI soft-off
使用以下步骤测隔离护设备。
流程
使用 SSH、Telnet、HTTP 或者用来连接到设备的任何远程协议,来手动登录并测试隔离设备,或者查看给出的输出。例如,如果您要为启用了 IPMI 的设备配置隔离,则尝试使用
ipmitool远程登录。记录手动登录时使用的选项,因为在使用隔离代理时可能需要使用这些选项。如果您无法登录到隔离设备,请确定设备是可以被 ping 到的,没有因为如防火墙等配置限制对隔离设备的访问,在隔离设备中启用了远程访问,且有正确的凭证。
使用隔离代理脚本手动运行隔离代理。这不需要集群服务正在运行,因此您可以在集群配置该设备前执行这个步骤。这可保证在继续前隔离设备响应正常。
注意这些示例将为 iLO 设备使用
fence_ipmilan隔离代理脚本。您使用的实际隔离代理以及调用代理的命令取决于服务器硬件。您应该参考您使用的隔离保护代理的 man 页来确定要指定的选项。您通常需要了解隔离设备的登录和密码,以及其它与该隔离设备相关的信息。以下示例显示了使用
-o status参数运行fence_ipmilan隔离代理脚本的格式,来检查另一个节点上的隔离设备接口的状态,而实际上并没有对该节点进行隔离。这可让您在尝试重新引导节点前测试该设备并使其可用。在运行这个命令时,您可以为 iLO 设备指定打开和关闭权限的 iLO 用户的名称和密码。# fence_ipmilan -a ipaddress -l username -p password -o status以下示例显示了使用
-o reboot参数运行fence_ipmilan隔离代理脚本的格式。在一个节点上运行此命令可重新引导此 iLO 设备管理的节点。# fence_ipmilan -a ipaddress -l username -p password -o reboot如果隔离代理无法正确地执行 status、off、on 或 reboot 操作,您应该检查硬件、隔离设备的配置以及命令的语法。另外,您可以运行启用了 debug 输出的隔离代理脚本。调试输出会记录隔离设备时失败的事件,对于一些隔离代理,这个信息可能非常有用。
# fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug当诊断发生的故障时,您应该确定手动登录到隔离设备时指定的选项与您使用隔离代理传递给隔离代理的操作相同。
对于支持加密连接的隔离代理,您可能会因为证书验证失败而看到一个错误,这需要您信任主机或使用隔离代理的
ssl-insecure参数。同样,如果在目标设备上禁用了 SSL/TLS,可能需要在为隔离代理设置 SSL 参数时考虑此事项。注意如果正在测试的隔离代理是
fence_drac、fence_ilo或系统管理设备的其他一些隔离代理,并且一直出现故障,则返回尝试fence_ipmilan。大多数系统管理卡支持 IPMI 远程登录,唯一支持的隔离代理是fence_ipmilan。一旦隔离设备在集群中配置了与手动操作相同的选项,并且集群已经启动,则可以从任何节点(或者多次从不同的节点)使用
pcs stonith fence命令来测试隔离,如下例所示。pcs stonith fence命令从 CIB 中读取集群配置,并调用配置的隔离代理来执行隔离操作。这会验证集群配置是否正确。# pcs stonith fence node_name如果
pcs stonith fence命令正常工作,这意味着发生隔离事件时集群的隔离配置应该可以正常工作。如果命令失败,这意味着集群管理无法通过它获取的配置调用隔离设备。检查以下问题并根据需要更新集群配置。- 检查您的隔离配置。例如,如果您使用了主机映射,则应该确保系统可以使用您提供的主机名查找节点。
- 检查该设备的密码和用户名是否包含 bash shell 可能会错误解析的特殊字符。请确定,使用引号来包括您输入的密码和用户名是否可以解决这个问题。
-
检查是否可以使用您在
pcs stonith命令中指定的 IP 地址或主机名连接到设备。例如:如果您在 stonith 命令中给出主机名,但使用 IP 地址进行测试,则这不是一个有效的测试。 如果您可以访问您的隔离设备使用的协议,使用那个协议尝试连接该设备。例如,很多代理都使用 ssh 或者 telnet。您应该尝试使用您在配置该设备时提供的凭证连接到该设备,查看是否收到有效提示符并登录该设备。
如果您确定所有参数都正确,但仍无法连接到隔离设备,则可以查看隔离设备的日志信息(如果隔离设备提供了日志)。这会显示该用户是否已连接以及该用户发出什么命令。您还可以在
/var/log/messages文件中搜索 stonith 实例和错误 ,这可以了解发生了什么,但有些代理可以提供额外的信息。
隔离设备测试正常工作并启动并运行集群后,测试实际故障。要做到这一点,在集群中执行应启动令牌丢失的操作。
关闭网络。如何关闭网络取决于您的具体配置。在很多情况下,您可以从主机中物理拔掉网线或电源电缆。有关模拟网络故障的详情,请查看红帽知识库解决方案 模拟 RHEL 集群上网络故障的正确方法是什么?
注意不推荐通过在本地主机中禁用网络接口而不是物理断开网线或者电源电缆的方法进行测试,因为这无法准确模拟典型的实际失败。
使用本地防火墙的阻塞 corosync 的入站和出站网络流落。
以下示例会阻止 corosync,假设使用默认的 corosync 端口,
firewalld用作本地防火墙,corosync 使用的网络接口位于默认防火墙区内:# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport=5405 -j DROP # firewall-cmd --add-rich-rule='rule family="ipv4" port port="5405" protocol="udp" drop使用
sysrq-trigger模拟崩溃,并使您的机器死机。请注意,触发内核 panic 可能会导致数据丢失 ; 建议首先禁用集群资源。# echo c > /proc/sysrq-trigger
4.4.6. 配置隔离级别 复制链接链接已复制到粘贴板!
Pacemaker 通过一个称为隔离拓扑的功能实现有多个设备的节点的隔离。要实现拓扑结构,根据常规创建独立设备,然后在配置中的隔离拓扑部分定义一个或多个隔离级别。
Pacemaker 会按如下方式处理隔离级别:
- 级别以整数形式递增,从 1 开始。
- 如果设备失败,对当前级别的处理会中断。不会执行该级别的其他设备,而是尝试下一个级别。
- 如果所有设备被成功隔离,那么该级别已成功,且不会尝试其他级别。
- 当一个级别被通过(success)或所有级别都已经被尝试(failed)后,操作就会完成。
使用以下命令为节点添加隔离级别。这些设备以逗号分开的 stonith id 列表形式提供,对该级别的节点尝试使用这些设备。
pcs stonith level add level node devices
以下示例设置了隔离级别,以便在设备 my_ilo 失败且无法隔离节点时,Pacemaker 会尝试使用设备 my_apc。
先决条件
-
您已为节点
rh7-2配置了名为my_ilo的 ilo 隔离设备。 -
您已为节点
rh7-2配置了名为my_apc的 apc 隔离设备。
流程
为节点
rh7-2上的隔离设备my_ilo添加隔离级别 1。# pcs stonith level add 1 rh7-2 my_ilo为节点
rh7-2上的隔离设备my_apc添加隔离级别 2。# pcs stonith level add 2 rh7-2 my_apc列出当前配置的隔离级别。
# pcs stonith level Node: rh7-2 Level 1 - my_ilo Level 2 - my_apc
4.4.7. 删除隔离级别 复制链接链接已复制到粘贴板!
您可以删除指定节点和设备的隔离级别。如果没有指定节点或设备,则您指定的隔离级别会从所有节点中删除。
流程
删除指定节点和设备的隔离级别:
# pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
4.4.8. 清除隔离级别 复制链接链接已复制到粘贴板!
您可以清除指定节点或 stonith id 上的隔离级别。如果您没有指定节点或 stonith id,则会清除所有隔离级别。
流程
清除指定节点或 stinith id 上的隔离级别:
# pcs stonith level clear [node]|stonith_id(s)]如果您指定一个以上的 stonith id,则必须用逗号分开(不要有空格),如下例所示。
# pcs stonith level clear dev_a,dev_b
4.4.9. 验证隔离级别中的节点和设备 复制链接链接已复制到粘贴板!
您可以验证所有在隔离级别指定的隔离设备和节点都存在。
流程
使用以下命令验证在隔离级别中指定的所有隔离设备和节点是否存在:
# pcs stonith level verify
4.4.10. 在隔离拓扑中指定节点 复制链接链接已复制到粘贴板!
您可以在隔离拓扑中通过在节点名称上应用的正则表达式、节点属性及其值来指定节点。
流程
以下命令将节点 node1、
和node2node3配置为使用隔离设备apc1和apc2,节点node4、node5和node6使用隔离设备apc3和apc4:# pcs stonith level add 1 "regexp%node[1-3]" apc1,apc2 # pcs stonith level add 1 "regexp%node[4-6]" apc3,apc4以下命令使用节点属性匹配得到相同的结果:
# pcs node attribute node1 rack=1 # pcs node attribute node2 rack=1 # pcs node attribute node3 rack=1 # pcs node attribute node4 rack=2 # pcs node attribute node5 rack=2 # pcs node attribute node6 rack=2 # pcs stonith level add 1 attrib%rack=1 apc1,apc2 # pcs stonith level add 1 attrib%rack=2 apc3,apc4
4.4.11. 配置冗余电源的隔离 复制链接链接已复制到粘贴板!
当为冗余电源配置隔离时,集群必须确保在尝试重启主机时,在恢复电源前两个电源都关闭。
如果节点永远无法完全断电,则该节点可能无法释放其资源。这可能会导致同时访问这些资源,并导致节点崩溃的问题。
您只需要定义每个设备一次,并指定需要两者来隔离节点。
流程
创建第一个隔离设备。
# pcs stonith create apc1 fence_apc_snmp ipaddr=apc1.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"创建第二个隔离设备。
# pcs stonith create apc2 fence_apc_snmp ipaddr=apc2.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"指定需要这两个设备来隔离节点。
# pcs stonith level add 1 node1.example.com apc1,apc2 # pcs stonith level add 1 node2.example.com apc1,apc2
4.4.12. 管理隔离设备 复制链接链接已复制到粘贴板!
pcs 命令行界面提供各种命令,您可以用来在配置后管理隔离设备。
4.4.12.1. 显示配置的隔离设备 复制链接链接已复制到粘贴板!
以下命令显示所有目前配置的隔离设备。如果指定了 stonith_id,命令仅显示那个配置的隔离设备的选项。如果指定了 --full 选项,则会显示所有配置的隔离选项。
pcs stonith config [stonith_id] [--full]
4.4.12.2. 使用 pcs 命令导出隔离设备 复制链接链接已复制到粘贴板!
您可以使用 pcs stonith config 命令的 --output-format=cmd 选项显示可用于在不同系统上重新创建配置的隔离设备的 pcs 命令。
以下命令创建一个 fence_apc_snmp 隔离设备,并显示您可以用来重新创建该设备的 pcs 命令。
# pcs stonith create myapc fence_apc_snmp ip="zapc.example.com" pcmk_host_map="z1.example.com:1;z2.example.com:2" username="apc" password="apc"
# pcs stonith config --output-format=cmd
Warning: Only 'text' output format is supported for stonith levels
pcs stonith create --no-default-ops --force -- myapc fence_apc_snmp \
ip=zapc.example.com password=apc 'pcmk_host_map=z1.example.com:1;z2.example.com:2' username=apc \
op \
monitor interval=60s id=myapc-monitor-interval-60s
4.4.12.3. 导出隔离级别配置 复制链接链接已复制到粘贴板!
pcs stonith config 和 pcs stonith level config 命令支持 --output-format= 选项,来以 JSON 格式和作为 pcs 命令隔离级别配置。
-
指定
--output-format=cmd会显示从当前集群配置中创建的配置隔离级别的pcs命令。您可以使用这些命令在不同系统上重新创建配置的隔离级别。 -
指定
--output-format=json显示 JSON 格式的隔离级别配置,它适用于机器解析。
4.4.12.4. 修改和删除隔离设备 复制链接链接已复制到粘贴板!
使用以下命令向当前配置的隔离设备修改或添加选项。
pcs stonith update stonith_id [stonith_device_options]
使用 pcs stonith update 命令更新 SCSI 隔离设备会导致在隔离资源运行的同一节点上运行的所有资源重启。您可以使用以下命令的任一版本来更新 SCSI 设备,而不会重启其他集群资源。SCSI 隔离设备可被配置为多路径设备。
pcs stonith update-scsi-devices stonith_id set device-path1 device-path2
pcs stonith update-scsi-devices stonith_id add device-path1 remove device-path2
使用以下命令从当前的配置中删除隔离设备。
pcs stonith delete stonith_id
4.4.12.5. 手动隔离一个集群节点 复制链接链接已复制到粘贴板!
您可以使用以下命令手动隔离节点。如果您指定了 --off 选项,这将使用 off API 调用 stonith,这将关闭节点,而不是重启它。
pcs stonith fence node [--off]
如果隔离设备无法隔离节点,即使它不再活跃,集群可能无法恢复节点上的资源。如果发生了这种情况,在手动确定该节点已关闭后,您可以输入以下命令向集群确认节点已关闭,并释放其资源以用于恢复。
如果您指定的节点实际上没有关闭,但运行通常由集群控制的集群软件或服务,则会发生数据损坏和集群故障。
pcs stonith confirm node
4.4.12.6. 禁用隔离设备 复制链接链接已复制到粘贴板!
要禁用隔离设备,请运行 pcs stonith disable 命令。
以下命令禁用隔离设备 myapc。
# pcs stonith disable myapc
4.4.12.7. 防止节点使用隔离设备 复制链接链接已复制到粘贴板!
要防止特定节点使用隔离设备,您可以为隔离资源配置位置限制。
以下示例阻止隔离设备 node1-ipmi 在 node1 上运行。
# pcs constraint location node1-ipmi avoids node1
4.4.13. 配置 ACPI 以用于集成的隔离设备 复制链接链接已复制到粘贴板!
如果您的集群使用集成的隔离设备,必须配置 ACPI(高级配置和电源界面)以保证迅速和完全的隔离。
如果将集群节点配置为使用集成的隔离设备保护,则为该节点禁用 ACPI Soft-Off。禁用 ACPI Soft-Off 允许集成的隔离设备立即并完全关闭节点,而不是尝试彻底关闭(例如,shutdown -h now)。否则,如果启用了 ACPI Soft-Off,集成的隔离设备可能需要 4 秒以上的时间来关闭节点(请参阅下面的备注)。另外,如果启用了 ACPI Soft-Off,且在关闭过程中有一个节点 panic 或停滞,则集成的保护设备可能无法关闭该节点。在这些情况下,隔离会被延迟或者失败。因此,当使用集成隔离设备隔离节点并启用 ACPI Soft-Off时,集群恢复会很慢,或者需要管理员进行干预才能恢复。
保护节点所需时间取决于所使用的集成的保护设备。有些集成的保护设备性能与按住电源按钮相当,因此隔离设备可在 4-5 秒内关闭该节点。其他集成的隔离设备性能与按电源开关一致,依靠操作系统关闭该节点,因此隔离设备关闭该节点的时间要大大超过 4-5 秒。
- 禁用 ACPI Soft-Off 的首选方法是将 BIOS 设置改为 "instant-off" 或无延迟关闭该节点的对等设置,如 禁用 ACPI Soft-Off 中所述。
使用 BIOS 禁用 ACPI Soft-Off 可能不适用于某些系统。如果无法使用 BIOS 禁用 ACPI Soft-Off,您可以使用以下备选方法之一禁用 ACPI Soft-Off:
-
在
/etc/systemd/logind.conf文件中设置HandlePowerKey=ignore,并在隔离时验证节点节点是否立即关闭,如 logind.conf 文件中禁用 ACPI 软关闭 中所述。这是禁用 ACPI Soft-Off 的第一个替代方法。 在内核引导命令行中附加
acpi=off,如 在 GRUB 2 文件中完全禁用 ACPI 中所述。这是禁用 ACPI Soft-Off 的第二个替代方法,如果首选方法或第一个替代方法不可用。重要这个方法可完全禁用 ACPI。当 ACPI 被完全禁用时,以下计算机可能无法正确引导。只有在其他方法无法在您的集群中使用时,才使用这个方法。
4.4.13.1. 使用 BIOS 禁用 ACPI Soft-Off 复制链接链接已复制到粘贴板!
您可以按照以下步骤配置每个集群节点的 BIOS 来禁用 ACPI Soft-Off。
使用 BIOS 禁用 ACPI Soft-Off 的步骤可能因服务器系统而异。您应该在您的硬件文档中验证此步骤。
流程
-
重启节点,并启动
BIOS CMOS 设置工具程序。 - 进入 Power 菜单(或者对等的电源管理菜单)。
在 Power 菜单中,将
Soft-Off by PWR-BTTN功能(或等效的功能)设置为Instant-Off(或使用无延迟电源按钮关闭节点的对等设置)。以下BIOS CMOS Setup Utiliy示例显示ACPI Function设置为Enabled,Soft-Off by PWR-BTTN设置为Instant-Off。注意与
ACPI Function等效,Soft-Off by PWR-BTTN和Instant-Off可能因计算机而异。但这个过程的目的是配置 BIOS,以便计算机能无延迟地关闭电源按钮。-
退出
BIOS CMOS 设置工具程序,保存 BIOS 配置。 - 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备。
BIOS CMOS 设置实用程序 :
`Soft-Off by PWR-BTTN` set to
`Instant-Off`
+---------------------------------------------|-------------------+
| ACPI Function [Enabled] | Item Help |
| ACPI Suspend Type [S1(POS)] |-------------------|
| x Run VGABIOS if S3 Resume Auto | Menu Level * |
| Suspend Mode [Disabled] | |
| HDD Power Down [Disabled] | |
| Soft-Off by PWR-BTTN [Instant-Off | |
| CPU THRM-Throttling [50.0%] | |
| Wake-Up by PCI card [Enabled] | |
| Power On by Ring [Enabled] | |
| Wake Up On LAN [Enabled] | |
| x USB KB Wake-Up From S3 Disabled | |
| Resume by Alarm [Disabled] | |
| x Date(of Month) Alarm 0 | |
| x Time(hh:mm:ss) Alarm 0 : 0 : | |
| POWER ON Function [BUTTON ONLY | |
| x KB Power ON Password Enter | |
| x Hot Key Power ON Ctrl-F1 | |
| | |
| | |
+---------------------------------------------|-------------------+
本例展示了 ACPI Function 设置为 Enabled ,Soft-Off by PWR-BTTN 设置为 Instant-Off。
4.4.13.2. 在 logind.conf 文件中禁用 ACPI Soft-Off 复制链接链接已复制到粘贴板!
要禁用 /etc/systemd/logind.conf 文件中的 电源密钥处理,请使用以下流程。
流程
在
/etc/systemd/logind.conf文件中定义以下配置:HandlePowerKey=ignore重启
systemd-logind服务:# systemctl restart systemd-logind.service
验证
- 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备。
4.4.13.3. 在 GRUB 2 文件中完全禁用 ACPI 复制链接链接已复制到粘贴板!
您可以通过在内核的 GRUB 菜单条目中添加 acpi=off 来禁用 ACPI Soft-Off。
这个方法可完全禁用 ACPI。当 ACPI 被完全禁用时,以下计算机可能无法正确引导。只有在其他方法无法在您的集群中使用时,才使用这个方法。
流程
将
--args选项与grubby工具的--update-kernel选项结合使用,来更改每个集群节点的grub.cfg文件,如下所示:# grubby --args=acpi=off --update-kernel=ALL- 重新引导节点。
验证
- 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备
4.5. 在 AWS 中设置 IP 地址资源 复制链接链接已复制到粘贴板!
客户端使用 IP 地址管理网络中的集群资源。要处理集群的故障切换,请在使用特定网络资源代理的集群中包括 IP 地址资源。RHEL HA Add-On 提供了一组资源代理,它们创建 IP 地址资源来管理 AWS 上的各种 IP 地址。根据 HA 集群管理中的 AWS IP 地址类型,您可以决定要配置的资源代理。它包括以下创建用于管理 IP 地址的集群资源的方法:
-
公开给互联网:使用
awseip网络资源。 -
仅限于单个 AWS 可用区(AZ):使用
awsvip和IPaddr2网络资源。 分配到同一 AWS 区域中的多个 AWS AZ:使用
aws-vpc-move-ip网络资源。注意如果 HA 集群不管理任何 IP 地址,则在 AWS 上不需要管理虚拟 IP 地址的资源代理。如果您需要对您的特定部署进行进一步指导,请参阅 AWS。
4.5.1. 创建 IP 地址资源来管理公开给互联网的 IP 地址 复制链接链接已复制到粘贴板!
为确保高可用性(HA)客户端可以访问使用面向公共的互联网连接的 RHEL 节点,请配置 AWS 二级弹性 IP 地址 (awseip)资源以使用弹性 IP 地址。
先决条件
- 您已配置了一个可以使用的集群。
- 您的集群节点必须有权访问 RHEL HA 存储库。详情请参阅 安装高可用性软件包和代理。
- 您已设置了 AWS CLI2。详情请参阅 安装 AWSCLI2。
流程
-
将两个资源添加到您已创建的 同一组 中,以强制
order和colocation约束。 安装
resource-agents软件包:# dnf install resource-agents创建弹性 IP 地址:
[root@ip-10-0-0-48 ~]# aws ec2 allocate-address --domain vpc --output text eipalloc-4c4a2c45 vpc 35.169.153.122可选:显示
awseip的描述。这显示了这个代理的选项和默认操作。# pcs resource describe awseip在第二步中使用分配的 IP 地址创建二级弹性 IP 地址资源:
# pcs resource create <resource_id> awseip elastic_ip=<elastic_ip_address> allocation_id=<elastic_ip_association_id> --group networking-groupExample:
# pcs resource create elastic awseip elastic_ip=35.169.153.122 allocation_id=eipalloc-4c4a2c45 --group networking-group
验证
验证集群状态以确保资源可用:
[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 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在本例中,
newcluster是一个活跃的集群,其中vip和elastic等资源是networking-group资源组的一部分。从本地工作站启动到您已创建的弹性 IP 地址的 SSH 会话:
$ ssh -l ec2-user -i ~/.ssh/cluster-admin.pem 35.169.153.122- 验证 SSH 连接的主机与具有弹性资源的主机是同一台机器。
4.5.2. 创建一个 IP 地址资源来管理限于单个 AWS 可用区的私有 IP 地址 复制链接链接已复制到粘贴板!
您可以将 AWS 二级私有 IP 地址 (awsvip)资源配置为使用虚拟 IP 地址。使用 awsvip,AWS 上的高可用性(HA)客户端可以访问 RHEL 节点,以便使用只在一个可用区(AZ)中可访问的私有 IP 地址。您可以在集群中的任何节点上完成以下流程。
先决条件
- 您已配置了一个可以使用的集群。
- 您的集群节点有权访问 RHEL HA 存储库。详情请参阅 安装高可用性软件包和代理。
- 您已设置了 AWS CLI。具体说明请参阅 安装 AWSCLI2。
流程
安装
resource-agents软件包。# dnf install resource-agents可选:查看
awsvip的选项和默认操作:# pcs resource describe awsvip使用
VPC CIDR块中未使用的私有 IP 地址创建二级私有 IP 地址:[root@ip-10-0-0-48 ~]# pcs resource create privip awsvip secondary_private_ip=10.0.0.68 --group networking-group在这里,二级私有 IP 地址是包含在资源组中的一部分
使用
vip资源 ID 和networking-group组名称创建一个虚拟 IP 资源:root@ip-10-0-0-48 ~]# pcs resource create vip IPaddr2 ip=10.0.0.68 --group networking-group这是一个 Virtual Private Cloud (VPC) IP 地址,它从隔离节点映射到故障转移节点,从而屏蔽子网中隔离节点的故障。确保虚拟 IP 属于与您在最后一步中创建的二级私有 IP 地址相同的资源组。
验证
验证集群状态以确保资源可用:
[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在本例中,
newcluster是一个活跃的集群,其中vip和elastic等资源是networking-group资源组的一部分。
4.5.3. 创建一个 IP 地址资源来管理可在多个 AWS 可用区间移动的 IP 地址 复制链接链接已复制到粘贴板!
您可以配置 Red Hat Enterprise Linux (RHEL) Overlay IP (aws-vpc-move-ip)资源代理以使用弹性 IP 地址。使用 aws-vpc-move-ip,您可以通过在高可用性(HA)客户端的单个 AWS 区域(AZ)中的多个可用区间移动 RHEL 节点来管理它。
先决条件
- 您已配置了一个集群。
- 您的集群节点有权访问 RHEL HA 存储库。如需更多信息,请参阅 安装高可用性软件包和代理。
- 您已设置了 AWS CLI。具体说明请参阅 安装 AWSCLI2。
您已在在集群上配置了一个具有以下权限的身份和访问管理(IAM)用户:
- 修改路由表
- 创建安全组
- 创建 IAM 策略和角色
流程
安装
resource-agents软件包:# dnf install resource-agents可选:查看
awsvip的选项和默认操作:# pcs resource describe aws-vpc-move-ip为 IAM 用户设置
OverlayIPAgentIAM 策略。-
在 AWS 控制台中,导航到 Services → IAM → Policies → Create
OverlayIPAgentPolicy 输入以下配置,并将 <region>、 <account_id> 和 <cluster_route_table_id> 值更改为与您集群的相应值。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1424870324000", "Effect": "Allow", "Action": "ec2:DescribeRouteTables", "Resource": "*" }, { "Sid": "Stmt1424860166260", "Action": [ "ec2:CreateRoute", "ec2:ReplaceRoute" ], "Effect": "Allow", "Resource": "arn:aws:ec2:_<region>_:_<account_id>_:route-table/_<cluster_route_table_id>_" } ] }
-
在 AWS 控制台中,导航到 Services → IAM → Policies → Create
在 AWS 控制台中,在集群中的所有节点上禁用
Source/Destination Check功能。为此,请右键单击每个节点 → Networking → Change Source/Destination Checks。在出现的弹出消息中,单击 Yes, Disable。
为集群创建路由表。为此,在集群的一个节点上使用以下命令:
# aws ec2 create-route --route-table-id <cluster_route_table_id> --destination-cidr-block <new_cidr_block_ip/net_mask> --instance-id <cluster_node_id>在命令中,按如下所示替换值:
-
ClusterRouteTableID:现有集群 Virtual Private Cloud (VPC)路由表的路由表 ID。 -
NewCIDRblockIP: VPC 无类域间路由(CIDR)块之外的新 IP 地址和网络掩码。例如,如果 VPC CIDR 块是172.31.0.0/16,则新的 IP 地址或子网掩码可能是192.168.0.15/32。 -
ClusterNodeID: 集群中另一个节点的实例 ID。
-
在集群的一个节点上创建一个
aws-vpc-move-ip资源,其使用一个客户端可访问的空闲 IP 地址。以下示例创建一个名为vpcip的资源,其使用 IP192.168.0.15。# pcs resource create vpcip aws-vpc-move-ip ip=192.168.0.15 interface=eth0 routing_table=<cluster_route_table_id>在集群的所有节点上,编辑
/etc/hosts/文件,并添加一行新创建资源的 IP 地址。例如:192.168.0.15 vpcip
验证
测试新的
aws-vpc-move-ip资源的故障转移功能:# pcs resource move vpcip如果故障转移成功,在
vpcip资源移动后删除自动创建的约束:# pcs resource clear vpcip
第 5 章 使用在 AWS 上配置具有安全引导的 RHEL 复制链接链接已复制到粘贴板!
在统一可扩展固件接口(UEFI)规范中定义的安全引导,控制在引导时只运行可信和授权的程序。它在启动时验证引导装载程序及其组件的数字签名,确保只加载可信和授权的程序,并阻止未经授权的程序。您可以为 AWS Marketplace Red Hat Enterprise Linux (RHEL) Amazon Machine Image (AMI)和自定义 RHEL AMI 启用此功能。
5.1. AWS 上 RHEL AMI 的类型 复制链接链接已复制到粘贴板!
- AWS Marketplace RHEL AMI
- AWS Marketplace 提供为特定用例(如数据处理、系统管理和 web 开发)设计的预配置的 Red Hat Enterprise Linux (RHEL) Amazon Machine Image (AMI)。这些现成的镜像通过减少操作系统和软件包所需的手动安装和配置来缩短设置时间。
- 自定义 RHEL AMI
- 自定义 RHEL AMI 为客户和合作伙伴提供灵活性,来构建和部署满足特定应用程序和工作流要求的定制环境。通过创建自定义 RHEL AMI,您可以使用预安装了所需工具、配置和安全策略的 RHEL 实例。这种自定义旨在更好地控制基础设施。
5.2. 了解云上 RHEL 的安全引导 复制链接链接已复制到粘贴板!
安全引导是统一可扩展固件接口(UEFI)的一个功能。它确保在引导时只有可信和数字签名的程序和组件(如引导装载程序和内核)运行。安全引导根据硬件中存储的可信密钥来检查数字签名。如果检测到任何被篡改的组件或被不信任的实体签名的组件,它将中止引导过程。此操作防止恶意软件破坏操作系统。
通过确保只有受信任的实体参与引导链,安全引导在配置机密虚拟机(CVM)中起着至关重要的作用。它通过定义的接口验证对特定设备路径的访问,强制使用最新的配置,并永久覆盖以前的配置。当 Red Hat Enterprise Linux (RHEL)内核在启用了安全引导的情况下引导时,它会进入 lockdown 模式,只允许加载被可信厂商签名的内核模块。因此,安全引导增强了操作系统引导序列的安全。
5.2.1. 安全引导的组件 复制链接链接已复制到粘贴板!
安全引导机制包括固件、签名数据库、加密密钥、引导装载程序、硬件模块和操作系统。以下是 UEFI 可信变量的组件:
-
密钥交换密钥数据库(KEK):公钥交换,来在 RHEL 操作系统和虚拟机固件之间建立信任。您还可以使用这些密钥更新允许的签名数据库(
db)和禁止的签名数据库(dbx)。 - 平台密钥数据库(PK):一个自签名的单密钥数据库,来在虚拟机固件和云平台之间建立信任。PK 还更新 KEK 数据库。
-
允许的签名数据库(
db):维护证书列表或二进制哈希的数据库,以检查二进制文件是否可以在系统上引导。另外,来自db的所有证书都会被导入到 RHEL 内核的.platformkeyring 中。使用此功能,您可以在lockdown模式下添加和加载签名的第三方内核模块。 -
禁止的签名数据库(
dbx):维护一个不允许在系统中引导的证书列表或二进制哈希的数据库。
针对 dbx 数据库的二进制文件检查和安全引导高级目标(SBAT)机制。使用 SBAT,您可以通过将签名二进制文件的证书保持为有效来撤销特定二进制文件的旧版本。
5.2.2. 云上 RHEL 的安全引导阶段 复制链接链接已复制到粘贴板!
当 RHEL 实例在 Unified Kernel Image (UKI)模式下引导并启用了安全引导时,RHEL 实例会按照以下顺序与云服务基础设施进行交互:
- 初始化 :当 RHEL 实例引导时,云托管固件最初会引导并实施安全引导机制。
- 变量存储初始化 :固件会从变量存储初始化 UEFI 变量,这是一个专用的存储区域,用于固件需要管理引导过程和运行时操作的信息。当 RHEL 实例首次启动时,存储会从与虚拟机镜像关联的默认值初始化。
引导装载程序 :引导时,固件会加载第一阶段引导装载程序。对于 x86 UEFI 环境中的 RHEL 实例,第一阶段引导装载程序是 shim。shim 引导装载程序验证并加载引导过程的下一阶段,并作为 UEFI 和 GRUB 之间的桥梁。
-
RHEL 中的 shim x86 二进制文件目前由
Microsoft 公司 UEFI CA 2011Microsoft 证书签名,因此 RHEL 实例可以在启用了安全引导模式的不同硬件和虚拟平台上引导,其中允许的签名数据库(db)有默认的 Microsoft 证书。 -
shim 二进制文件使用 Red Hat Secure Boot CA 以及可选的 Machine Owner Key (
MOK)扩展了可信证书的列表。
-
RHEL 中的 shim x86 二进制文件目前由
-
UKI: shim 二进制文件加载 RHEL UKI (
kernel-uki-virt软件包)。x86_64 架构上相应的证书Red Hat Secure Boot Signing 504签署 UKI。您可以在redhat-sb-certs软件包中找到此证书。Red Hat Secure Boot CA 为这个证书签名,因此检查成功。 -
UKI 附加组件 :当您使用 UKI
cmdline扩展时,RHEL 内核会主动针对db、MOK检查其签名,以及与 shim 一起提供的证书。此过程确保操作系统厂商 RHEL 或用户已签署了扩展。
当 RHEL 内核在安全引导模式下引导时,它会进入 lockdown 模式。进入 lockdown 后,RHEL 内核将 db 密钥添加到 .platform keyring 中,并将 MOK 密钥添加到 .machine keyring 中。在内核构建过程中,构建系统使用临时密钥,后者由私钥和公钥组成。构建系统签署标准的 RHEL 内核模块,如 kernel-modules-core、kernel-modules、kernel-modules-extra。完成每个内核构建后,私钥不再适用于为第三方模块签名。您可以将 db 和 MOK 中的证书用于此目的。
5.3. 在 AWS Marketplace 上配置具有安全引导的 RHEL 实例 复制链接链接已复制到粘贴板!
要确保 AWS 上的 RHEL 实例有安全的操作系统引导过程,请使用安全引导。要在 AWS 上配置具有安全引导支持的 Red Hat Enterprise Linux (RHEL)实例,请从 AWS 市场启动 RHEL Amazon Machine Image (AMI),后者已预先配置了启用了 uefi-preferred 的引导模式。uefi-preferred 选项支持安全引导所需的统一可扩展固件接口(UEFI)引导装载程序。如果没有 UEFI,安全引导功能将无法正常工作。
要避免安全问题,请生成私钥并将其与当前 RHEL 实例分开保存。如果安全引导 secret 存储在使用它们的同一实例上,则入侵者可以访问升级其特权的 secret 。有关启动 AWS EC2 实例的更多信息,请参阅 开始使用 Amazon EC2。
先决条件
RHEL AMI 在引导设置中启用了
uefi-preferred选项:$ aws ec2 describe-images --image-id <ami-099f85fc24d27c2a7> --region <us-east-2> | grep -E '"ImageId"|"Name"|"BootMode"' "ImageId": "ami-099f85fc24d27c2a7", "Name": "RHEL-10.0.0_HVM_GA-20250423-x86_64-0-Hourly2-GP3", "BootMode": "uefi-preferred"您已在 RHEL 实例上安装了以下软件包:
-
awscli2 -
python3 -
openssl -
efivar -
keyutils -
edk2-ovmf -
python3-virt-firmware
-
流程
检查 RHEL Marketplace AMI 实例的平台状态:
$ mokutil --sb-state SecureBoot disabled Platform is in Setup Modesetup模式允许在实例中更新安全引导 UEFI 变量。创建一个新的随机通用唯一标识符(UUID),并将其存储在一个系统生成的文本文件中:
$ uuidgen --random > GUID.txt为平台密钥数据库生成一个新的
PK.keyRSA 私钥和自签名PK.cerX.509 证书:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout PK.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Platform key/" \ -outform DER -out PK.ceropenssl工具通过将输出格式设置为可辨识的编码规则(DER)来为证书生成一个通用名称Platform key。为密钥交换密钥数据库生成一个新的
KEK.keyRSA 私钥和自签名KEK.cerX.509 证书:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout KEK.key \ -new -x509 -sha256 \ -days 3650 \ -subj "CN=Key Exchange Key/" \ -outform DER -out KEK.cer生成一个
custom_db.cer自定义证书:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout custom_db.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Signature Database key/" \ --outform DER -out custom_db.cer下载
Microsoft Corporation UEFI CA 2011证书:$ wget https://go.microsoft.com/fwlink/p/?linkid=321194 --user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" -O MicCorUEFCA2011_2011-06-27.crt为 x64 位系统下载更新的禁止签名的 UEFI 撤销列表文件(
dbx):$ wget https://uefi.org/sites/default/files/resources/x64_DBXUpdate.bin使用
virt-fw-vars工具生成 UEFI 变量文件:$ virt-fw-vars --set-pk "$(< GUID.txt)" PK.cer \ --add-kek "$(< GUID.txt)" KEK.cer \ --add-db "$(< GUID.txt)" custom_db.cer \ --add-db 77fa9abd-0359-4d32-bd60-28f4e78f784b MicCorUEFCA2011_2011-06-27.crt \ --set-dbx DBXUpdate.bin -i /usr/share/edk2/ovmf/OVMF_VARS.secboot.fd \ --output VARS详情请查看您系统上的
virt-fw-vars (1)手册页。将 UEFI 变量转换为可扩展固件接口(EFI)签名列表(ESL)格式:
$ python3 /usr/share/doc/python3-virt-firmware/experimental/authfiles.py \ --input VARS \ --outdir . $ for f in PK KEK db dbx; do tail -c +41 $f.auth > $f.esl; done注意每个 GUID 是一个分配的值,代表一个 EFI 参数
-
8be4df61-93ca-11d2-aa0d-00e098032b8c:EFI_GLOBAL_VARIABLE_GUID -
d719b2cb-3d3a-4596-a3bc-dad00e67656f:EFI_IMAGE_SECURITY_DATABASE_GUID
EFI_GLOBAL_VARIABLE_GUID参数维护可引导设备和引导管理器的设置,而EFI_IMAGE_SECURITY_DATABASE_GUID参数代表安全引导变量db,dbx的镜像安全数据库,以及所需密钥和证书的存储。-
将数据库证书传到目标实例,使用
efivar工具来管理 UEFI 环境变量。要传输
PK.esl,请输入:# efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-PK -f PK.esl要传输
KEK.esl,请输入:# efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-KEK -f KEK.esl要传输
db.esl,请输入:# efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-db -f db.esl要传输 x64 架构的
dbx.eslUEFI 撤销列表文件,请输入:# efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-dbx -f dbx.esl
- 从 AWS 控制台重启实例。
验证
验证是否启用了安全引导:
$ mokutil --sb-state SecureBoot enabled使用
keyctl工具验证自定义证书的内核 keyring :$ sudo keyctl list %:.platform 4 keys in keyring: 786569360: ---lswrv 0 0 asymmetric: Signature Database key: 5856827178d376838611787277dc1d090c575759 ...
5.4. 从自定义 RHEL 镜像配置具有安全引导的 RHEL 实例 复制链接链接已复制到粘贴板!
要确保 AWS 上的 RHEL 实例具有安全的操作系统引导过程,请使用安全引导。当您注册了自定义 RHEL Amazon 机器镜像(AMI)时,镜像由安全引导的预存储统一固件接口(UEFI)变量组成。这可让从 RHEL AMI 启动的所有实例在第一次引导时都使用带有所需变量的安全引导机制。
先决条件
- 您已创建了并上传了一个 AWS AMI 镜像。详情请参阅 准备和上传 AWS AMI。
您已安装了以下软件包:
-
awscli2 -
python3 -
openssl -
efivar -
keyutils -
python3-virt-firmware
-
流程
创建一个新的随机通用唯一标识符(UUID),并将其存储在一个系统生成的文本文件中:
$ uuidgen --random > GUID.txt为平台密钥数据库生成一个新的 RSA 私钥
PK.key和自签名 X.509 证书PK.cer:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout PK.key \ -new -x509 -sha256 \ -days 3650 \ -outform DER -out PK.ceropenssl工具通过将输出格式设置为可辨识的编码规则(DER)来为证书生成一个通用名称平台密钥。为密钥交换密钥数据库生成一个新的 RSA 私钥
KEK.key和自签名 X.509 证书KEK.cer:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout KEK.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Key Exchange Key/" \ -outform DER -out KEK.cer生成一个自定义证书
custom_db.cer:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout custom_db.key \ -new -x509 -sha256 \ -days 3650 -subj "/CN=Signature Database key/" \ --outform DER -out custom_db.cer为 64 位系统下载更新的禁止签名的 UEFI 撤销列表文件(
dbx):$ wget https://uefi.org/sites/default/files/resources/x64_DBXUpdate.bin使用
virt-fw-vars工具从密钥、数据库证书和 UEFI 变量存储生成aws_blob.bin二进制文件:$ virt-fw-vars --output-aws aws_blob.bin \ --set-pk "$(< GUID.txt)" PK.cer \ --add-kek "$(< GUID.txt)" KEK.cer \ --add-db "$(< GUID.txt)" custom_db.cer \ --add-db 77fa9abd-0359-4d32-bd60-28f4e78f784b MicCorUEFCA2011_2011-06-27.crt \ --set-dbx x64_DBXUpdate.bin自定义 blob 由以下几项组成:
-
带有自签名 X.509 证书的
PK.cer -
具有所有者组 GUID 和 Privacy Enhanced Mail (
pem)格式的KEK.cer和custom_db.cer -
从排除签名的数据库下载的
x64_DBXUpdate.bin列表(dbx)。 -
77fa9abd-0359-4d32-bd60-28f4e78f784bUUID 适用于MicCorUEFCA2011_2011-06-27.crtMicrosoft Corporation UEFI 认证机构 2011。
-
带有自签名 X.509 证书的
使用
awscli2工具从带有所需的安全引导变量的磁盘快照创建并注册 AMI:$ aws ec2 register-image \ --name rhel-10.0-secure-boot \ --architecture x86_64 \ --virtualization-type hvm \ --root-device-name "/dev/sda1" \ --block-device-mappings "{\"DeviceName\": \"/dev/sda1\",\"Ebs\": {\"SnapshotId\": \"<snap-02d4db3813ff9b98e>\"}}" \ --ena-support --boot-mode uefi \ --region eu-central-1 \ --uefi-data $(cat aws_blob.bin) { "ImageId": "<ami-09125e5689d5fdf2b>" }- 从 AWS 控制台重启实例。
验证
验证安全引导功能:
$ mokutil --sb-state SecureBoot enabled使用
keyctl工具验证自定义证书的内核 keyring :$ sudo keyctl list %:.platform 4 keys in keyring: 216534498: ---lswrv 0 0 asymmetric: Signature Database key: 5856827178d376838611787277dc1d090c575759 ...