在 Microsoft Azure 上部署和管理 RHEL
大约 65 分钟
在 Microsoft Azure 上部署和管理 RHEL
来源:官方文档 原始多页入口:在 Microsoft Azure 上部署和管理 RHEL 内容规模:约 85,478 字符,65 个章节标题,257 个命令/代码块,30 条提示框
阅读提要
- 副标题:获取 RHEL 系统镜像并在 Azure 上创建 RHEL 实例
- 摘要:要在 Microsoft Azure 上使用 Red Hat Enterprise Linux (RHEL),您可以创建和部署 RHEL 系统镜像。这也涉及:为 RHEL 实例注册、部署和置备 RHEL 镜像。
- 主要章节:获取 RHEL 系统镜像并在 Azure 上创建 RHEL 实例;对红帽文档提供反馈;第 1 章 公有云平台上的 RHEL 简介;第 2 章 准备 VHD 镜像并将其上传到 Microsoft Azure;第 3 章 在 Azure 上将 RHEL 镜像部署为一个计算实例;第 4 章 在 Microsoft Azure 上配置红帽高可用性集群;第 5 章 在 Azure 上配置带有安全引导的 RHEL;第 6 章 使用 Intel TDX 在公有云平台上配置 RHEL;第 7 章 使用 AMD SEV SNP 在公有云平台上配置 RHEL;第 8 章 在带有 UKI 的公共云平台上配置 RHEL
- 推荐阅读顺序:先看“阅读提要”和目录,再按章节查看“关键点/命令/注意”;需要原文细节时点击来源链接。
章节笔记
概览
- 该章节主要为下一级主题的入口。
获取 RHEL 系统镜像并在 Azure 上创建 RHEL 实例
- 要点:摘要
对红帽文档提供反馈
- 要点:我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
- 要点:流程
- 列表:登录到 Jira 网站。 如果您还没有帐户,请创建一个。
- 列表:单击顶部导航栏中的 Create。
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点窗口底部的 Create。
第 1 章 公有云平台上的 RHEL 简介
- 要点:公有云平台提供计算资源即服务。您可以将 IT 工作负载作为公共云实例运行,而不是维护内部硬件。这包括 Red Hat Enterprise Linux (RHEL)系统。
1.1. 在公有云中使用 RHEL 的好处
- 要点:在公共云平台上运行 Red Hat Enterprise Linux (RHEL)提供灵活的资源分配、成本效率和软件控制的配置,以在不管理物理硬件的情况下优化您的基础架构。
- 要点:RHEL 作为公共云平台上的云实例与内部物理系统或虚拟机(VM)的 RHEL 相比有以下优点:
- 列表:什么是公有云?
- 列表:什么是 Hyperscaler?
- 列表:云计算的类型
1.2. RHEL 的公有云用例
- 要点:在公共云中部署应用程序取决于用例。在评估您的部署迁移到公共云时,请考虑 Red Hat Enterprise Linux (RHEL)部署的优点。
- 要点:公共云实例可以根据需求有效地扩展计算能力和关闭。这称为 纵向 扩展和缩减 。在以下情况下,您可以在公有云中使用 RHEL:
- 列表:公共云实例可以根据需求有效地扩展计算能力和关闭。这称为 纵向 扩展和缩减 。在以下情况下,您可以在公有云中使用 RHEL: 具有峰值工作负载和低常规性能要求的集群受益于灵活的扩展。在资源成本方面,根据您的需求扩展和缩减可能非常高效。 快速配置或扩展集群。这可避免配置本地服务器的大量前期成本。
- 列表:具有峰值工作负载和低常规性能要求的集群受益于灵活的扩展。在资源成本方面,根据您的需求扩展和缩减可能非常高效。
- 列表:快速配置或扩展集群。这可避免配置本地服务器的大量前期成本。
- 列表:本地环境中的更改不会影响云实例。因此,您可以使用它们进行备份和恢复。
- 列表:您正在运行一个无法调整的现有环境。自定义云实例以适合现有部署需求可能并不高。您当前的主机平台可能更具成本效益。
- 列表:您有预算方面的硬限制。本地数据中心通常提供比公共云更少的灵活性。但是,它们提供了对最大资源成本的更多控制。
1.3. 迁移到公有云时的常见关注
- 要点:将 RHEL 工作负载从本地环境移到公有云平台可能会带来有关涉及的变化的担忧。以下是最常见的问题:
- 要点:在大部分方面,公有云平台上的 RHEL 实例的工作方式与本地主机上的 RHEL 虚拟机相同,如内部服务器。主要例外包括:
- 列表:公有云实例使用特定于提供商的控制台接口,而不是私有编排接口,来管理云资源。
- 列表:某些功能(如嵌套虚拟化)可能无法正常工作。如果特定功能对部署至关重要,请提前检查该功能与您选择的公有云提供商的兼容性。
- 列表:您的公有云供应商负责云 hypervisor 的安全性
- 列表:红帽在您的实例中提供 RHEL 客户机操作系统的安全功能
- 列表:您可以在云基础架构中管理特定的安全设置和实践
1.4. 为公有云部署获取 RHEL
- 要点:要在公有云环境中部署 Red Hat Enterprise Linux (RHEL),您必须选择一个经过认证的云服务供应商(CCSP)并创建 RHEL 云实例。
- 要点:根据您的要求和市场中的当前产品,选择运行 RHEL 实例的最佳 CCSP 是 Amazon Web Services (AWS)、Google Cloud 和 Microsoft Azure。
- 列表:根据您的要求和市场中的当前产品,选择运行 RHEL 实例的最佳 CCSP 是 Amazon Web Services (AWS)、Google Cloud 和 Microsoft Azure。 注意 本文档专门解决在 Azure 上部署 RHEL 的过程。
- 列表:在云平台上创建 RHEL 云实例。
- 列表:使用红帽更新基础架构(RHUI)使您的 RHEL 部署保持最新状态。
- 列表:RHUI 文档
- 列表:红帽开放混合云
- 列表:Red Hat Ecosystem Catalog
- 注意:注意 本文档专门解决在 Azure 上部署 RHEL 的过程。
1.5. 创建 RHEL 云实例的方法
- 要点:您可以创建 Red Hat Enterprise Linux (RHEL)系统镜像,并将其导入到云平台。
- 要点:要构建系统镜像,您可以使用 RHEL 镜像构建程序,或者从云服务供应商市场购买镜像。然后您可以将 RHEL 镜像部署为云实例。
- 列表:要创建系统镜像,您可以使用 RHEL 镜像构建器 或手动构建镜像。
- 列表:"此方法使用您现有的 RHEL 订阅(自带订阅(BYOS))。
- 列表:您每年预付订阅费,您可以使用您的红帽客户折扣。
- 列表:红帽为客户提供服务。
- 列表:要有效地创建很多镜像,您可以使用 cloud-init 工具。
- 列表:您按小时为使用的服务后付费。这个方法也称为您 go (PAYG)的支付。
第 2 章 准备 VHD 镜像并将其上传到 Microsoft Azure
- 要点:您可以使用 RHEL 镜像构建器在 Microsoft Azure 云上手动创建或自动更新这些镜像。
2.1. 准备手动上传 Microsoft Azure VHD 镜像
- 要点:要创建可手动上传到 Microsoft Azure 云的虚拟硬盘(VHD)镜像,您可以使用 RHEL 镜像构建器。
- 要点:先决条件
- 列表:您必须有 Microsoft Azure 资源组和存储帐户。
- 列表:您已安装了 Python。AZ CLI 工具依赖于 Python。
- 列表:导入 Microsoft 存储库密钥: $ sudo rpm --import https://packages.microsoft.com/keys/microsoft-2025.asc
- 列表:创建一个 packages-microsoft-com-prod 存储库: [azure-cli] name=Azure CLI baseurl=https://packages.microsoft.com/yumrepos/packages.microsoft.com/rhel/10/prod/ enabled=1 gpgcheck=1 gpgkey=https://packages.microsoft.com/keys/microsoft.asc
- 列表:安装 Microsoft Azure CLI。下载的 Microsoft Azure CLI 软件包版本可能会因当前可用的版本而异。 $ sudo dnf install azure-cli
- 列表:运行 Microsoft Azure CLI: $ az login 命令行显示以下信息:Note, we have launched a browser for you to login.对于旧的设备代码,请使用 az login --use-device-code。随后,命令行会打开一个 Login 界面,您可以在其中完成登录。 注意 如果您正在运行远程(SSH)会话,则浏览器中不会打开登录页面链接。在这种情况下,您可以将链接复制到浏览器,并登录以验证您的远程会话。要登录,请使用网页浏览器打开 Login 页面,并输入要进行身份验证的设备代码。
- 命令/配置摘录:
$ sudo rpm --import https://packages.microsoft.com/keys/microsoft-2025.asc
[azure-cli] name=Azure CLI baseurl=https://packages.microsoft.com/yumrepos/packages.microsoft.com/rhel/10/prod/ enabled=1 gpgcheck=1 gpgkey=https://packages.microsoft.com/keys/microsoft.asc- 注意:注意 如果您正在运行远程(SSH)会话,则浏览器中不会打开登录页面链接。在这种情况下,您可以将链接复制到浏览器,并登录以验证您的远程会话。要登录,请使用网页浏览器打开 Login 页面,并输入要进行身份验证的设备代码。
2.2. 手动将 VHD 镜像上传到 Microsoft Azure 云
- 要点:创建自定义虚拟硬盘驱动器(VHD)镜像,并手动将其上传到 Microsoft Azure 云。当使用 CLI 创建 .vhd 镜像时,RHEL 镜像构建器将临时文件写入 /var 子目录。
- 要点:先决条件
- 列表:必须配置您的系统才能上传 Microsoft Azure VHD 镜像。
- 列表:您有一个 Azure 访问密钥存储帐户。
- 列表:创建 azure.toml 蓝图,并在其中中添加以下信息: provider = "azure" [settings] storageAccount = "<your-storage-account-name>" storageAccessKey = "<storage-access-key-you-copied-in-the-Azure-portal>" container = "<your-storage-container-name>"
- 列表:构建镜像,传递以下参数: $ image-builder build <your-blueprint> vhd <your-image-key> azure.toml 将 <your-image-key > 替换为您要的镜像的名称。
- 列表:将镜像推送到 Microsoft Azure 并从中创建一个实例: $ az storage blob upload --account-name <account-name> --container-name <container-name> --file <image-disk>.vhd --name image-disk.vhd --type page
- 列表:上传到 Microsoft Azure Blob 存储后,从其创建一个 Microsoft Azure 镜像。使用 RHEL 镜像构建器创建的镜像会生成支持 V1 = BIOS 和 V2 = UEFI 的混合镜像。use --hyper-v-generation 指定实例类型。V1 是默认值。 $ az image create --resource-group resource_group_name --name image-disk.vhd --os-type linux --location location \ --source https://$account_name.blob.core.windows.net/con…
- 命令/配置摘录:
provider = "azure" [settings] storageAccount = "<your-storage-account-name>" storageAccessKey = "<storage-access-key-you-copied-in-the-Azure-portal>" container = "<your-storage-container-name>"
$ image-builder build <your-blueprint> vhd <your-image-key> azure.toml- 注意:注意 蓝图中的分区和文件系统配置决定了 .vhd 镜像大小。不足的存储可能会导致 "No space left on device" 错误。确保 /var 有至少 15 到 20 GB 的可用空间。
2.3. 创建 VHD 镜像并将其自动上传到 Microsoft Azure 云
- 要点:通过使用 RHEL 镜像构建器,您可以创建 .vhd 镜像,该镜像会自动上传到 Microsoft Azure Cloud 服务供应商中的 Azure Blob 存储。
- 要点:先决条件
- 列表:有对系统的 root 访问权限。
- 列表:您有访问 RHEL web 控制台的 RHEL 镜像构建器界面的权限。
- 列表:您创建了蓝图。请参阅在 web 控制台界面中创建一个 RHEL 镜像构建器蓝图。
- 列表:您已创建了 Microsoft 存储帐户。
- 列表:您有一个可写入 Blob Storage。
- 列表:在 RHEL 镜像构建器仪表盘中,选择您的蓝图,点 Images 选项卡,然后点击 Create Image 来创建自定义 .vhd 镜像。
第 3 章 在 Azure 上将 RHEL 镜像部署为一个计算实例
- 要点:您可以通过将镜像转换为兼容 Azure 的格式,然后部署它,将 Red Hat Enterprise Linux (RHEL)镜像部署为 Azure Compute 虚拟机(VM)。使用 RHEL 镜像构建器或手动创建虚拟硬盘(VHD)来自定义 RHEL 镜像并将其部署到 Azure。
3.1. 用于公有云的可用 RHEL 镜像类型
- 要点:要将 Red Hat Enterprise Linux (RHEL)虚拟机部署到认证的云服务供应商(CCSP)上,您可以使用多个选项。下表列出了镜像类型的可用镜像类型、订阅、注意事项和镜像类型的示例场景。
- 要点:要部署自定义的 ISO 镜像,您可以使用 RHEL 镜像构建器。使用 RHEL 镜像构建器,您可以创建、上传和这些自定义镜像,并将它们部署到您选择的 CCSP 。
- 列表:编写自定义 RHEL 系统镜像
- 列表:红帽生态系统目录
- 列表:红帽云访问参考指南
- 列表:Red Hat Cloud Access 程序概述
- 列表:所需的系统软件包列表
- 列表:Azure Marketplace
- 表格样本(共 4 行):
- 镜像类型 | 订阅 | 注意事项 | 示例情境
- 部署红帽黄金镜像 | 使用您现有的红帽订阅 | 订阅包括红帽产品成本和对云访问镜像的支持,同时为所有其他实例成本付费。 | 根据要求选择 CCSP 上的红帽黄金镜像。
- 部署移到 CCSP 的自定义镜像 | 使用您现有的红帽订阅 | 订阅包括红帽产品成本和对自定义 RHEL 镜像的支持,同时为所有其他实例成本付费。 | 上传自定义镜像并附加您的订阅
- 部署一个基于 RHEL 的自定义镜像 | 自定义机器镜像包含一个 RHEL 镜像 | 根据 现收现付 模式,按小时向 CCSP 支付费用。对于这种模式,在 CCSP 市场上提供了按需镜像。CCSP 提供对这些镜像的支持,而红帽会处理更新。CCSP 通过 Red Hat Update Infrastructure (RHUI)提供更新。 | 当您在 CCSP 云管理控制台上启动实例时,请选择 RHEL 镜像,或者从 CCSP 市场选择一个镜像。
3.2. 所需的系统软件包
- 要点:要创建并配置 RHEL 的基础镜像,主机系统必须安装了以下软件包。
- 要点:确认安装上述系统软件包后,请按照使用自定义基础镜像 部署 RHEL 实例中的部署步骤进行操作
- 列表:用于虚拟化管理的工具和界面
- 列表:使用命令行创建虚拟机
- 列表:使用 virt-sysprep 创建虚拟机模板
- 列表:libguestfs 文档
- 表格样本(共 5 行):
- 软件包 | 软件仓库 | 描述
- libvirt | rhel-10-for-x86_64-appstream-rpms | 用于管理平台虚拟化的开源 API、守护进程和管理工具
- virt-install | rhel-10-for-x86_64-appstream-rpms | 用于构建虚拟机的命令行工具
- libguestfs | rhel-10-for-x86_64-appstream-rpms | 用于访问和修改虚拟机文件系统的库
3.3. 使用自定义基础镜像部署 RHEL 实例
- 要点:要在云平台上手动配置虚拟机(VM),请创建一个基础(初学者)镜像,修改配置设置,并将软件包添加到虚拟机。此虚拟机可自定义、灵活且轻量级。上传镜像后,您可以更改这些特定应用程序的设置。
- 要点:先决条件
- 列表:您可以访问命令行界面(CLI)或 Web 控制台来创建和配置虚拟机。如果您无法访问 CLI 或 Web 控制台,您可以使用 Red Hat Cloud Access 门户来创建和配置虚拟机。
- 列表:您已准备了 RHEL 的 Hyper-V 云镜像。
- 列表:您已在初始虚拟机创建过程中启用了所需的设置,或将虚拟机镜像置备到 Azure 云。
- 列表:您已检查了 系统软件包所需的列表。
- 列表:Secure Shell (SSH)- 启用 SSH 提供对虚拟机的远程访问。
- 列表:动态主机配置协议(DHCP)- 配置主虚拟适配器以使用 DHCP。
- 命令/配置摘录:
# subscription-manager register
# dnf install cloud-init3.4. 安装 Azure CLI
- 要点:要连接到 Azure Cloud,并直接从主机系统的命令行管理 Azure 资源,您可以使用 Azure 命令行界面(CLI)。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您已在 Azure 上完成了 RHEL 镜像的部署。
- 列表:您有一个 Microsoft Azure 帐户。
- 列表:您已安装了 Python 3.x。
- 列表:导入 Microsoft 存储库密钥: $ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
- 列表:创建一个本地 Azure CLI 存储库条目: $ sudo sh -c 'echo -e "[azure-cli]\nname=Azure CLI\nbaseurl=https://packages.microsoft.com/yumrepos/azure-cli\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/azure-cli.repo'
- 命令/配置摘录:
$ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
$ sudo sh -c 'echo -e "[azure-cli]\nname=Azure CLI\nbaseurl=https://packages.microsoft.com/yumrepos/azure-cli\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/azure-cli.repo'3.5. 安装 Hyper-V 设备驱动程序
- 要点:在将虚拟机(VM)镜像置备为 Azure 虚拟机前,您必须安装 Hyper-V 设备驱动程序。Microsoft 在其 Linux 集成服务(LIS)中为 Hyper-V 软件包提供这些网络和存储设备驱动程序。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您有一个 Microsoft Azure 帐户。
- 列表:已安装 Azure CLI。
- 列表:验证系统是否有 Hyper-V 设备驱动程序: # lsinitrd | grep hv drwxr-xr-x 2 root root 0 Aug 12 14:21 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/hv -rw-r--r-- 1 root root 31272 Aug 11 08:45 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/hv/hv_vmbus.ko.xz -rw-r--r-- 1 root root 25132 Aug 11 08:46 usr/lib/modules/3.1…
- 列表:在 /etc/dracut.conf.d 目录中创建 hv.conf 文件,并添加以下驱动程序参数: # vi hv.conf add_drivers+=" hv_vmbus " add_drivers+=" hv_netvsc " add_drivers+=" hv_storvsc " add_drivers+=" nvme " 确保您已在双引号括起来的 add_drivers+=" hv_vmbus " 前后添加了空格,来加载唯一的驱动程序,以防止环境中存在其他 Hyper-V 驱动程序。
- 列表:重新生成 initramfs 镜像: # dracut -f -v --regenerate-all
- 命令/配置摘录:
# lsinitrd | grep hv
drwxr-xr-x 2 root root 0 Aug 12 14:21 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/*hv* -rw-r--r-- 1 root root 31272 Aug 11 08:45 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/hv/*hv_vmbus.ko.xz* -rw-r--r-- 1 root root 25132 Aug 11 08:46 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/net/hyperv/*hv_netvsc.ko.xz* -rw-r--r-- 1 root root 9796 Aug 11 08:45 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/scsi/*hv_storvsc.ko.xz*3.6. 在 Azure 上使用 cloud-init 配置 swap 空间
- 要点:要将 swap 空间用于 Microsoft Azure 上的 Red Hat Enterprise Linux (RHEL)虚拟机(VM),请在临时磁盘上创建交换分区。仅使用临时磁盘来创建交换分区,而不是操作系统磁盘或数据磁盘。
- 要点:先决条件
- 列表:临时和资源磁盘只提供临时数据存储:删除、移动、停止或遇到虚拟机故障会导致这些磁盘中存储的数据丢失。
- 列表:您已了解,您不应该将临时磁盘用于持久性数据。当虚拟机停止或移动时,所有内容(包括交换分区)都会被删除。
- 列表:您已了解临时磁盘和资源磁盘之间的区别: 临时磁盘是直接附加到虚拟机的本地存储。 资源磁盘会在虚拟机本身中挂载存储。
- 列表:临时磁盘是直接附加到虚拟机的本地存储。
- 列表:资源磁盘会在虚拟机本身中挂载存储。
- 列表:您已创建了一个 红帽帐户。
- 命令/配置摘录:
ResourceDisk.Format=n ResourceDisk.EnableSwap=n ResourceDisk.SwapSizeMB=0
# vi /etc/cloud/cloud.cfg.d/00-azure-swap.cfg- 注意:注意 分区布局 [66, [33,82]] 将 66% 的磁盘分配给第一个分区,将 33% 分配到第二个分区。第二个分区规格中的 82 表示 Linux swap 分区类型。您可以根据您的要求调整这些百分比。
3.7. 为 Azure 部署准备虚拟机
- 要点:为确保虚拟机(VM)具有兼容性且可以在 Azure 环境中运行,请在在 Azure 中部署自定义基础镜像前执行配置更改。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您有一个 Microsoft Azure 帐户。
- 列表:已安装 Hyper-V 设备驱动程序。
- 列表:登录并注册虚拟机以启用 Red Hat Enterprise Linux (RHEL)存储库: # subscription-manager register
- 列表:安装 cloud-init 和 hyperv-daemons 软件包: # dnf install cloud-init hyperv-daemons -y
- 列表:创建 cloud-init 配置文件,并编辑它们以提供与 Azure 服务的集成: 要启用登录到 Hyper-V Data Exchange Service (也称为 Key Value Pair (KVP)),请编辑 /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg 文件并附加以下行: reporting: logging: type: log telemetry: type: hyperv 要添加 Azure 数据源,请编辑 /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg 文件并附加以下行: datasource_list: [ Azure ]…
- 命令/配置摘录:
# subscription-manager register
# dnf install cloud-init hyperv-daemons -y- 注意:重要 临时磁盘是临时存储。因此,当虚拟机被取消或移动时,存储的数据(包括交换空间)将会丢失。将临时磁盘仅用于临时数据,如交换空间。
- 注意:注意 通过在 GRUB_CMDLINE_LINUX 行的末尾添加 elevator=none 选项。这指示 I/O 调度程序以执行顺序处理 I/O 请求,而无需优化磁盘性能。 对以下磁盘使用 elevator=none : 硬盘(HDD):性能和吞吐量降低,因此不适用于运行工作负载。 固态硬盘(SSD):高性能和低延迟,因此适合运行工作负载。
3.8. 将 RHEL 镜像转换为 Azure 磁盘镜像
- 要点:您可以将 Red Hat Enterprise Linux (RHEL)镜像从 qcow2 转换为固定的 Azure 磁盘镜像虚拟硬盘(.vhd)格式。在转换前,确保镜像文件从 1 MB 的倍数的位置启动。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您有一个 Microsoft Azure 帐户。
- 列表:您已完成了 为 Azure 部署准备虚拟机 的步骤。
- 列表:您使用 qemu-img 版本 2.12.0。
- 列表:将镜像从 qcow2 转换为 raw 格式。 $ qemu-img convert -f qcow2 -O raw <example_image_name>.qcow2 <output_image_name>.raw
- 列表:编辑 align.sh shell 脚本: $ vi align.sh #!/bin/bash MB=$((1024 * 1024)) size=$(qemu-img info -f raw --output json "$1" | gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1) * $MB)) if [ $(($size % $MB)) -eq 0 ] then echo "Your image is already aligned. You do not need to res…
- 命令/配置摘录:
$ qemu-img convert -f qcow2 -O raw <example_image_name>.qcow2 <output_image_name>.raw
$ vi align.sh3.9. 为 RHEL 镜像配置 Azure 资源
- 要点:在上传虚拟硬盘(VHD)镜像文件并创建 Azure 镜像之前,请配置 Azure 资源,如计算、网络和存储。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您有一个 Microsoft Azure 帐户。
- 列表:您已安装了 Azure CLI。详情请参阅 安装 Azure CLI。
- 列表:您已完成了将 RHEL 镜像转换为 Azure 磁盘镜像 的过程。
- 列表:使用 Azure 凭证验证您的主机并登录: $ az login 要从浏览器中登录,请从 Azure CLI 打开 Azure 登录页面。详情请参阅使用 浏览器登录。
- 列表:在 Azure 区域中创建资源组: $ az group create --name <example_resource_group> \ --location <example_azure_region> 示例: [clouduser@localhost]$ az group create --name azrhelclirsgrp \ --location southcentralus { "id": "/subscriptions//resourceGroups/azrhelclirsgrp", "location": "southcentralus", "managedBy": null, "name": "azr…
- 命令/配置摘录:
$ az login
$ az group create --name <example_resource_group> \ --location <example_azure_region>3.10. 将 VHD 镜像上传到 Azure Blob 存储
- 要点:要创建自定义 Azure 虚拟机镜像,请使用 Microsoft Azure Blob 存储上传和存储您转换的 Red Hat Enterprise Linux (RHEL)虚拟硬盘(VHD)镜像文件。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您有一个 Microsoft Azure 帐户。
- 列表:您已配置了 Azure 资源。 警告 导出的存储连接字符串仅适用于您的当前会话。重新引导后,在运行存储命令前重新导出连接字符串,以获取和导出连接字符串。请参阅 为 RHEL 镜像配置 Azure 资源。
- 列表:将 VHD 文件上传到存储容器: $ az storage blob upload \ --account-name <storage_account_name> \ --container-name <container_name> \ --type page \ --file <path_to_vhd> \ --name <image_name>.vhd 示例: $ az storage blob upload \ --account-name azrhelclistact \ --container-name azrhelclistcont \ --type page \ --file ~/Downloads/rhel-im…
- 列表:列出存储容器: 要以表格格式显示,请输入: $ az storage container list --output table 要以 YAML 格式显示,请输入: $ az storage container list --output yaml
- 列表:要以表格格式显示,请输入: $ az storage container list --output table
- 命令/配置摘录:
$ az storage blob upload \ --account-name <storage_account_name> \ --container-name <container_name> \ --type page \ --file <path_to_vhd> \ --name <image_name>.vhd
$ az storage blob upload \ --account-name azrhelclistact \ --container-name azrhelclistcont \ --type page \ --file ~/Downloads/rhel-image-10.vhd \ --name rhel-10-image.vhd- 注意:警告 导出的存储连接字符串仅适用于您的当前会话。重新引导后,在运行存储命令前重新导出连接字符串,以获取和导出连接字符串。请参阅 为 RHEL 镜像配置 Azure 资源。
- 注意:注意 默认情况下,Azure 创建带有第 1 代虚拟机监控程序的虚拟机。如果要使用第 2 代虚拟机,它提供基于 UEFI 的引导架构,请在命令中添加 --hyper-v-generation V2 选项。
3.11. 在 Azure 中启动并连接到 RHEL 虚拟机
- 要点:您可以从上传的 RHEL 镜像创建受管磁盘 Azure 虚拟机,并使用 SSH 连接到它。受管磁盘虚拟机使用 Azure 管理的存储,它简化了磁盘管理,并提供更好的可靠性。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您有一个 Microsoft Azure 帐户。
- 列表:您已完成将 Azure VHD 镜像上传到 Azure Blob 存储。
- 列表:创建虚拟机: $ az vm create \ --resource-group <resource_group> \ --location <azure_region> \ --name <vm_name> \ --vnet-name <vnet_name> \ --subnet <subnet_name> \ --size Standard_A2 \ --os-disk-name <simple_name> \ --admin-username <administrator_name> \ --generate-ssh-keys \ --image <path_to_image> 示例: $ az vm create \ --…
- 列表:--generate-ssh-keys 选项会在 ~/.ssh 目录中创建私钥和公钥对文件。
- 列表:公钥被添加到 --admin-username 选项所指定的用户的虚拟机上的 authorized_keys 文件中。 详情请参阅 SSH 验证方法的类型。请注意 publicIpAddress,在以下步骤中,需要登录虚拟机。
- 命令/配置摘录:
$ az vm create \ --resource-group <resource_group> \ --location <azure_region> \ --name <vm_name> \ --vnet-name <vnet_name> \ --subnet <subnet_name> \ --size Standard_A2 \ --os-disk-name <simple_name> \ --admin-username <administrator_name> \ --generate-ssh-keys \ --image <path_to_image>
$ az vm create \ --resource-group azrhelclirsgrp2 \ --location southcentralus \ --name rhel-azure-vm-1 \ --vnet-name azrhelclivnet1 \ --subnet azrhelclisubnet1 \ --size Standard_A2 \ --os-disk-name vm-1-osdisk \ --admin-username clouduser \ --generate-ssh-keys \ --image rhel103.12. SSH 验证方法的类型
- 要点:您可以使用各种 SSH 身份验证方法连接到 Azure 虚拟机,包括密码身份验证或现有的公钥文件。
- 要点:其他资源
- 列表:在 Azure 中为 Linux 虚拟机创建 SSH 密钥
- 命令/配置摘录:
$ az vm create \ -g <resource_group> -l <azure_region> -n <vm_name> \ -vnet-name <vnet_name> -subnet <subnet_name> -size Standard_A2 \ -os-disk-name <simple_name> -authentication-type password \ -admin-username <administrator_name> -admin-password <ssh_password> -image <path_to_image>
$ ssh <admin_username>@<public_ip_address>3.13. 附加红帽订阅
- 要点:要将红帽订阅注册并附加到 RHEL 实例,您可以使用 subscription-manager 命令。
- 要点:先决条件
- 列表:您有一个活跃的 红帽帐户。
- 列表:注册您的系统: # subscription-manager register
- 列表:附加您的订阅: 您可以使用激活码来附加订阅。详情请参阅 创建红帽客户门户网站激活码。 否则,您可以使用订阅池 ID 将基于主机的订阅附加到 hypervisor 来手动附加订阅。
- 列表:您可以使用激活码来附加订阅。详情请参阅 创建红帽客户门户网站激活码。
- 列表:否则,您可以使用订阅池 ID 将基于主机的订阅附加到 hypervisor 来手动附加订阅。
- 列表:可选: 要在 Red Hat Hybrid Cloud Console 中收集有关实例的各种系统指标,您可以使用 红帽 Lightspeed 注册实例。 # insights-client register --display-name <display_name_value>
- 命令/配置摘录:
# subscription-manager register
# insights-client register --display-name <display_name_value>3.14. 在 Azure 金级镜像上配置自动注册
- 要点:您可以使用 RHEL 的金级镜像在 Microsoft Azure 上更有效地部署 Red Hat Enterprise Linux (RHEL)虚拟机(VM)。这样可确保虚拟机自动注册到 Red Hat Subscription Manager (RHSM)。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您有一个 Microsoft Azure 帐户。
- 列表:您已下载了 Azure 的最新 RHEL 金镜像。详情请参阅附加资源。 注意 一次,您只能将 Azure 帐户附加到单个红帽帐户。因此,在将其附加到您的红帽帐户之前,请确保其他用户不需要访问 Azure 帐户。
- 列表:将金级镜像上传到 Azure。详情请参阅 在 Azure 中启动和连接到 RHEL 虚拟机。 如果您的 RHSM 设置正确,虚拟机将自动订阅到 RHSM。
- 列表:在使用前面的说明创建的 RHEL 虚拟机中,验证 RHSM 是否连接到该系统。在成功注册的系统上,subscription-manager identity 命令显示系统的 UUID。例如: # subscription-manager identity system identity: fdc46662-c536-43fb-a18a-bbcb283102b7 name: 192.168.122.222 org name: 6340056 org ID: 6340056
- 列表:Azure 中的红帽黄金镜像
- 命令/配置摘录:
# subscription-manager identity
system identity: fdc46662-c536-43fb-a18a-bbcb283102b7 name: 192.168.122.222 org name: 6340056 org ID: 6340056- 注意:注意 一次,您只能将 Azure 帐户附加到单个红帽帐户。因此,在将其附加到您的红帽帐户之前,请确保其他用户不需要访问 Azure 帐户。
3.15. 为 Microsoft Azure 虚拟机配置 kdump
- 要点:要在发生内核崩溃时生成崩溃转储(vmcore)文件,请在 Azure 虚拟机(VM)上配置 kdump 服务。根据您的虚拟机大小和 Red Hat Enterprise Linux (RHEL)版本调整 kdump 保留内存和 vmcore 目标,以确保可靠的崩溃诊断。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您有一个 Microsoft Azure 帐户。
- 列表:您在使用支持 kdump 的 Microsoft Azure 环境中的虚拟机: Standard_DS2_v2 标准 NV16as v4 标准 M416-208s v2 标准 M416ms v2
- 列表:Standard_DS2_v2
- 列表:标准 NV16as v4
- 列表:标准 M416-208s v2
- 命令/配置摘录:
# dnf install kexec-tools kdump-utils makedumpfile
# grep -v "#" /etc/kdump.conf- 表格样本(共 2 行):
- RHEL 版本 | 标准 DS1 v2 (1 vCPU, 3.5GiB) | 标准 NV16as v4 (16 vCPU, 56 GiB) | 标准 M416-208s v2 (208 vCPU, 5700 GiB) | 标准 M416ms v2 (416 vCPU, 11400 GiB)
- RHEL 9.4 - RHEL 10 | default | default | 目标 | 目标
第 4 章 在 Microsoft Azure 上配置红帽高可用性集群
- 要点:要在 Azure 上对节点进行分组,并在 Azure 上重新分发工作负载,使用基于虚拟硬盘(VHD)实例的 Red Hat Enterprise Linux (RHEL)镜像在 Azure 上配置高可用性(HA)集群。Azure 上 HA 集群设置的过程与传统的非云 HA 配置相当。
4.1. 在公有云平台上使用高可用性集群的好处
- 要点:高可用性(HA)集群使用多个计算机(节点)来运行具有冗余的工作负载。如果节点失败,Pacemaker 资源管理器会自动将工作负载转移到健康的节点,从而尽量减少停机时间并保持服务可用,而无需人工干预。
- 要点:您还可以在公有云平台上运行 HA 集群。在这种情况下,您要将云中的虚拟机(VM)实例用作单独的集群节点。通过在公共云平台上使用 HA 集群具有以下优点:
- 列表:改进了可用性 :如果出现虚拟机故障,工作负载会被快速重新分发到其他节点,因此运行的服务不会中断。
- 列表:可扩展性 :您可以在需要很高时启动额外的节点,并在需求较低时停止它们。
- 列表:成本效益 :通过现收现付定价,您只需为运行的节点支付费用。
- 列表:简化了管理 :一些公有云平台提供管理界面,来更轻松地配置 HA 集群。
- 列表:Pacemaker,一个提供命令行实用程序(pcs)和 GUI (pcsd)的集群资源管理器来支持多个节点。
- 列表:用于创建和管理 HA 集群的 corosync 和 Kronosnet。
4.2. 为 Azure 安装高可用性软件包和代理
- 要点:要在 Azure 上创建容错、高度可用的 Red Hat Enterprise Linux (RHEL)系统,请在每个节点上安装高可用性软件包和代理。这些功能包括自动故障转移功能、资源管理、服务连续性和特定 Azure 集成。
- 要点:先决条件
- 列表:您已创建了 一个红帽帐户
- 列表:您已 注册并配置了 Azure 帐户。
- 列表:您已将 RHEL 镜像部署为 Azure 计算实例。
- 列表:要获取 Azure 虚拟机的公共 IP 地址,请在 Azure 门户中打开虚拟机属性或输入: $ az vm list -g <resource_group> -d --output table 示例: $ az vm list -g azrhelclirsgrp -d --output table Name ResourceGroup PowerState PublicIps Location ------ ------------- --------- ------------- ------------- node01 azrhelclirsgrp VM running 192.98.152.251 southcentral…
- 列表:将虚拟机注册到红帽: $ sudo -i # subscription-manager register
- 列表:禁用所有软件仓库: # subscription-manager repos --disable=*
- 命令/配置摘录:
$ az vm list -g <resource_group> -d --output table
$ az vm list -g azrhelclirsgrp -d --output table4.3. 创建 Azure AD 应用程序
- 要点:要为集群中的所有节点授权和自动访问高可用性(HA)操作,请创建一个 Azure Active Directory (AD)应用程序。
- 要点:先决条件
- 列表:您已创建了红帽帐户。
- 列表:您已 注册并配置了 Azure 帐户。
- 列表:Azure 命令行界面(CLI) 已安装在您的系统上。
- 列表:您是管理员或 Microsoft Azure 订阅的所有者才能创建 Azure AD 应用程序。
- 列表:从 HA 集群中的任何节点登录到您的 Azure 帐户: $ az login
- 列表:为 Azure 隔离代理的自定义角色创建一个 json 配置文件。使用以下配置,但将 <subscription_id> 替换为您的订阅 ID: { "Name": "Linux Fence Agent Role", "description": "Allows to power-off and start virtual machines", "assignableScopes": [ "/subscriptions/<subscription_id>" ], "permissions": [ { "actions": [ "Microsoft.Compute/*/read", "Microsoft.Comp…
- 命令/配置摘录:
$ az login
{ "Name": "Linux Fence Agent Role", "description": "Allows to power-off and start virtual machines", "assignableScopes": [ "/subscriptions/<subscription_id>" ], "permissions": [ { "actions": [ "Microsoft.Compute/*/read", "Microsoft.Compute/virtualMachines/powerOff/action", "Microsoft.Compute/virtualMachines/start/action" ], "notActions": [], "dataActions": [], "notDataActions": [] } ] }4.4. 创建高可用性集群
- 要点:您可以创建红帽高可用性附加组件集群。这个示例使用节点 z1.example.com 和 z2.example.com。
- 要点:先决条件
- 列表:您已创建了红帽帐户。 注意 要显示 pcs 命令的参数以及这些参数的描述,请使用 pcs 命令的 -h 选项。
- 列表:在要运行 pcs 的节点上,为集群中的每个节点验证 pcs 用户 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 和 z2.example.com 组成的两个节点验证 z1.example.com 上的用户 hacluster。
- 列表:从 z1.example.com 节点运行以下命令,以创建由 z1.example.com 和 z2.example.com 组成的双节点集群 my_cluster : [root@z1 ~]# pcs cluster setup my_cluster --start z1.example.com z2.example.com 这会将集群配置文件传播到集群中的两个节点。此命令包含 --start 选项,该选项将在集群的两个节点上启动群集服务。
- 列表:在节点引导时,启用集群服务在集群中的每个节点上运行: 注意 对于特定的环境,您可以通过禁用集群服务来跳过此步骤。如果启用且节点停机,在节点重新加入集群前,集群或资源中的任何问题都会被解决。如果您禁用了集群服务,请在重新引导节点时手动启动该服务,方法是在该节点上运行 pcs cluster start 命令。 [root@z1 ~]# pcs cluster enable --all
- 列表:显示您创建的集群的状态: [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 con…
- 列表:如何为高可用性 Linux 设置 Pacemaker 集群
- 命令/配置摘录:
[root@z1 ~]# pcs host auth z1.example.com z2.example.com
Username: hacluster Password: z1.example.com: Authorized z2.example.com: Authorized- 注意:注意 要显示 pcs 命令的参数以及这些参数的描述,请使用 pcs 命令的 -h 选项。
- 注意:注意 对于特定的环境,您可以通过禁用集群服务来跳过此步骤。如果启用且节点停机,在节点重新加入集群前,集群或资源中的任何问题都会被解决。如果您禁用了集群服务,请在重新引导节点时手动启动该服务,方法是在该节点上运行 pcs cluster start 命令。
4.5. 在 Red Hat High Availability 集群中配置隔离功能
- 要点:当节点变得无响应时,集群必须隔离它以防止数据崩溃。配置隔离,因为无法直接联系该节点。外部隔离设备关闭节点对共享资源的访问或执行硬重启。
- 要点:如果没有隔离设备,您不知道断开连接的节点是否已释放其资源。这可以防止服务在其他节点上运行。相反,系统可能会错误地假设资源被释放,从而导致数据崩溃。因此,无法保证数据完整性,集群配置将不被支持。
4.5.1. 显示可用的隔离代理及其选项
- 要点:您可以查看可用的隔离代理和特定隔离代理的可用选项。
- 要点:运行以下命令列出所有可用的隔离代理。当您指定过滤器时,这个命令只会显示与过滤器匹配的隔离代理。
- 命令/配置摘录:
# pcs stonith list [filter]
# pcs stonith describe [stonith_agent]- 注意:注意 您的系统硬件决定了用于集群的隔离设备的类型。有关支持的平台和架构,以及不同的隔离设备,请参阅红帽知识库文章 RHEL 高可用性集群的支持策略 中的 集群平台和架构 部分。
- 注意:警告 对于提供 method 选项的隔离代理,fence_sbd 代理除外,cycle 值不被支持,不应被指定,因为它可能导致数据损坏。但是,即使是 fence_sbd,您不应指定一个方法,而是使用默认值。
4.5.2. 创建隔离设备
- 要点:使用 pcs stonith create 命令创建隔离设备。要查看所有可用的创建选项,请使用 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 参数来映射主机名。
- 列表:隔离设备的常规属性
- 命令/配置摘录:
# 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=30s4.5.3. 隔离设备的常规属性
- 要点:使用特定于设备的选项和集群范围属性配置隔离行为。设备选项定义代理设置,如 IP 地址和元数据,如延迟。集群属性管理全局逻辑,包括超时和 stonith-enabled 参数。
- 要点:任何集群节点都可以使用任何隔离设备隔离保护其它集群节点,无论隔离资源是启动还是停止。资源是否启动只控制设备的重复监控,而不控制是否使用资源,但以下情况除外:
- 列表:您可以通过运行 pcs stonith disable stonith_id 命令来禁用隔离设备。这将阻止任何节点使用该设备。
- 列表:要防止特定节点使用隔离设备,您可以使用 pcs constraint location … avoids 命令为隔离资源配置位置约束。
- 列表:配置 stonith-enabled=false 将完全禁用隔离。但请注意,红帽不支持隔离功能被禁用的集群,因为它不适用于生产环境。
- 表格样本(共 4 行):
- 项 | 类型 | Default(默认) | 描述
- pcmk_host_map | 字符串 | 用于不支持主机名的设备的主机名到端口号的映射。例如:node1:1;node2:2,3 告知集群 node1 使用端口 1 ,对 node2 使用端口 2 和端口 3。pcmk_host_map 属性支持在 pcmk_host_map 值里在值前面使用反斜杠的特殊字符。例如,您可以指定 pcmk_host_map="node3:plug\ 1",来在主机别名中包含一个空格。
- pcmk_host_list | 字符串 | 此设备控制的机器列表(可选,除非 pcmk_host_check=static-list)。
- pcmk_host_check | 字符串 | 如果设置了 pcmk_host_list 或 pcmk_host_map,则 static-list 否则,如果隔离设备支持 list 操作,则 dynamic-list 否则,如果隔离设备支持 status 操作,则状态 否则,无。 | 如何确定被设备控制的机器。允许的值: dynamic-list (查询设备)、static-list (检查 pcmk_host_list 属性)、none(假设每个设备都可以隔离每台机器)
4.5.4. 隔离延迟
- 要点:在双节点集群中,同时通信丢失可能会导致节点相互隔离,从而关闭整个集群。配置隔离延迟以防止此竞争条件。在大型集群中,延迟不需要,仲裁决定隔离机构。
- 要点:您可以根据系统要求设置不同类型的隔离延迟。
- 列表:静态隔离延迟 静态隔离延迟是一个固定的、预先确定的延迟。在一个节点上设置静态延迟使该节点更有可能被隔离,因为它增加了检测到丢失的通信后,其他节点首先启动隔离的机会。在主动/被动集群中,在被动节点上设置一个延迟,使得在通信中断时,被动节点将更有可能被隔离。您可以使用 pcmk_delay_base 实例属性配置静态延迟。要配置不同的延迟,请为每个节点在单独的隔离设备上设置此属性。如果将单个隔离设备用于所有节点,您可以将此属性设置为主机映射,例如 node1:0s;node2:5s。
- 列表:动态隔离延迟 动态隔离延迟是随机的。它可能会有所不同,并在需要隔离时确定。您可以配置随机延迟,并使用 pcmk_delay_max 实例属性为组合基础延迟和随机延迟指定最大值。当每个节点的隔离延迟是随机的时,被隔离的节点也是随机的。如果您的集群为主动/主动设计中的所有节点配置了单一隔离设备,则可能会发现此功能。
- 列表:优先级隔离延迟 优先级隔离延迟基于活跃的资源优先级。如果所有资源具有相同的优先级,则运行最少资源的节点是被隔离的节点。在大多数情况下,您只使用一个与延迟相关的参数,但可以组合它们。合并与延迟相关的参数,将资源的优先级值加在一起,以创建总延迟。您可以使用 priority-fencing-delay 集群属性配置优先级隔离延迟。您可以在主动/主动集群设计中发现此功能,因为它可以在节点之间的通信丢失时让运行最少资源的节点更有可能被隔离。
- 列表:使用 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 命令实现的隔离不会向隔离设备提供必要信息。
- 列表:有些隔离代理实施 delay 参数,其名称由代理决定。这个延迟独立于使用 5-4pcmk_delay38:3.8) 实例属性配置的延迟。如果同时配置了这些延迟,它们会被加在一起,通常不会一起使用。
4.5.5. 测试隔离设备
- 要点:要防止数据崩溃并成功恢复集群节点失败,请验证隔离设备。对于完整的测试策略,验证网络连接,请运行隔离代理脚本,通过集群管理器触发隔离操作,并模拟物理节点失败。
- 要点:先决条件
- 列表:您已配置了隔离功能,以便 Pacemaker 集群节点或 Pacemaker 远程节点会导致硬终止,而不是安全关闭。
- 列表:您已在 /etc/systemd/logind.conf 文件中禁用了 ACPI soft-off,以便在安全关闭时忽略任何电源按钮的信号。
- 列表:使用 SSH、Telnet、HTTP 或者用来连接到设备的任何远程协议,来手动登录并测试隔离设备,或者查看给出的输出。例如,如果您要为启用了 IPMI 的设备配置隔离,则尝试使用 ipmitool 远程登录。记录手动登录时使用的选项,因为在使用隔离代理时可能需要使用这些选项。 如果您无法登录到隔离设备,请确定设备是可以被 ping 到的,没有因为如防火墙等配置限制对隔离设备的访问,在隔离设备中启用了远程访问,且有正确的凭证。
- 列表:使用隔离代理脚本手动运行隔离代理。这不需要集群服务正在运行,因此您可以在集群配置该设备前执行这个步骤。这可保证在继续前隔离设备响应正常。 注意 这些示例将为 iLO 设备使用 fence_ipmilan 隔离代理脚本。您使用的实际隔离代理以及调用代理的命令取决于服务器硬件。您应该参考您使用的隔离保护代理的 man 页来确定要指定的选项。您通常需要了解隔离设备的登录和密码,以及其它与该隔离设备相关的信息。 以下示例显示了使用 -o status 参数运行 fence_ipmilan 隔离代理脚本的格式,来检查另一个节点上的隔离设备接口的状态,而实际上并没有对该节点进行隔离。这可让您在尝试重新引导节点前测试该设备并使其可用。在运行这个…
- 列表:一旦隔离设备在集群中配置了与手动操作相同的选项,并且集群已经启动,则可以从任何节点(或者多次从不同的节点)使用 pcs stonith fence 命令来测试隔离,如下例所示。pcs stonith fence 命令从 CIB 中读取集群配置,并调用配置的隔离代理来启动隔离操作。这会验证集群配置是否正确。 # pcs stonith fence node_name 如果 pcs stonith fence 命令正常工作,这意味着发生隔离事件时集群的隔离配置应该可以正常工作。如果命令失败,这意味着集群管理无法通过它获取的配置调用隔离设备。检查以下问题并根据需要更新集群配置。 检查您的隔离配置。例如,如果您使用了主机映射,则应该确保系…
- 列表:检查您的隔离配置。例如,如果您使用了主机映射,则应该确保系统可以使用您提供的主机名查找节点。
- 命令/配置摘录:
# fence_ipmilan -a ipaddress -l username -p password -o status
# fence_ipmilan -a ipaddress -l username -p password -o reboot- 注意:注意 这些示例将为 iLO 设备使用 fence_ipmilan 隔离代理脚本。您使用的实际隔离代理以及调用代理的命令取决于服务器硬件。您应该参考您使用的隔离保护代理的 man 页来确定要指定的选项。您通常需要了解隔离设备的登录和密码,以及其它与该隔离设备相关的信息。
- 注意:注意 如果正在测试的隔离代理是 fence_drac 、fence_ilo 或系统管理设备的其他一些隔离代理,并且一直出现故障,则返回尝试 fence_ipmilan。大多数系统管理卡支持 IPMI 远程登录,唯一支持的隔离代理是 fence_ipmilan。
4.5.6. 配置隔离级别
- 要点:Pacemaker 通过一个称为隔离拓扑的功能实现有多个设备的节点的隔离。要实现拓扑结构,根据常规创建独立设备,然后在配置中的隔离拓扑部分定义一个或多个隔离级别。
- 要点:Pacemaker 会按如下方式处理隔离级别:
- 列表:级别以整数形式递增,从 1 开始。
- 列表:如果设备失败,对当前级别的处理会中断。不会执行该级别的其他设备,而是尝试下一个级别。
- 列表:如果所有设备被成功隔离,那么该级别已成功,且不会尝试其他级别。
- 列表:当一个级别被通过(success)或所有级别都已经被尝试(failed)后,操作就会完成。
- 列表:您已为节点 rh7-2 配置了名为 my_ilo 的 ilo 隔离设备。
- 列表:您已为节点 rh7-2 配置了名为 my_apc 的 apc 隔离设备。
- 命令/配置摘录:
# pcs stonith level add level node devices
# pcs stonith level add 1 rh7-2 my_ilo4.5.7. 删除隔离级别
- 要点:您可以删除指定节点和设备的隔离级别。如果没有指定节点或设备,则您指定的隔离级别会从所有节点中删除。
- 要点:流程
- 列表:删除指定节点和设备的隔离级别: # pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
- 命令/配置摘录:
# pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]4.5.8. 清除隔离级别
- 要点:您可以清除指定节点或 stonith id 上的隔离级别。如果您没有指定节点或 stonith id,则会清除所有隔离级别。
- 要点:流程
- 列表:清除指定节点或 stonith id 上的隔离级别: # pcs stonith level clear [node]|stonith_id(s)]
- 列表:如果您指定一个以上的 stonith id,则必须用逗号分开(不要有空格),如下例所示。 # pcs stonith level clear dev_a,dev_b
- 命令/配置摘录:
# pcs stonith level clear [node]|stonith_id(s)]
# pcs stonith level clear dev_a,dev_b4.5.9. 在隔离级别中验证节点和设备
- 要点:您可以验证所有在隔离级别指定的隔离设备和节点都存在。
- 要点:流程
- 列表:使用以下命令验证在隔离级别中指定的所有隔离设备和节点是否存在: # pcs stonith level verify
- 命令/配置摘录:
# pcs stonith level verify4.5.10. 在隔离拓扑中指定节点
- 要点:您可以在隔离拓扑中通过在节点名称上应用的正则表达式、节点属性及其值来指定节点。
- 要点:流程
- 列表:以下命令将节点 node1、 node 2 和 node3 配置为使用隔离设备 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…
- 命令/配置摘录:
# 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,apc44.5.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
- 命令/配置摘录:
# 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"4.5.12. 管理隔离设备
- 要点:pcs 命令行界面提供各种命令,您可以用来在配置后管理隔离设备。
- 要点:以下命令显示所有目前配置的隔离设备。如果指定了 stonith_id,命令仅显示那个配置的隔离设备的选项。如果指定了 --full 选项,则会显示所有配置的隔离选项。
- 列表:指定 --output-format=cmd 会显示从配置隔离级别的当前集群配置创建的 pcs 命令。您可以使用这些命令在不同系统上重新创建配置的隔离级别。
- 列表:指定 --output-format=json ,以 JSON 格式显示隔离级别配置,这适用于机器解析。
- 命令/配置摘录:
# pcs stonith config [stonith_id] [--full]
# 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- 注意:警告 如果您指定的节点实际上没有关闭,但运行通常由集群控制的集群软件或服务,则会发生数据损坏和集群故障。
4.5.13. 其他资源
- 列表:在 Red Hat High Availability Cluster 中进行隔离(Red Hat 知识库)
4.6. 配置 ACPI 以用于集成的隔离设备
- 要点:如果您的集群使用集成的隔离设备,必须配置 ACPI(高级配置和电源界面)以保证迅速和完全的隔离。
- 要点:如果将集群节点配置为使用集成的隔离设备保护,则为该节点禁用 ACPI Soft-Off。禁用 ACPI Soft-Off 允许集成的隔离设备立即并完全关闭节点,而不是尝试彻底关闭(例如,shutdown -h now)。否则,如果启用了 ACPI Soft-Off,集成的隔离设备可能需要 4 秒以上的时间来关闭节点(请参阅下面的备注)。另外,如果启用了 ACPI Soft-Off,且在关闭过程中有一个节点 panic 或停滞,则集成的保护设备可能无法关闭该节点。在这些情况下,隔离会被延迟或者失败。因此,当使用集成隔离设备隔离节点并启用 ACPI Soft-Off时,集群恢复会很慢,或者需要管理员进行干预才能恢复。
- 列表:禁用 ACPI Soft-Off 的首选方法是将 BIOS 设置改为 "instant-off" 或在不延迟的情况下关闭该节点的对等设置。
- 列表:在 /etc/systemd/logind.conf 文件中设置 HandlePowerKey=ignore,并在隔离时验证节点是否立即关闭。这是禁用 ACPI Soft-Off 的第一个替代方法。
- 列表:在内核引导命令行中附加 acpi=off。这是禁用 ACPI Soft-Off 的第二个替代方法,如果首选方法或第一个替代方法不可用。 重要 这个方法可完全禁用 ACPI。当 ACPI 被完全禁用时,以下计算机可能无法正确引导。只有在其他方法无法在您的集群中使用时,才使用这个方法。
- 注意:注意 保护节点所需时间取决于所使用的集成的保护设备。有些集成的保护设备性能与按住电源按钮相当,因此隔离设备可在 4-5 秒内关闭该节点。其他集成的隔离设备性能与按电源开关一致,依靠操作系统关闭该节点,因此隔离设备关闭该节点的时间要大大超过 4-5 秒。
- 注意:重要 这个方法可完全禁用 ACPI。当 ACPI 被完全禁用时,以下计算机可能无法正确引导。只有在其他方法无法在您的集群中使用时,才使用这个方法。
4.6.1. 使用 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 配置。
- 列表:验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备。
- 命令/配置摘录:
`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…- 注意:注意 使用 BIOS 禁用 ACPI Soft-Off 的步骤可能因服务器系统而异。您应该在您的硬件文档中验证此步骤。
- 注意:注意 与 ACPI Function 等效,Soft-Off by PWR-BTTN 和 Instant-Off 可能因计算机而异。但这个过程的目的是配置 BIOS,以便计算机能无延迟地关闭电源按钮。
4.6.2. 在 logind.conf 文件中禁用 ACPI Soft-Off
- 要点:您可以在 /etc/systemd/logind.conf 文件中禁用 power-key handing。
- 要点:流程
- 列表:在 /etc/systemd/logind.conf 文件中定义以下配置: HandlePowerKey=ignore
- 列表:重启 systemd-logind 服务: # systemctl restart systemd-logind.service
- 列表:验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备。
- 命令/配置摘录:
HandlePowerKey=ignore
# systemctl restart systemd-logind.service4.6.3. 在 GRUB 2 文件中完全禁用 ACPI
- 要点:通过在内核的 GRUB 菜单条目中添加 acpi=off 来禁用 ACPI Soft-Off。
- 要点:流程
- 列表:使用带有- args 和- update-kernel 选项的 grubby 工具更新每个集群节点上的 grub.cfg 文件: # grubby --args=acpi=off --update-kernel=ALL
- 列表:重新引导节点。
- 列表:验证在隔离时该节点是否立即关闭。详情请参阅 测试隔离设备。
- 命令/配置摘录:
# grubby --args=acpi=off --update-kernel=ALL- 注意:重要 完全禁用 ACPI 可能会阻止某些系统正确引导。只有在其他隔离配置方法对集群无效时,才使用此方法。
4.7. 创建 Azure 内部负载均衡器
- 要点:要确保没有响应健康探测请求的集群节点已被删除,您可以创建一个 Azure 内部负载均衡器。使用自定义用于高可用性(HA)集群的设置来配置负载均衡器。
- 要点:先决条件
- 列表:您已创建了红帽帐户。
- 列表:您已 注册并配置了 Azure 帐户。
- 列表:Azure 命令行界面(CLI) 已安装在您的系统上。
- 列表:您已为 HA 集群创建了 Azure 资源,包括包含集群节点的虚拟网络、子网和可用性集。
- 列表:从 HA 集群中的任何节点登录到您的 Azure 帐户: $ az login
- 列表:使用动态私有前端 IP 地址创建基本内部负载均衡器: $ az network lb create \ --resource-group <resource_group> \ --name <load_balancer_name> \ --sku Basic \ --vnet-name <vnet_name> \ --subnet <subnet_name> \ --frontend-ip-name <frontend_ip_name> \ --backend-pool-name <backend_pool_name> 不要指定 --private-ip-address,因此 Azure 会从子网动态分配前端 IP 地址。 示例:…
- 命令/配置摘录:
$ az login
$ az network lb create \ --resource-group <resource_group> \ --name <load_balancer_name> \ --sku Basic \ --vnet-name <vnet_name> \ --subnet <subnet_name> \ --frontend-ip-name <frontend_ip_name> \ --backend-pool-name <backend_pool_name>- 注意:注意 对于某些 HA 产品应用程序(例如,SAP 高性能分析设备(HANA)和 SQL Server),您需要与 Microsoft 合作以确定要使用的正确端口。
4.8. 配置负载均衡资源代理
- 要点:创建健康探测后,您必须配置负载均衡器资源代理。此资源代理运行一个服务,它响应来自 Azure 负载均衡器的健康探测请求,并删除不响应的集群节点。
- 要点:先决条件
- 列表:您已完成 创建 Azure 负载均衡器 的过程。
- 列表:在所有节点上安装 nmap-ncat 资源代理: # dnf install nmap-ncat resource-agents-cloud
- 列表:在单个节点上执行以下步骤: 使用 IPaddr2 地址的 FrontendIP 负载均衡器来创建 pcs 资源和组: # pcs resource create resource-name IPaddr2 ip="10.0.0.7" --group <cluster_resources_group> 配置 load balancer 资源代理: # pcs resource create resource-loadbalancer-name azure-lb port=port-number --group <cluster_resources_group>
- 列表:使用 IPaddr2 地址的 FrontendIP 负载均衡器来创建 pcs 资源和组: # pcs resource create resource-name IPaddr2 ip="10.0.0.7" --group <cluster_resources_group>
- 列表:配置 load balancer 资源代理: # pcs resource create resource-loadbalancer-name azure-lb port=port-number --group <cluster_resources_group>
- 列表:运行 pcs status 来查看结果。 [root@node01 clouduser]# pcs status Cluster name: clusterfence01 Stack: corosync Current DC: node02 (version 1.1.16-12.el7_4.7-94ff4df) - partition with quorum Last updated: Tue Jan 30 12:42:35 2018 Last change: Tue Jan 30 12:26:42 2018 by root via cibadmin on node01 3 nodes configured 3 resources…
- 命令/配置摘录:
# dnf install nmap-ncat resource-agents-cloud
# pcs resource create resource-name IPaddr2 ip="10.0.0.7" --group <cluster_resources_group>4.9. 配置共享块存储
- 要点:要让多个集群节点访问同一数据,请将 Azure Shared Disks 配置为共享块存储。这样可确保所有节点的一致性、同步数据访问,以实现高可用性(HA)集群和应用程序,如数据库或文件系统。
- 要点:先决条件
- 列表:还没有创建集群。
- 列表:您有三个带有 1TB 共享磁盘的 Azure 虚拟机(一个三节点集群)。
- 列表:在主机 系统中有 Azure CLI,并创建了 SSH 密钥。
- 列表:您必须在 Azure 中创建了集群环境。为此,请按照此列表中的资源操作: 资源组 虚拟网络 网络安全组 网络安全组规则 子网 负载均衡器(可选) 存储帐户 代理放置组 可用性集
- 列表:资源组
- 列表:虚拟网络
- 命令/配置摘录:
$ az disk create -g <resource_group> \ -n <shared_block_volume_name> \ --size-gb <disk_size> \ --max-shares <number_vms> \ -l <location>
$ az disk create -g sharedblock-rg \ -n shared-block-volume.vhd \ --size-gb 1024 \ --max-shares 3 \ -l westcentralus第 5 章 在 Azure 上配置带有安全引导的 RHEL
- 要点:要在 Microsoft Azure 上增强 Red Hat Enterprise Linux (RHEL)实例的引导安全性,请配置安全引导。安全引导会在启动时验证引导装载程序和其他组件的数字签名,允许可信程序在阻止未经授权的程序时加载。
- 要点:Azure 平台上公开的可用 RHEL 镜像默认包括安全引导。允许的签名数据库(db)有 Microsoft 证书。当您在 Azure Compute Gallery 中注册一个新镜像版本时,您可以将自定义证书添加到 UEFI 安全引导变量中。
5.1. 云环境中 RHEL 的安全引导概述
- 要点:当安全引导检测到任何由不受信任的实体签名的篡改组件或组件时,它会中止引导过程。这是与传统启动进程不同的位置。安全引导在配置机密虚拟机(CVM)中发挥关键作用。
- 要点:它确保只有可信实体参与引导链。安全引导是一个统一可扩展固件接口(UEFI)功能。它根据硬件中存储的可信密钥验证引导组件的数字签名,如引导装载程序和内核。
- 列表:通过定义的接口验证对特定设备路径的访问
- 列表:强制使用最新的配置
- 列表:永久覆盖以前的配置
- 列表:密钥交换密钥数据库(KEK):一种公钥交换,来在 RHEL 操作系统和虚拟机固件之间建立信任。您也可以使用这些密钥更新允许的签名数据库(db)和禁止的签名数据库(dbx)。
- 列表:平台密钥数据库(PK):一个自签名的单密钥数据库,来在虚拟机固件和云平台之间建立信任。PK 也更新 KEK 数据库。
- 列表:允许签名数据库(db):维护证书列表或二进制哈希的数据库。它们定义二进制文件是否可以在系统上启动。另外,来自 db 的所有证书都会导入到 RHEL 内核的 .platform keyring 中。使用此功能,您可以在锁定模式下添加和加载签名的第三方内核模块。
- 注意:注意 针对 dbx 数据库的二进制文件检查和安全引导高级目标(SBAT)机制。使用 SBAT,您可以通过将签名的二进制文件的证书保持为有效来撤销特定二进制文件的旧版本。
5.2. 使用安全引导在 Azure 上配置 RHEL 虚拟机
- 要点:要确保 Azure 云平台上的 Red Hat Enterprise Linux (RHEL)实例有一个安全引导过程,请使用安全引导机制。您可以在注册自定义 RHEL Azure 镜像的过程中配置安全引导。
- 要点:先决条件
- 列表:在使用 GUI 创建虚拟机时,已在 Configure security features 设置下启用了 Enable secure 引导选项。
- 列表:您已安装了这些软件包: python3 openssl efivar keyutils python3-virt-firmware
- 列表:python3
- 列表:openssl
- 列表:efivar
- 列表:keyutils
- 命令/配置摘录:
$ openssl req -quiet \ -newkey rsa:4096 \ -nodes -keyout custom_db.key \ -new -x509 \ -sha256 -days 3650 \ -subj "/CN=Signature Database key/" \ --outform DER \ -out custom_db.cer
$ echo `base64 -w0 custom_db.cer`- 注意:注意 此镜像由预先存储的统一可扩展固件接口(UEFI)变量组成。因此,从此镜像启动的虚拟机使用安全引导机制以及第一次引导时所需的变量。Microsoft Azure 通过可信启动的 VM 支持安全启动。这些虚拟机提供了防止 rootkits 和 bootkits 的安全机制,同时提供了其他功能,如 Virtual Trusted Platform Manager (vTPM)。
第 6 章 使用 Intel TDX 在公有云平台上配置 RHEL
- 要点:要为您的虚拟机有一个安全隔离的环境,请在 Red Hat Enterprise Linux (RHEL)实例上使用 Intel Trust Domain Extensions (TDX)。它可用于公共云平台。Intel TDX 是机密虚拟机(CVM)的安全类型。
6.1. Intel TDX 概述
- 要点:要为 RHEL 实例启用安全引导过程,请使用 Intel Trust Domain Extensions (TDX)。
- 要点:Intel TDX 提高了以前的 Intel Software Guard Extensions (SGX)技术。SGX 通过创建名为 enclaves 的安全内存区域,提供与 hypervisor 和云提供商隔离的虚拟机(VM)。存储在 enclaves 中的应用程序代码可以访问存储在 enclaves 中的内存和数据,使其无法访问外部实体。TDX 是基于硬件的可信执行环境(TEE)。
- 列表:初始化和测量 :启用 TDX 的 hypervisor 设置虚拟机的初始状态。 这个 hypervisor 将固件二进制文件加载到虚拟机内存中,并设置初始注册状态。 Intel 处理器测量虚拟机的初始状态,并提供验证虚拟机初始状态的详细信息。
- 列表:这个 hypervisor 将固件二进制文件加载到虚拟机内存中,并设置初始注册状态。
- 列表:Intel 处理器测量虚拟机的初始状态,并提供验证虚拟机初始状态的详细信息。
- 列表:firmware : 虚拟机启动 UEFI 固件。固件可能包含有状态或无状态的虚拟可信平台模块(vTPM)实现。 有状态 vTPM 在虚拟机重启和迁移过程中维护持久性加密状态。 无状态 vTPM 在不持久性的情况下为每个虚拟机会话生成一个新的加密状态。 虚拟机特权级别(VMPL)技术将 vTPM 与客户机隔离。VMPL 在不同虚拟机组件和 hypervisor 之间提供硬件强制的特权隔离。
- 列表:有状态 vTPM 在虚拟机重启和迁移过程中维护持久性加密状态。
- 列表:无状态 vTPM 在不持久性的情况下为每个虚拟机会话生成一个新的加密状态。
- 注意:注意 在公共云平台上部署 Red Hat Enterprise Linux (RHEL)之前,请仔细检查相应的云服务供应商,以获取特定 RHEL 实例类型的支持状态和认证。
6.2. 使用 Intel TDX 在 Azure 上配置 RHEL VM
- 要点:通过使用 Intel Trusted Domain Extensions (TDX),您可以创建称为可信域(TD)的硬件辅助隔离虚拟机。它确保只有虚拟机有权访问其资源,而仍无法访问虚拟机监控程序和主机。
- 要点:先决条件
- 列表:已安装 openssh 和 openssh-clients 软件包。
- 列表:已安装 Azure CLI 工具。详情请参阅在 Linux 上安装 Azure CLI。
- 列表:您已从支持的 Azure 实例类型启动 RHEL 实例。
- 列表:使用 Azure CLI 实用程序登录到 Azure: $ az login
- 列表:为所选可用区创建 Azure 资源组: $ az group create --name <example_resource_group> --location westeurope
- 列表:部署启用了 TDX 的 RHEL 实例,例如 Standard_DC2eds_v5 实例类型: $ az vm create --resource-group <example_resource_group> \ --name <example_rhel_instance> \ --image <"RedHat:rhel-cvm:10_0_cvm:latest"> \ --size <Standard_DC2eds_v5> \ --admin-username <example_azure_user> \ --generate-ssh-keys \ --security-type ConfidentialVM \ --os-dis…
- 命令/配置摘录:
$ az login
$ az group create --name <example_resource_group> --location westeurope第 7 章 使用 AMD SEV SNP 在公有云平台上配置 RHEL
- 要点:要防止基于 VM 的攻击并减少内存完整性违反情况,请在公有云上的 Red Hat Enterprise Linux (RHEL)实例上配置带有安全嵌套的 Paging (SEV-SNP)的 AMD 安全加密虚拟化。AMD SEV-SNP 将虚拟机数据与虚拟机监控程序和云服务供应商隔离。
7.1. AMD SEV SNP 概述
- 要点:带有安全嵌套分页(SEV-SNP)的 AMD 安全加密虚拟化旨在提高存储在公共云平台上的虚拟机(VM)和数据的安全性。
- 要点:AMD 处理器提供三种基于硬件的安全机制: SEV、SEV-ES 和 SEV-SNP。
- 列表:SEV: SEV 机制加密虚拟机(VM)内存,以防止虚拟机监控程序访问虚拟机数据。
- 列表:SEV-ES : SEV with Encrypted State (SEV-ES)通过加密 CPU 注册状态来扩展 SEV。这种机制可防止虚拟机监控程序访问或修改虚拟机 CPU 注册。尽管在 hypervisor 和虚拟机之间提供隔离,但它仍然容易受到内存完整性攻击的影响。
- 列表:SEV-SNP: SEV-SNP 是 SEV-ES 的增强,它添加了内存完整性保护和虚拟机加密。这种机制可防止虚拟机监控程序修改页表来重定向虚拟机内存访问。它可防止重播攻击和内存篡改。
- 列表:Secure Processor: AMD EPYC 处理器集成了一个安全处理器(SP)子系统。AMD SP 是一个专用的硬件组件,用于管理密钥和加密操作。
- 列表:内存完整性 :内存管理单元(MMU)利用页表将虚拟地址转换为客户机物理地址。 SEV-SNP 使用嵌套页表将客户机物理地址转换为主机物理地址。 定义后,嵌套的页表不会被虚拟机监控程序或主机更改。这可防止虚拟机访问不同的页面,从而保护内存的完整性。 SEV-SNP 使用此方法提供对虚拟机内存的重播攻击、内存完整性违反情况和恶意修改的保护。
- 列表:SEV-SNP 使用嵌套页表将客户机物理地址转换为主机物理地址。
- 注意:注意 即使虚拟机监控程序创建虚拟机的主内存和 CPU 注册状态,它们在初始化该虚拟机后仍为隐藏且无法访问。
7.2. 使用 AMD SEV SNP 在 Azure 上配置 RHEL 虚拟机
- 要点:您可以在 Azure 上的 RHEL 虚拟机上使用安全嵌套分页(SEV-SNP)配置 AMD 安全加密虚拟化,以创建可信引导环境。SEV-SNP 保护您的数据不受 hypervisor 和云服务供应商的访问,且仅适用于 AMD EPYC 处理器系列。
- 要点:先决条件
- 列表:已安装 openssh 和 openssh-clients 软件包。
- 列表:已安装 Azure CLI 工具。详情请参阅安装 Azure CLI。
- 列表:您已创建了使用受支持的基于 AMD EPYC 处理器的机器类型的 Azure 虚拟机。
- 列表:使用 Azure CLI 实用程序登录到 Azure: $ az login
- 列表:为所选可用区创建 azure 资源组: $ az group create --name <example_resource_group> --location eastus
- 列表:使用 SEV-SNP 部署 RHEL 实例,例如 Standard_DC4as_V5 实例类型: $ az vm create --resource-group <example_resource_group> \ --name <example-rhel-10-sev-snp-instance> \ --image <RedHat:rhel:10_x64_Gen2:latest> \ --size <Standard_DC4as_V5> \ --admin-username <example_azure_user> \ --generate-ssh-keys \ --security-type ConfidentialVM \ …
- 命令/配置摘录:
$ az login
$ az group create --name <example_resource_group> --location eastus第 8 章 在带有 UKI 的公共云平台上配置 RHEL
- 要点:要确保 Red Hat Enterprise Linux (RHEL)实例具有来自不受信任的存储的安全引导过程,请使用统一内核镜像(UKI)。这适用于公共云平台上的机密虚拟机(CVM)。
8.1. 统一内核镜像概述
- 要点:要在整个引导链中扩展安全引导保护,请使用统一内核镜像(UKI)。
- 要点:统一内核镜像(UKI)是一个统一的可扩展固件接口(UEFI)可移植可执行文件(PE)二进制文件。它整合了 UEFI 环境的操作系统的基本组件。UKI 二进制组件通过包括 initramfs 和内核命令行来扩展安全引导覆盖率。initramfs 是 Linux 启动过程的一部分。内核命令行可让您限制对定义参数的权限。UKI 二进制文件中包含的主要组件有:
- 列表:.linux 部分存储 Linux 内核镜像。
- 列表:.initrd 部分存储初始 RAM 文件系统 initramfs。
- 列表:.cmdline 部分存储内核命令行。
- 列表:其他部分,如 .sbat。
- 列表:红帽签名。
- 列表:禁止任何恶意代理或组件更改引导链中的任何对象。
完整目录
- 获取 RHEL 系统镜像并在 Azure 上创建 RHEL 实例
- 对红帽文档提供反馈
- 第 1 章 公有云平台上的 RHEL 简介
- 1.1. 在公有云中使用 RHEL 的好处
- 1.2. RHEL 的公有云用例
- 1.3. 迁移到公有云时的常见关注
- 1.4. 为公有云部署获取 RHEL
- 1.5. 创建 RHEL 云实例的方法
- 第 2 章 准备 VHD 镜像并将其上传到 Microsoft Azure
- 2.1. 准备手动上传 Microsoft Azure VHD 镜像
- 2.2. 手动将 VHD 镜像上传到 Microsoft Azure 云
- 2.3. 创建 VHD 镜像并将其自动上传到 Microsoft Azure 云
- 第 3 章 在 Azure 上将 RHEL 镜像部署为一个计算实例
- 3.1. 用于公有云的可用 RHEL 镜像类型
- 3.2. 所需的系统软件包
- 3.3. 使用自定义基础镜像部署 RHEL 实例
- 3.4. 安装 Azure CLI
- 3.5. 安装 Hyper-V 设备驱动程序
- 3.6. 在 Azure 上使用 cloud-init 配置 swap 空间
- 3.7. 为 Azure 部署准备虚拟机
- 3.8. 将 RHEL 镜像转换为 Azure 磁盘镜像
- 3.9. 为 RHEL 镜像配置 Azure 资源
- 3.10. 将 VHD 镜像上传到 Azure Blob 存储
- 3.11. 在 Azure 中启动并连接到 RHEL 虚拟机
- 3.12. SSH 验证方法的类型
- 3.13. 附加红帽订阅
- 3.14. 在 Azure 金级镜像上配置自动注册
- 3.15. 为 Microsoft Azure 虚拟机配置 kdump
- 第 4 章 在 Microsoft Azure 上配置红帽高可用性集群
- 4.1. 在公有云平台上使用高可用性集群的好处
- 4.2. 为 Azure 安装高可用性软件包和代理
- 4.3. 创建 Azure AD 应用程序
- 4.4. 创建高可用性集群
- 4.5. 在 Red Hat High Availability 集群中配置隔离功能
- 4.5.1. 显示可用的隔离代理及其选项
- 4.5.2. 创建隔离设备
- 4.5.3. 隔离设备的常规属性
- 4.5.4. 隔离延迟
- 4.5.5. 测试隔离设备
- 4.5.6. 配置隔离级别
- 4.5.7. 删除隔离级别
- 4.5.8. 清除隔离级别
- 4.5.9. 在隔离级别中验证节点和设备
- 4.5.10. 在隔离拓扑中指定节点
- 4.5.11. 配置冗余电源的隔离
- 4.5.12. 管理隔离设备
- 4.5.13. 其他资源
- 4.6. 配置 ACPI 以用于集成的隔离设备
- 4.6.1. 使用 BIOS 禁用 ACPI Soft-Off
- 4.6.2. 在 logind.conf 文件中禁用 ACPI Soft-Off
- 4.6.3. 在 GRUB 2 文件中完全禁用 ACPI
- 4.7. 创建 Azure 内部负载均衡器
- 4.8. 配置负载均衡资源代理
- 4.9. 配置共享块存储
- 第 5 章 在 Azure 上配置带有安全引导的 RHEL
- 5.1. 云环境中 RHEL 的安全引导概述
- 5.2. 使用安全引导在 Azure 上配置 RHEL 虚拟机
- 第 6 章 使用 Intel TDX 在公有云平台上配置 RHEL
- 6.1. Intel TDX 概述
- 6.2. 使用 Intel TDX 在 Azure 上配置 RHEL VM
- 第 7 章 使用 AMD SEV SNP 在公有云平台上配置 RHEL
- 7.1. AMD SEV SNP 概述
- 7.2. 使用 AMD SEV SNP 在 Azure 上配置 RHEL 虚拟机
- 第 8 章 在带有 UKI 的公共云平台上配置 RHEL
- 8.1. 统一内核镜像概述
