本指南面向需要使用 SUSE® Linux Enterprise High Availability 设置、配置和维护群集的管理员。为了能快速且有效地进行配置和管理,产品提供有图形用户界面和命令行界面 (CLI)。本指南介绍了如何通过这两种方法执行关键任务。您可以根据自己的需要选择适当的工具。
- 前言
- I 安装和设置
- II 配置和管理
- III 存储和数据复制
- IV 维护和升级
- V 附录
- 词汇表
- E GNU licenses
- 1.1 由三台服务器构成的群集
- 1.2 由三台服务器构成的群集(一台服务器出现故障后)
- 1.3 典型的光纤通道群集配置
- 1.4 典型的 iSCSI 群集配置
- 1.5 典型的不含共享存储的群集配置
- 1.6 体系结构
- 4.1 YaST - 多播配置
- 4.2 YaST - 单播配置
- 4.3 YaST - 安全性
- 4.4 YaST
conntrackd
— - 4.5 YaST - 服务
- 4.6 YaST - Csync2
- 5.1 Hawk2 - 群集配置
- 5.2 Hawk2 - Apache Web 服务器向导
- 5.3 Hawk2 批模式已激活
- 5.4 Hawk2 批模式 - 插入的事件和配置更改
- 6.1 Hawk2 - 原始资源
- 6.2 组资源
- 6.3 Hawk2 - 资源组
- 6.4 Hawk2 - 克隆资源
- 6.5 Hawk2 - STONITH 资源
- 6.6 操作值
- 6.7 Hawk2 - 资源细节
- 7.1 Hawk2 - 位置约束
- 7.2 Hawk2 - 共置约束
- 7.3 Hawk2 - 顺序约束
- 7.4 Hawk2 - 一个共置约束中的两个资源集
- 7.5 Hawk2:用于资源故障转移的元属性
- 7.6 Hawk2:用于资源故障回复的元属性
- 7.7 Hawk2:编辑节点利用率属性
- 8.1 Hawk2 - 编辑原始资源
- 8.2 Hawk2 - 标记
- 11.1 Hawk2 - 群集状态
- 11.2 包含一个群集站点 (
amsterdam
) 的 Hawk2 仪表板 - 11.3 Hawk2 添加群集细节
- 11.4 “最近的事件”表
- 11.5 Hawk2 - 历史记录浏览器主视图
- 11.6 Hawk2 报告细节
- 15.1 Hawk2 创建角色
- 17.1 YaST IP 负载平衡 - 全局参数
- 17.2 YaST IP 负载平衡 - 虚拟服务
- 21.1 显示 OCFS2 CIB 更改的 Hawk2 摘要屏幕
- 23.1 DRBD 在 Linux 中的位置
- 23.2 资源配置
- 23.3 资源堆叠
- 23.4
drbdmon
显示了一个正常的连接 - 23.5
drbdmon
显示了一个错误的连接 - 24.1 使用群集 LVM 的共享磁盘设置
- 26.1 CTDB 群集的结构
- 5.1 双节点群集的 Corosync 配置摘录
- 5.2 N 节点群集的 Corosync 配置摘录
- 5.3 简单的 crmsh 外壳脚本
- 6.1 Web 服务器的资源组
- 7.1 用于位置约束的资源集
- 7.2 共置资源链
- 7.3 有序资源链
- 7.4 以资源集表示的有序资源链
- 7.5 迁移阈值 - 处理流程
- 7.6 在禁用
hv_memory
的情况下为 KVM 创建资源代理 - 7.7 在禁用
host_memory
的情况下为 Xen 创建资源代理 - 9.1 为监控插件配置资源
- 12.1 IBM RSA 无人值守设备的配置
- 12.2 UPS 屏蔽设备的配置
- 12.3 Kdump 设备的配置
- 13.1 超时计算公式
- 14.1 QDevice 的状态
- 14.2 QNetd 服务器的状态
- 15.1 XML 格式群集配置摘录
- 17.1 简单的 ldirectord 配置
- 23.1 三节点堆叠式 DRBD 资源的配置
- 23.2 使用群集信息库 (CIB) 启用资源级别屏蔽的 DRBD 配置
- 27.1 使用 NFS 服务器存储文件备份
- 27.2 使用 EMC NetWorker 等第三方备份工具
- A.1 停止的资源
版权所有 © 2006–2025 SUSE LLC 和贡献者。保留所有权利。
根据 GNU 自由文档许可证 (GNU Free Documentation License) 版本 1.2 或(根据您的选择)版本 1.3 中的条款,在此授予您复制、分发和/或修改本文档的许可权限;本版权声明和许可证附带不可变部分。许可版本 1.2 的副本包含在题为“GNU Free Documentation License”的部分。
有关 SUSE 商标,请参见 https://www.suse.com/company/legal/。所有第三方商标均是其各自所有者的财产。商标符号(®、™ 等)代表 SUSE 及其关联公司的商标。星号 (*) 代表第三方商标。
本指南力求涵盖所有细节,但这不能确保本指南准确无误。SUSE LLC 及其关联公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。
前言 #
1 可用文档 #
- 联机文档
可在 https://documentation.suse.com 上查看我们的联机文档。您可浏览或下载各种格式的文档。
注意:最新更新最新的更新通常会在本文档的英文版中提供。
- SUSE 知识库
如果您遇到问题,请参考 https://www.suse.com/support/kb/ 上提供的联机技术信息文档 (TID)。在 SUSE 知识库中搜索根据客户需求提供的已知解决方案。
- 发行说明
有关发行说明,请参见 https://www.suse.com/releasenotes/。
- 在您的系统中
如需脱机使用,您也可在系统的
/usr/share/doc/release-notes
下找到该发行说明。各软件包的相应文档可在/usr/share/doc/packages
中找到。许多命令的手册页中也对相应命令进行了说明。要查看手册页,请运行
man
后跟特定的命令名。如果系统上未安装man
命令,请使用sudo zypper install man
加以安装。
2 改进文档 #
欢迎您提供针对本文档的反馈及改进建议。您可以通过以下渠道提供反馈:
- 服务请求和支持
有关产品可用的服务和支持选项,请参见 https://www.suse.com/support/。
要创建服务请求,需在 SUSE Customer Center 中注册订阅的 SUSE 产品。请转到 https://scc.suse.com/support/requests 并登录,然后单击 。
- Bug 报告
在 https://bugzilla.suse.com/ 中报告文档问题。
要简化此过程,请单击本文档 HTML 版本中的标题旁边的
图标。这样会在 Bugzilla 中预先选择正确的产品和类别,并添加当前章节的链接。然后,您便可以立即开始键入 Bug 报告。需要一个 Bugzilla 帐户。
- 贡献
要帮助改进本文档,请单击本文档 HTML 版本中的标题旁边的
(编辑源文档)图标。然后您会转到 GitHub 上的源代码,可以在其中提出拉取请求。需要一个 GitHub 帐户。
注意:(编辑源文档)仅适用于英语版本有关用于本文档的文档环境的详细信息,请参见储存库的 README。
- 邮件
您也可以将有关本文档的错误以及反馈发送至 <doc-team@suse.com>。请在其中包含文档标题、产品版本和文档发布日期。此外,请包含相关的章节号和标题(或者提供 URL),并提供问题的简要说明。
3 文档约定 #
本文档中使用了以下通知和排版约定:
/etc/passwd
:目录名称和文件名PLACEHOLDER:将 PLACEHOLDER 替换为实际值
PATH
:环境变量ls
、--help
:命令、选项和参数user
:用户或组的名称package_name:软件包的名称
Alt、Alt–F1:按键或组合键。按键以大写字母显示,与键盘上的一样。
AMD/Intel 本段内容仅与 AMD64/Intel 64 体系结构相关。箭头标记文本块的开始位置和结束位置。
IBM Z, POWER 本段内容仅与
IBM Z
和POWER
体系结构相关。箭头标记文本块的开始位置和结束位置。Chapter 1, “Example chapter”:对本指南中其他章节的交叉引用。
必须使用
root
特权运行的命令。您还可以在这些命令前加上sudo
命令,以非特权用户身份来运行它们:#
command
>
sudo
command
非特权用户也可以运行的命令:
>
command
可以通过一行末尾处的反斜线字符 (
\
) 拆分成两行或多行的命令。反斜线告知外壳命令调用将会在该行末尾后面继续:>
echo
a b \ c d显示命令(前面有一个提示符)和外壳返回的相应输出的代码块:
>
command
output在交互式 crm 外壳中执行的命令。
crm(live)#
注意事项
警告:警报通知在继续操作之前,您必须了解的不可或缺的信息。向您指出有关安全问题、潜在数据丢失、硬件损害或物理危害的警告。
重要:重要通知在继续操作之前,您必须了解的重要信息。
注意:注意通知额外信息,例如有关软件版本差异的信息。
提示:提示通知有用信息,例如指导方针或实用性建议。
精简通知
额外信息,例如有关软件版本差异的信息。
有用信息,例如指导方针或实用性建议。
如需大致了解群集节点和名称、资源与约束的命名约定,请参见附录 B “命名约定”。
4 支持 #
下面提供了 SUSE Linux Enterprise High Availability 的支持声明和有关技术预览的一般信息。有关产品生命周期的细节,请参见 https://www.suse.com/lifecycle。
如果您有权获享支持,可在 https://documentation.suse.com/sles-15/html/SLES-all/cha-adm-support.html 中查找有关如何收集支持票据所需信息的细节。
4.1 SUSE Linux Enterprise High Availability 的支持声明 #
要获得支持,您需要订阅适当的 SUSE 产品。要查看为您提供的具体支持服务,请转到 https://www.suse.com/support/ 并选择您的产品。
支持级别的定义如下:
- L1
问题判定,该技术支持级别旨在提供兼容性信息、使用支持、持续维护、信息收集,以及使用可用文档进行基本查错。
- L2
问题隔离,该技术支持级别旨在分析数据、重现客户问题、隔离问题区域,并针对级别 1 不能解决的问题提供解决方法,或完成准备工作以提交级别 3 处理。
- L3
问题解决,该技术支持级别旨在借助工程方法解决级别 2 支持所确定的产品缺陷。
对于签约的客户与合作伙伴,将针对 SUSE Linux Enterprise High Availability 的所有软件包提供 L3 支持,但以下项目除外:
技术预览。
声音、图形、字体和作品。
需要额外客户合同的软件包。
模块 Workstation Extension 随附的某些软件包仅享受 L2 支持。
名称以 -devel 结尾的软件包(包含头文件和类似的开发人员资源)只能与其主软件包一起获得支持。
SUSE 仅支持使用原始软件包,即,未发生更改且未重新编译的包。
4.2 技术预览 #
技术预览是 SUSE 提供的旨在让用户大致体验未来创新的各种软件包、堆栈或功能。随附这些技术预览只是为了提供方便,让您有机会在自己的环境中测试新的技术。非常希望您能提供反馈。如果您测试了技术预览,请联系 SUSE 代表,将您的体验和用例告知他们。您的反馈对于我们的未来开发非常有帮助。
技术预览存在以下限制:
技术预览仍处于开发阶段。因此,它们可能在功能上不完整、不稳定,或者不适合生产用途。
技术预览不受支持。
技术预览可能仅适用于特定的硬件体系结构。
技术预览的细节和功能可能随时会发生变化。因此,可能无法升级到技术预览的后续版本,而只能进行全新安装。
SUSE 可能会发现某个预览不符合客户或市场需求,或者未遵循企业标准。技术预览可能会随时从产品中删除。SUSE 不承诺未来将提供此类技术的受支持版本。
有关产品随附的技术预览的概述,请参见 https://www.suse.com/releasenotes 上的发行说明。
第 I 部分 安装和设置 #
- 1 产品概述
SUSE® Linux Enterprise High Availability 是开源群集技术的集成套件。它可让您实施高度可用的物理和虚拟 Linux 群集,避免单一故障点。它可确保关键网络资源的高可用性和可管理性,这些网络资源包括数据、应用程序和服务。因此,它有助于维持业务连续性、保护数据完整性及减少 Linux 关键任务工作负荷的计划外停机时间。
它随附提供必需的监控、消息交换和群集资源管理功能(支持对独立管理的群集资源进行故障转移、故障回复和迁移(负载平衡))。
本章介绍 SUSE Linux Enterprise High Availability 的主要产品功能和优势。您将在本章中找到多个示例群集并了解组成群集的组件。最后一节概述了体系结构,描述了群集内的各体系结构层和进程。
有关 High Availability 群集环境中使用的一些通用术语的解释,请参见词汇表。
- 2 系统要求和建议
下面的小节介绍 SUSE® Linux Enterprise High Availability 的系统要求和先决条件。此外,还提供了有关群集设置的建议。
- 3 安装 SUSE Linux Enterprise High Availability
如果您是首次使用 SUSE® Linux Enterprise High Availability 设置 High Availability 群集,最简单的方法就是从基本的双节点群集开始。您也可以使用双节点群集来运行一些测试。之后,您便可使用 AutoYaST 克隆现有的群集节点来添加更多节点。克隆的节点上会安装相同的包,并具有与原始节点相同的系统配置。
如果要升级运行较低版 SUSE Linux Enterprise High Availability 的现有群集,请参见第 29 章 “升级群集和更新软件包”。
- 4 使用 YaST 群集模块
YaST 群集模块可让您手动从头开始设置群集,或修改现有群集的选项。
不过,如果您希望采用自动方式设置群集,请参见Article “安装和设置快速入门”。该指南介绍了如何安装所需的软件包并会引导您创建基本的双节点群集,该群集是使用 crm 外壳提供的引导脚本设置的。
您还可结合使用这两种设置方法,例如,使用 YaST 群集设置一个节点,然后使用其中一个引导脚本集成更多节点(或反之)。
1 产品概述 #
SUSE® Linux Enterprise High Availability 是开源群集技术的集成套件。它可让您实施高度可用的物理和虚拟 Linux 群集,避免单一故障点。它可确保关键网络资源的高可用性和可管理性,这些网络资源包括数据、应用程序和服务。因此,它有助于维持业务连续性、保护数据完整性及减少 Linux 关键任务工作负荷的计划外停机时间。
它随附提供必需的监控、消息交换和群集资源管理功能(支持对独立管理的群集资源进行故障转移、故障回复和迁移(负载平衡))。
本章介绍 SUSE Linux Enterprise High Availability 的主要产品功能和优势。您将在本章中找到多个示例群集并了解组成群集的组件。最后一节概述了体系结构,描述了群集内的各体系结构层和进程。
有关 High Availability 群集环境中使用的一些通用术语的解释,请参见词汇表。
1.1 作为模块或扩展的可用性 #
High Availability 可作为多个产品的模块或扩展使用。有关详细信息,请参见 https://documentation.suse.com/sles/html/SLES-all/article-modules.html#art-modules-high-availability。
1.2 主要功能: #
SUSE® Linux Enterprise High Availability 可帮助您保障和管理网络资源的可用性。以下各节重点说明一些关键功能:
1.2.1 各种群集情形 #
SUSE Linux Enterprise High Availability 支持以下场景:
主动/主动配置
主动/被动配置:N+1、N+M、N 到 1 和 N 到 M
混合物理和虚拟群集,支持将虚拟服务器和物理服务器群集在一起。这可提高服务可用性和资源利用率。
本地群集
城域群集(“延伸的”本地群集)
Geo 群集(地理位置分散的群集)
属于一个群集的所有节点都应使用相同的处理器平台:x86、IBM Z 或 POWER。不支持采用混合体系结构的群集。
群集最多可包含 32 个 Linux 服务器。使用 pacemaker_remote 可扩展群集使之突破此限制,包含更多的 Linux 服务器。如果群集内的一台服务器发生故障,则群集内的任何其他服务器均可重启动此服务器上的资源(应用程序、服务、IP 地址和文件系统)。
1.2.2 灵活性 #
SUSE Linux Enterprise High Availability 附带了 Corosync 讯息交换和成员资格层,以及 Pacemaker 群集资源管理器。使用 Pacemaker,管理员可持续监控其资源的健康状况和状态,并管理依赖项。可根据高度可配置的规则和策略,自动停止和启动服务。使用 SUSE Linux Enterprise High Availability,您可以对群集进行定制,采用适合组织的特定应用程序和硬件基础架构。基于时间的配置使服务可以在特定时间自动迁移回已修复的节点。
1.2.3 存储和数据复制 #
借助 SUSE Linux Enterprise High Availability,您可以根据需要动态指派和重新指派服务器存储空间。它支持光纤通道或 iSCSI 存储区域网络 (SAN)。它还支持共享磁盘系统,但这不是必需的。SUSE Linux Enterprise High Availability 还附带群集感知文件系统 (OCFS2) 和群集逻辑卷管理器(群集 LVM2)。如需复制数据,可使用 DRBD* 将高可用性服务的数据从群集的活动节点镜像到其备用节点。此外,SUSE Linux Enterprise High Availability 还支持 CTDB(Cluster Trivial Database,群集普通数据库),这是一种 Samba 群集技术。
1.2.4 虚拟化环境支持 #
SUSE Linux Enterprise High Availability 支持由物理和虚拟 Linux 服务器组成的混合群集。SUSE Linux Enterprise Server 15 SP6 随附了 Xen(一种开源虚拟化超级管理程序)和 KVM(基于内核的虚拟机)。KVM 是一款适用于 Linux 的虚拟化软件,基于硬件虚拟化扩展。SUSE Linux Enterprise High Availability 中的群集资源管理器能够识别、监控和管理虚拟服务器以及物理服务器中运行的服务。Guest 系统可作为服务由群集管理。
在活动群集中执行节点的实时迁移时要小心。群集堆栈可能无法容忍实时迁移过程导致的操作系统冻结,这可能导致节点被屏蔽。
建议执行以下任一操作,以帮助避免在实时迁移期间发生节点隔离:
增加 Corosync 令牌超时和 SBD 检查包超时时间,以及任何其他相关设置。适当的值取决于您的特定设置。有关详细信息,请参见第 13.5 节 “超时计算”。
在执行实时迁移之前,请停止节点或整个群集上的群集服务。有关详细信息,请参见第 28.2 节 “用于维护任务的不同选项”。
在生产环境中尝试执行实时迁移之前,必须彻底测试此设置。
1.2.5 本地、城域和 Geo 群集支持 #
SUSE Linux Enterprise High Availability 支持不同的地理场景,包括分散在不同地理位置的群集(即 Geo 群集)。
- 本地群集
一个位置的单个群集(例如,位于一个数据中心内的所有节点)。该群集使用多播或单播实现节点之间的通讯,并在内部管理故障转移。网络延迟可以忽略。存储通常由所有节点同步访问。
- 城域群集
使用光纤通道连接所有站点、可跨越多个建筑物或数据中心的单个群集。该群集使用多播或单播实现节点之间的通讯,并在内部管理故障转移。网络延迟通常很低(约 20 英里的距离 <5 毫秒)。存储频繁复制(镜像或同步复制)。
- Geo 群集(多站点群集)
多个地理位置分散的站点,每个站点一个本地群集。站点通过 IP 通讯。站点间的故障转移由更高级别实体协调。Geo 群集需要应对有限网络带宽和高延迟问题。存储异步复制。
注意:Geo 群集和 SAP 工作负载目前,Geo 群集既不支持 SAP HANA 系统复制,也不支持 SAP S/4HANA 和 SAP NetWeaver 排队复制设置。
各个群集节点之间的地理距离越大,可能影响群集所提供服务的高可用性的因素就越多。网络延迟、有限带宽以及对存储区的访问权是远距离群集面临的主要难题。
1.2.6 资源代理 #
SUSE Linux Enterprise High Availability 包含许多用于管理 Apache、IPv4 和 IPv6 等资源的资源代理。它还为通用的第三方应用程序(例如 IBM WebSphere Application Server)提供了资源代理。如需产品随附的 Open Cluster Framework (OCF) 资源代理的概述,请根据crm
ra
中所述使用 第 5.5.4 节 “显示有关 OCF 资源代理的信息” 命令。
1.2.7 用户友好的管理工具 #
SUSE Linux Enterprise High Availability 附带了一套强大的工具。可使用这些工具进行基本的群集安装和设置,并能实现高效配置和管理:
- YaST
常规系统安装和管理的图形用户界面。使用此用户界面,可按《安装和设置快速入门》中所述在 SUSE Linux Enterprise Server 的基础上安装 SUSE Linux Enterprise High Availability。YaST 在 High Availability 类别中还提供以下模块,可帮助您配置群集或各个组件:
群集:基本群集设置。有关细节,请参见第 4 章 “使用 YaST 群集模块”。
DRBD:配置分布式复制块设备。
IP 负载平衡:使用 Linux 虚拟服务器或 HAProxy 配置负载平衡。有关细节,请参见第 17 章 “负载平衡”。
- Hawk2
您可以在 Linux 或非 Linux 计算机上使用用户友好的 Web 界面来监控和管理 High Availability 群集。可使用(图形)Web 浏览器从群集内外的任何计算机访问 Hawk2。因此,即便您使用的只是提供极简图形用户界面的系统,也能完美满足您的需求。有关详细信息,请参见第 5.4 节 “Hawk2 简介”。
crm
外壳强大的统一命令行界面,用于配置资源和执行所有监控或管理任务。有关细节,请参见第 5.5 节 “crmsh 简介”。
1.3 优势 #
使用 SUSE Linux Enterprise High Availability,您可以将多达 32 个 Linux 服务器配置成一个高可用性群集(HA 群集)。资源可在群集中的任何节点之间动态切换或移动。可以将资源配置为在发生节点故障时自动进行迁移,也可以手动移动资源以对硬件查错或平衡工作负载。
SUSE Linux Enterprise High Availability 能够提供商用组件的高可用性。通过将应用程序和操作合并到群集中降低了成本。SUSE Linux Enterprise High Availability 还允许您集中管理整个群集。您可以调整资源以满足不断变化的工作负载要求(即对群集进行手动“负载平衡”)。允许群集的多个(两个以上)节点共享一个“热备份”也节约了成本。
它还具有另一个同等重要的优点,就是能够潜在地减少计划外服务中断时间及用于软件和硬件维护和升级的计划内中断时间。
实施群集的理由包括:
提高可用性
改善性能
降低操作成本
可伸缩性
灾难恢复
数据保护
服务器合并
存储合并
通过在共享磁盘子系统上实施 RAID 可获得共享磁盘容错。
以下场景说明了 SUSE Linux Enterprise High Availability 可以提供的一些优势。
示例群集场景#
假设您配置了一个包含三个节点的群集,并在群集内的每个节点上安装了 Web 服务器。群集内的每个节点分别托管两个网站。每个网站的所有数据、图形和网页内容都存储在一个与群集中每个节点都连接的共享磁盘子系统上。下图说明了该系统的结构。
在正常群集操作期间,每个节点都会与群集内的其他节点保持通讯,并会对所有已注册资源执行定期轮询以检测是否有故障发生。
假设 Web 服务器 1 出现硬件或软件故障,而依赖此 Web 服务器访问因特网、收发电子邮件和获取信息的用户失去了连接。下图说明了当 Web 服务器 1 出现故障时,资源的移动情况。
网站 A 移至 Web 服务器 2,网站 B 移至 Web 服务器 3。IP 地址和证书也移至 Web 服务器 2 和 Web 服务器 3。
在配置群集时,您决定了在出现故障的情况下,每台 Web 服务器上的网站将移至哪里。在上例中,您已配置将网站 A 移至 Web 服务器 2,将网站 B 移至 Web 服务器 3。这样一来,原来由 Web 服务器 1 处理的工作负载仍可用,并将在所有仍然正常运作的群集成员之间均匀分布。
Web 服务器 1 发生故障时,High Availability 软件执行了下列操作:
检测到故障,并与 STONITH 确认 Web 服务器 1 确实已出现故障。STONITH 是“Shoot The Other Node In The Head”(关闭其他节点)的首字母缩写。它是一种关闭行为异常节点的方式,可防止这些节点在群集中引发问题。
将以前安装在 Web 服务器 1 上的共享数据目录重新安装在 Web 服务器 2 和 Web 服务器 3 上。
在 Web 服务器 2 和 Web 服务器 3 上重启动以前在 Web 服务器 1 上运行的应用程序。
将 IP 地址传送到 Web 服务器 2 和 Web 服务器 3。
在此示例中,故障转移过程迅速完成,用户在几秒钟之内就可以重新访问 Web 站点信息,而且通常无需重新登录。
现在,假设 Web 服务器 1 的故障已解决,它已恢复到正常工作状态。网站 A 和网站 B 可以自动故障回复(移回)至 Web 服务器 1,或者留在当前所在的服务器上。这取决于您是如何配置它们的资源的。将服务迁移回 Web 服务器 1 会造成一段时间停机。因此,SUSE Linux Enterprise High Availability 也允许您选择延迟迁移,等到只会产生短暂或不会产生服务中断时再进行迁移。这两种选择都各有优缺点。
SUSE Linux Enterprise High Availability 还提供资源迁移功能。您可以根据系统管理的需要将应用程序、网站等移到群集中的其他服务器上。
例如,您可以手动将网站 A 或网站 B 从 Web 服务器 1 移至群集内的其他任何一台服务器。此操作的用例包括,对 Web 服务器 1 进行升级或定期维护,或者提高网站的性能或可访问性。
1.4 群集配置:存储 #
使用 SUSE Linux Enterprise High Availability 的群集配置可能包括共享磁盘子系统,也可能不包括。共享磁盘子系统可通过高速光纤通道卡、电缆和交换机连接,也可配置为使用 iSCSI。如果有一个节点发生故障,群集中的另一个指定节点就会自动挂载之前挂载到故障节点上的共享磁盘目录。这样,网络用户就能继续访问共享磁盘子系统上的目录。
使用具有 LVM 的共享磁盘子系统时,必须将该子系统连接到群集中需要访问它的所有服务器。
典型的资源包括数据、应用程序和服务。下图显示典型光纤通道群集配置的可能构成。绿色线表示与以太网电源开关的连接。如此设备便可通过网络控制,并可在 ping 请求失败时重引导节点。
虽然光纤通道提供的性能最佳,但也可以将群集配置为使用 iSCSI。iSCSI 是除光纤通道外的另一种选择,可用于创建低成本的存储区域网络 (SAN)。下图显示了一个典型的 iSCSI 群集配置。
虽然大多数群集都包括共享磁盘子系统,但也可以创建不含共享磁盘子系统的群集。下图显示了一个不含共享磁盘子系统的群集。
1.5 体系结构 #
本节概述了 SUSE Linux Enterprise High Availability 体系结构。它提供了有关体系结构组件的信息,并描述了这些组件是如何协同工作的。
1.5.1 体系结构层 #
SUSE Linux Enterprise High Availability 具有分层体系结构。图 1.6 “体系结构”说明了不同的层及其相关的组件。
1.5.1.1 成员资格和消息交换层 (Corosync) #
此组件提供可靠的讯息交换、成员资格,以及有关群集的仲裁信息。相应的过程由 Corosync 群集引擎(一个组通讯系统)处理。
1.5.1.2 群集资源管理器 (Pacemaker) #
用作群集资源管理器的 Pacemaker 是对群集中所发生事件做出反应的“大脑”。它是作为 pacemaker-controld
实现的,即,协调所有操作的群集控制器。例如,节点加入或退出群集、资源故障,或者维护等安排的活动均为事件。
- 本地资源管理器
本地资源管理器位于每个节点上的 Pacemaker 层与资源层之间。它是作为
pacemaker-execd
守护程序实现的。通过此守护程序,Pacemaker 可以启动、停止和监控资源。- 群集信息数据库 (CIB)
Pacemaker 在每个节点上维护群集信息数据库 (CIB)。CIB 是群集配置的 XML 表示形式(包括群集选项、节点、资源、约束及其相互之间的关系)。CIB 也反映当前群集状态。每个群集节点包含一个在整个群集中同步的 CIB 复本。
pacemaker-based
守护程序会处理群集配置和状态的读取及写入。- 指定协调器 (DC)
DC 是从群集中的所有节点选择出来的。如果当前没有 DC,或者当前的 DC 出于任何原因退出群集,则就会按此方式选择 DC。DC 是群集中唯一可以决定需要在整个群集执行更改(例如节点屏蔽或资源移动)的实体。所有其他节点都从当前 DC 获取他们的配置和资源分配信息。
- 策略引擎
策略引擎在每个节点上运行,但 DC 上的引擎是活动的引擎。该引擎作为
pacemaker-schedulerd
守护程序实现。需要群集转换时,pacemaker-schedulerd
会根据当前状态和配置,计算群集的下一预期状态。它会确定需要安排哪些操作来实现下一种状态。
1.5.1.3 资源和资源代理 #
在 High Availability 群集中,需要高度可用的服务称为“资源”。资源代理 (RA) 是用于启动、停止和监控群集资源的脚本。
1.5.2 处理流程 #
pacemakerd
守护程序可启动并监控其他所有相关守护程序。用于协调所有操作的守护程序 pacemaker-controld
在每个群集节点上都有一个实例。Pacemaker 会选出其中一个实例作为主要实例,以此集中做出所有群集决策。如果选出的 pacemaker-controld
守护程序出现故障,则会建立一个新的主要守护程序。
群集中执行的许多操作都将导致整个群集的更改。这些操作包括添加或删除群集资源、更改资源约束等等。了解执行这样的操作时群集中会发生的状况是很重要的。
例如,假设您要添加一个群集 IP 地址资源。为此,可以使用 crm 外壳或 Web 界面来修改 CIB。不需要在 DC 上执行操作。您可以在群集中的任何节点上使用以上任一工具,更改将会中继到 DC。然后 DC 将把此 CIB 更改复制到所有群集节点。
随后 pacemaker-schedulerd
将根据 CIB 中的信息,计算群集的理想状态以及应如何达到该状态。它会将指令列表传递给 DC。DC 通过消息交换/基础架构层发送命令,这些命令将由其他节点上的 pacemaker-controld
对等体接收。每个对等体使用自身的本地资源代理执行器(作为 pacemaker-execd
实现)来执行资源修改。pacemaker-execd
不具有群集感知能力,它直接与资源代理交互。
所有同级节点将操作的结果报告给 DC。一旦 DC 得出所有必需操作在群集中都已成功执行的结论,群集将回到空闲状态并等待后续事件。如果有任何操作未按计划执行,则会再次调用 pacemaker-schedulerd
,CIB 中将记录新信息。
在某些情况下,可能需要关闭节点以保护共享数据或完成资源恢复。在 Pacemaker 群集中,节点级别屏蔽的实现为 STONITH。为此,Pacemaker 随附了一个屏蔽子系统 pacemaker-fenced
。必须将 STONITH 设备配置为群集资源(使用特定屏蔽代理的资源),因为这样便能监控屏蔽设备。当客户端检测到故障时,会将一个请求发送到 pacemaker-fenced
,后者再执行屏蔽代理来关闭节点。
2 系统要求和建议 #
下面的小节介绍 SUSE® Linux Enterprise High Availability 的系统要求和先决条件。此外,还提供了有关群集设置的建议。
2.1 硬件要求 #
以下列表指出了基于 SUSE® Linux Enterprise High Availability 的群集的硬件要求。这些要求表示最低硬件配置。根据群集的用途,可能会需要其他硬件。
- 服务器
安装了第 2.2 节 “软件需求”中指定的软件的 1 到 32 台 Linux 服务器。
服务器可以是裸机,也可以是虚拟机。两台服务器不需要使用相同的硬件(内存、磁盘空间等),但它们的体系结构必须相同。不支持跨平台群集。
使用
pacemaker_remote
可扩展群集使之突破 32 个节点的限制,包含更多的 Linux 服务器。- 通讯通道
每个群集节点至少有两个 TCP/IP 通讯媒体。网络设备必须支持您要用于群集通讯的通讯方式:多播或单播。通讯媒体应支持 100 Mbit/s 或更高的数据传送速度。对于支持的群集设置,要求有两个或更多冗余通讯路径。这可通过以下方式实现:
网络设备绑定(首选)
Corosync 中的另一个通讯通道
有关细节,请分别参见第 16 章 “网络设备绑定”和过程 4.3 “定义冗余通讯通道”。
- 节点屏蔽/STONITH
为了避免发生“节点分裂”情况,群集需要有节点屏蔽机制。在节点分裂情况下,群集节点会因硬件或软件故障或者网络连接中断而分割成两个或更多互不相识的组。而屏蔽机制会隔离存在问题的节点(通常的做法是重置该节点或关闭其电源)。这也称为 STONITH(“Shoot the other node in the head”,关闭其他节点)。节点屏蔽机制可以是物理设备(电源开关),也可以是 SBD(按磁盘 STONITH)等机制再结合检查包。使用 SBD 需要有共享存储。
除非使用了 SBD,否则 High Availability 群集中的每个节点都必须至少有一个 STONITH 设备。强烈建议每个节点上有多个 STONITH 设备。
重要:不支持无 STONITH 的配置您必须为群集配置节点屏蔽机制。
全局群集选项
stonith-enabled
和startup-fencing
必须设置为true
。如果您更改这些选项,将会失去支持。
2.2 软件需求 #
所有节点上至少需要安装以下模块和扩展:
Basesystem Module 15 SP6
Server Applications Module 15 SP6
SUSE Linux Enterprise High Availability 15 SP6
根据您在安装期间选择的系统角色,默认会安装以下软件集:
- HA 节点系统角色
High Availability (
sles_ha
)增强型基础系统 (
enhanced_base
)- HA GEO 节点系统角色
Geo Clustering for High Availability (
ha_geo
)增强型基础系统 (
enhanced_base
)
通过这些系统角色安装只能完成极简安装。如有必要,您可能需要手动添加更多软件包。
对于原先指派了另一个系统角色的计算机,您需要手动安装 sles_ha
或 ha_geo
软件集及所需的任何其他软件包。
2.3 存储要求 #
有些服务需要使用共享存储。如果使用外部 NFS 共享,必须能够从所有群集节点通过冗余通讯路径可靠地访问该共享。
为确保数据的高可用性,我们建议您为群集设置共享磁盘系统(存储区域网络,简称 SAN)。如果使用共享磁盘子系统,请确保符合以下要求:
根据制造商的说明正确设置共享磁盘系统并且共享磁盘系统可正确运行。
共享磁盘系统中包含的磁盘应配置为使用镜像或 RAID,来为共享磁盘系统增加容错性。
如果准备对共享磁盘系统访问使用 iSCSI,则请确保正确配置了 iSCSI 启动器和目标。
使用 DRBD* 实施在两台计算机间分发数据的镜像 RAID 系统时,请确保只访问 DRBD 提供的设备,切勿访问备份设备。要利用冗余,可以使用群集剩余组件中所用的相同 NIC。
如果使用 SBD 作为 STONITH 机制,则共享存储还需要满足其他要求。有关详细信息,请参见 第 13.3 节 “要求和限制”。
2.4 其他要求和建议 #
为了实现受支持且有用的高可用性设置,请考虑以下建议:
- 群集节点数
对于包含两个以上节点的群集,强烈建议使用奇数数目的群集节点,以便具有仲裁。有关仲裁的详细信息,请参见第 5.2 节 “仲裁判定”。一个常规群集最多只能包含 32 个节点。借助
pacemaker_remote
服务,可以将 High Availability 群集进行扩展,使其包含超出此限制的额外节点。请参见《Pacemaker 远程快速入门》获取更多细节。- 时间同步
群集节点必须同步到群集外的 NTP 服务器。自 SUSE Linux Enterprise High Availability 15 起,采用 chrony 作为 NTP 的默认实现方式。有关详细信息,请参见 Administration Guide for SUSE Linux Enterprise Server 15 SP6。
如果节点未同步,或者即使节点已同步但配置了不同的时区,群集也可能无法正常工作。此外,日志文件和群集报告在不进行同步的情况下也很难进行分析。如果使用引导脚本,而 NTP 尚未配置,则系统会提出警告。
- 网络接口卡 (NIC) 名称
必须在所有节点上都相同。
- 主机名和 IP 地址
使用静态 IP 地址。
只支持主 IP 地址。
在
/etc/hosts
文件中列出所有群集节点,包括各自的完全限定主机名和简短主机名。群集成员必须能够按名称找到彼此。如果名称不可用,则将无法进行群集内部通讯。有关 Pacemaker 如何获取节点名称的细节,请参见 https://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/s-node-name.html。
- SSH
所有群集节点都必须能通过 SSH 相互访问。
crm report
(用于查错)等工具和 Hawk2 的 要求节点之间通过无口令 SSH 方式来访问,否则它们只能从当前节点收集数据。如果使用引导脚本设置群集,系统会自动创建并复制 SSH 密钥。如果使用 YaST 群集模块设置群集,您必须自行配置 SSH 密钥。
注意:合规要求默认情况下,群集以
root
用户身份执行操作。如果无口令root
SSH 访问方式不符合法规要求,您可以将群集设置为具有sudo
特权的用户。此用户可以运行群集操作,包括crm report
。此外,如果无法将 SSH 密钥直接存储在节点上,可以改为通过 SSH 代理转发使用本地 SSH 密钥(如第 5.5.1 节 “登录”中所述)。
如果安全策略更为严格,您可以按第 D.1 节 “为非 root 用户配置受限的
sudo
权限”中所述,设置一个只拥有受限sudo
权限的非 root 用户来专门执行crm report
。对于
,目前还没有其他方式可替代无口令登录。
3 安装 SUSE Linux Enterprise High Availability #
如果您是首次使用 SUSE® Linux Enterprise High Availability 设置 High Availability 群集,最简单的方法就是从基本的双节点群集开始。您也可以使用双节点群集来运行一些测试。之后,您便可使用 AutoYaST 克隆现有的群集节点来添加更多节点。克隆的节点上会安装相同的包,并具有与原始节点相同的系统配置。
如果要升级运行较低版 SUSE Linux Enterprise High Availability 的现有群集,请参见第 29 章 “升级群集和更新软件包”。
3.1 手动安装 #
要手动安装 High Availability 软件包,请参见Article “安装和设置快速入门”。该指南会引导您完成基本双节点群集的设置。
3.2 使用 AutoYaST 进行批量安装和部署 #
安装并设置双节点群集后,您可以使用 AutoYaST 克隆现有节点并将克隆节点添加到群集,以便扩展群集。
AutoYaST 使用包含安装和配置数据的配置文件。配置文件会告知 AutoYaST 要安装的内容以及如何配置已安装系统,以最终获得一个现成可用的系统。然后可使用此配置文件以各种方式(例如,克隆现有群集节点)进行大批量部署。
有关在各种情况下如何使用 AutoYaST 的详细说明,请参见 AutoYaST Guide for SUSE Linux Enterprise Server 15 SP6。
过程 3.1 “使用 AutoYaST 克隆群集节点”假设您要将 SUSE Linux Enterprise High Availability 15 SP6 部署到硬件配置完全相同的一组计算机上。
如果您需要在不相同的硬件上部署群集节点,请参见《SUSE Linux Enterprise 15 SP6 部署指南》中“Automated Installation”一章的的“Rule-Based Autoinstallation”一节。
确保已正确安装和配置要克隆的节点。有关细节,请参见《安装和设置快速入门》或第 4 章 “使用 YaST 群集模块”。
按照《SUSE Linux Enterprise 15 SP6 部署指南》中的说明执行简单的批量安装。其中包括以下基本步骤:
创建 AutoYaST 配置文件。使用 AutoYaST GUI 基于现有系统配置创建和修改配置文件。在 AutoYaST 中选择
模块并单击 按钮。如果需要,调整其他模块中的配置,并将生成的控制文件另存为 XML 格式的文件。如果您已配置 DRBD,也可以在 AutoYaST GUI 中选择并克隆此模块。
确定 AutoYaST 配置文件的来源以及要传递到其他节点的安装例程的参数。
确定 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability 安装数据的来源。
确定并设置自动安装的引导方案。
通过手动添加参数或创建
info
文件,将命令行传递到安装例程。启动并监控自动安装进程。
成功安装克隆节点后,执行以下步骤将克隆节点加入群集中:
按第 4.7 节 “将配置传输到所有节点”中所述使用 Csync2 将密钥配置文件从已配置的节点传送到克隆节点。
要使节点上线,请按第 4.8 节 “使群集上线”中所述在克隆的节点上启动群集服务。
现在克隆的节点会加入群集,因为已通过 Csync2 将 /etc/corosync/corosync.conf
文件应用到克隆的节点。CIB 将在群集节点间自动同步。
4 使用 YaST 群集模块 #
YaST 群集模块可让您手动从头开始设置群集,或修改现有群集的选项。
不过,如果您希望采用自动方式设置群集,请参见Article “安装和设置快速入门”。该指南介绍了如何安装所需的软件包并会引导您创建基本的双节点群集,该群集是使用 crm 外壳提供的引导脚本设置的。
您还可结合使用这两种设置方法,例如,使用 YaST 群集设置一个节点,然后使用其中一个引导脚本集成更多节点(或反之)。
4.1 术语定义 #
下面定义了 YaST 群集模块和本章中使用的多个关键术语。
- 绑定网络地址 (
bindnetaddr
) Corosync 管理器应绑定的网络地址。为方便在群集间共享配置文件,Corosync 使用网络接口网络掩码来仅屏蔽用于路由网络的地址位。例如,如果本地接口是
192.168.5.92
并且网络掩码是255.255.255.0
,则bindnetaddr
将设置为192.168.5.0
。例如,如果本地接口是192.168.5.92
并且网络掩码是255.255.255.192
,则bindnetaddr
将设置为192.168.5.64
。如果在
/etc/corosync/corosync.conf
中明确配置了包含ringX_addr
的nodelist
,则不一定需要bindnetaddr
。注意:适用于所有节点的网络地址由于所有节点上都会使用相同的 Corosync 配置,请务必使用
bindnetaddr
之类的网络地址,不要使用特定网络接口地址。conntrack
工具可与内核内连接跟踪系统交互,以便对 iptables 启用有状态包检测。SUSE Linux Enterprise High Availability 使用它们在群集节点间同步连接状态。有关详细信息,请参见https://conntrack-tools.netfilter.org/。
- Csync2
可用于在群集中的所有节点间(甚至在 Geo 群集间)复制配置文件的同步工具。Csync2 可处理排入同步组的任意数量的主机。每个同步组都有自己的成员主机列表及其包含/排除模式,包含/排除模式定义了在同步组中应同步哪些文件。同步组、属于每个组的主机名以及每个组的包含/排除规则均在 Csync2 配置文件
/etc/csync2/csync2.cfg
中指定。对于身份验证,Csync2 使用 IP 地址和同步组中的预共享密钥。需要为每个同步组生成一个密钥文件,并将其复制到所有组成员。
有关 Csync2 的更多信息,请参见 https://oss.linbit.com/csync2/paper.pdf。
- 现有群集
术语“现有群集”指的是任何包括至少一个节点的群集。现有群集具有定义通讯通道的基本 Corosync 配置,但它们不一定已有资源配置。
- 多播
一种用于网络内一对多通讯的技术,可用于群集通讯。Corosync 支持多播和单播。
注意:交换机和多播要使用多播进行群集通讯,请确保交换机支持多播。
- 多播地址 (
mcastaddr
) Corosync 管理器使用 IP 地址进行多播。IP 地址可以为 IPv4 或 IPv6。如果使用 IPv6 网络,则必须指定节点 ID。可以使用专用网内的任何多播地址。
- 多播端口 (
mcastport
) 用于群集通讯的端口。Corosync 使用两个端口:用于接收多播的指定
mcastport
和用于发送多播的mcastport -1
。- Redundant Ring Protocol (RRP)
该协议支持使用多个冗余局域网来从部分或整体网络故障中恢复。这样,只要一个网络运行正常,群集通讯就仍可继续。Corosync 支持 Totem Redundant Ring Protocol。所有参与节点上都强制实施逻辑令牌传递环以确保可靠且有序地传递消息。只有拥有令牌的节点才允许广播消息。
在 Corosync 中定义了冗余通讯通道后,使用 RRP 告知群集如何使用这些接口。RRP 有三种模式 (
rrp_mode
):如果设置为
active
,则 Corosync 将主动使用这两个接口。但是,此模式已弃用。如果设置为
passive
,Corosync 将选择性地通过可用网络发送消息。如果设置为
none
,将会禁用 RRP。
- 单播
一种将消息发送到单个网络目标的技术。Corosync 支持多播和单播。在 Corosync 中,单播作为 UDP 单播 (UDPU) 实施。
4.2 YaST 模块 #
启动 YaST 并选择
› 。也可以从命令行启动模块:sudo yast2 cluster
下面的列表显示了 YaST 群集模块中可用屏幕的概述。它还指出了屏幕是否包含成功设置群集必需的参数,或其参数是否可选。
- 通讯通道(必需)
允许您定义用于在群集节点之间进行通讯的一个或两个通讯通道。对于传输协议,请使用多播 (UDP) 或单播 (UDPU)。有关细节,请参见第 4.3 节 “定义通讯通道”。
- 安全性(可选但建议使用)
允许您定义群集的身份验证设置。HMAC/SHA1 身份验证需要使用共享机密来保护和验证讯息。有关详细信息,请参见 第 4.4 节 “定义身份验证设置”。
- 配置 Csync2(可选但建议使用)
Csync2 将帮助您跟踪配置更改,并在群集节点之间保持文件同步。有关详细信息,请参见 第 4.7 节 “将配置传输到所有节点”。
- 配置 conntrackd(可选)
可让您配置用户空间
conntrackd
。使用 conntrack 工具为 iptables 进行有状态包检测。有关详细信息,请参见 第 4.5 节 “同步群集节点间的连接状态”。- 服务(必需)
允许您配置服务以使群集节点上线。定义是否在引导时启动群集服务,以及是否在防火墙中打开节点之间通讯所需的端口。有关详细信息,请参见 第 4.6 节 “配置服务”。
如果是首次启动群集模块,它会显示为向导,引导您完成进行基本设置所需的所有步骤。否则,请单击左侧面板上的类别,以访问每个步骤的配置选项。
YaST 群集模块中的特定设置仅适用于当前节点。其他设置可以通过 Csync2 自动传送到所有节点。可在以下各部分中找到有关此配置的详细信息。
4.3 定义通讯通道 #
为实现群集节点间的成功通讯,请定义至少一个通讯通道。对于传输协议,请分别按过程 4.1 或过程 4.2 中所述使用多播 (UDP) 或单播 (UDPU)。要定义另一个冗余通道(过程 4.3),这两个通讯通道必须使用相同的协议。
要在公有云平台中部署 SUSE Linux Enterprise High Availability,请使用单播作为传输协议。云平台本身在一般情况下并不支持多播。
YaST /etc/corosync/corosync.conf
中。/usr/share/doc/packages/corosync/
中提供了一些多播和单播设置的示例文件。
如果您使用的是 IPv4 地址,则节点 ID 可以选填。如果使用的是 IPv6 地址,则必须填写节点 ID。YaST 群集模块提供了一个自动为每个群集节点生成唯一 ID 的选项,用户无需手动为每个节点指定 ID。
使用多播时,将为所有群集节点使用相同的 mcastaddr
、bindnetaddr
和 mcastport
。通过使用相同的多播地址,群集中的所有节点可了解彼此的存在。对于不同的群集,请使用不同的多播地址。
启动 YaST 群集模块,然后切换到
类别。将
协议设为Multicast
。定义
。将此值设置为要用于群集多播的子网。定义
。定义
。要为每个群集节点自动生成唯一的 ID,请将
保留为启用状态。定义
。输入法定票数。默认情况下,每个节点有
。此值非常重要,Corosync 将使用它来为分区的群集计算1
张投票。 必须与群集中的节点数匹配。确认更改。
如果需要,请按过程 4.3 “定义冗余通讯通道”中所述在 Corosync 中定义冗余通讯通道。
要使用单播(而非多播)进行群集通讯,请按如下所述继续操作。
启动 YaST 群集模块,然后切换到
类别。将
协议设为Unicast
。定义
。对于单播通讯,Corosync 需要知道群集中所有节点的 IP 地址。对于每个节点,单击
并输入以下细节:要修改或删除群集成员的任何地址,请使用
或 按钮。要为每个群集节点自动生成唯一的 ID,请将
保留为启用状态。定义
。输入法定票数。默认情况下,每个节点有
。此值非常重要,Corosync 将使用它来为分区的群集计算1
张投票。 必须与群集中的节点数匹配。确认更改。
如果需要,请按过程 4.3 “定义冗余通讯通道”中所述在 Corosync 中定义冗余通讯通道。
如果由于任何原因不能使用网络设备绑定,第二个最佳选择就是在 Corosync 中定义冗余通讯通道(次环)。这样就可使用两个物理上分隔的网络进行通讯。如果一个网络发生故障,群集节点仍可通过另一个网络进行通讯。
Corosync 中的另一个通讯通道会形成另一个令牌传递环。在 /etc/corosync/corosync.conf
中,您配置的第一个通道就是主环,环编号为 0
。第二个环(冗余通道)的环编号为 1
。
在 Corosync 中定义了冗余通讯通道后,使用 RRP 告知群集如何使用这些接口。有了 RRP,就可以使用两个物理位置分开的网络进行通讯。如果一个网络发生故障,群集节点仍可通过另一个网络进行通讯。
RRP 可以有三种模式:
如果设置为
active
,则 Corosync 将主动使用这两个接口。但是,此模式已弃用。如果设置为
passive
,Corosync 将选择性地通过可用网络发送消息。如果设置为
none
,将会禁用 RRP。
/etc/hosts
如果 Corosync 中配置了多个环,则每个节点都可具有多个 IP 地址。这需要在所有节点的 /etc/hosts
文件中反映出来。
启动 YaST 群集模块,然后切换到
类别。请激活
。冗余通道必须使用与所定义的第一个通讯通道相同的协议。如果使用多播,请输入以下参数:要使用的
,冗余通道的 和 。如果使用单播,请定义以下参数:要使用的
及 。输入将加入群集的所有节点的 IP 地址。要告知 Corosync 如何以及何时使用其他通道,请选择要使用的
:如果只定义了一个通讯通道,
将自动禁用(值none
)。如果设置为
active
,则 Corosync 将主动使用这两个接口。但是,此模式已弃用。如果设置为
passive
,Corosync 将选择性地通过可用网络发送消息。
使用 RRP 时,SUSE Linux Enterprise High Availability 会监控当前环的状态,并在发生故障后自动重新启用冗余环。
或者,使用
corosync-cfgtool
手动检查环状态。使用-h
查看可用选项。确认更改。
4.4 定义身份验证设置 #
要定义群集的身份验证设置,您可以使用 HMAC/SHA1 身份验证。此方式需要使用共享机密来保护和验证讯息。指定的身份验证密钥(口令)将用于群集中的所有节点。
启动 YaST 群集模块,然后切换到
类别。激活
。对于新创建的群集,请单击
。系统会创建身份验证密钥并将其写入/etc/corosync/authkey
。如果希望当前计算机加入现有群集,则不用生成新的密钥文件。而是将
/etc/corosync/authkey
从一个节点复制到当前计算机(手动或使用 Csync2)。确认更改。YaST 会将此配置写入
/etc/corosync/corosync.conf
。
4.5 同步群集节点间的连接状态 #
要对 iptables 启用有状态包检测,请配置并使用 conntrack 工具。这需要以下基本步骤:
conntrackd
#
使用 YaST 群集模块配置用户空间 conntrackd
(请参见图 4.4 “YaST conntrackd
”)。这需要未用于其他通讯通道的专用网络接口。守护程序可随后通过资源代理启动。
—
启动 YaST 群集模块,然后切换到
类别。定义要用于同步连接状态的
。在
中,定义要与其同步连接状态的组的数字 ID。单击
来创建conntrackd
的配置文件。如果修改了现有群集的任何选项,请确认更改并关闭群集模块。
有关进一步群集配置,请单击第 4.6 节 “配置服务”。
并继续选择
来同步连接状态。会自动检测所选接口的 IPv4 地址并显示在 YaST 中。该地址必须已经配置并且必须支持多播。
conntrackd
— #配置 conntrack 工具后,可对 Linux 虚拟服务器使用这些工具(请参见负载平衡)。
4.6 配置服务 #
在 YaST 群集模块中,定义是否在引导节点时启动其上的特定服务。也可使用模块手动启动和停止服务。为使群集节点上线并启动群集资源管理器,Pacemaker 必须作为服务运行。
在 YaST 群集模块中,切换到
类别。要在每次引导此群集节点时启动群集服务,请在
组中选择相应选项。如果在 组中选择 ,那么每次引导此节点时,都必须手动启动群集服务。要手动启动群集服务,请使用以下命令:#
crm cluster start
要立即启动或停止群集服务,请单击相应按钮。
要在防火墙中打开所需的端口以在当前计算机上进行群集通讯,请激活
。确认更改。请注意,该配置仅应用于当前计算机,而不是所有群集节点。
4.7 将配置传输到所有节点 #
如果不想将生成的配置文件手动复制到所有节点,可使用 csync2
工具在群集中的所有节点间进行复制。
这需要以下基本步骤:
Csync2 将帮助您跟踪配置更改,并在群集节点之间保持文件同步。
可以定义对操作至关重要的文件列表。
可以显示这些文件的更改(对于其他群集节点)。
可以使用单个命令同步配置的文件。
使用
~/.bash_logout
中的一个简单外壳脚本,您可以在从系统注销之前收到更改未同步的提醒。
https://oss.linbit.com/csync2/ 和 https://oss.linbit.com/csync2/paper.pdf 上提供了有关 Csync2 的详细信息。
4.7.1 使用 YaST 配置 Csync2 #
启动 YaST 群集模块,然后切换到
类别。要指定同步组,请在
组中单击 ,然后输入群集中所有节点的本地主机名。对于每个节点,必须使用hostname
命令返回的确切字符串。提示:主机名解析如果您的网络中无法正常进行主机名解析,您也可以为每个群集节点指定主机名与 IP 地址的组合。要执行此操作,请使用字符串 HOSTNAME@IP,例如
alice@192.168.2.100
。这样 Csync2 便会在连接时使用该 IP 地址。单击
以创建同步组的密钥文件。密钥文件会写入/etc/csync2/key_hagroup
。创建后,必须将其手动复制到群集的所有成员。要使用通常需要在所有节点间同步的文件填充
列表,请单击 。要在待同步的文件列表中
、 或 文件,请使用相应按钮。必须输入每个文件的绝对路径。通过单击
激活 Csync2。此操作会执行以下命令,以在引导时自动启动 Csync2:#
systemctl enable csync2.socket
单击
。YaST 会将 Csync2 配置写入/etc/csync2/csync2.cfg
。
4.7.2 使用 Csync2 同步更改 #
首次运行 Csync2 前,需要执行以下准备工作:
按照第 4.7.1 节 “使用 YaST 配置 Csync2”所述配置
/etc/csync2/csync2.cfg
后,手动将该文件复制到所有节点。将您执行第 4.7.1 节 的步骤 3 时在一个节点上生成的
/etc/csync2/key_hagroup
文件复制到群集中的所有节点。它是 Csync2 在进行身份验证时需要使用的文件。但请勿在其他节点上重新生成该文件,因为所有节点上的文件都必须相同。在所有节点上执行以下命令,以便立即启动服务:
#
systemctl start csync2.socket
要对所有文件执行一次初始同步,请在要从中复制配置的计算机上执行以下命令:
#
csync2 -xv
这会将文件推送到其他节点,从而一次同步所有文件。如果成功同步了所有文件,Csync2 完成时不会显示任何错误。
如果在其他节点(不只是当前节点)上对要同步的一个或多个文件进行了修改,Csync2 会显示类似以下消息的输出来报告存在冲突:
While syncing file /etc/corosync/corosync.conf: ERROR from peer hex-14: File is also marked dirty here! Finished with 1 errors.
如果确信当前节点上的文件版本是“最佳”版本,可以通过强制使用此文件并重新同步来解决冲突:
#
csync2 -f /etc/corosync/corosync.conf
#
csync2 -x
有关 Csync2 选项的更多信息,请运行
#
csync2 -help
Csync2 仅推送更改。它不会在计算机之间连续同步文件。
每次更新应同步的文件时,都需要在您进行了更改的计算机上运行 csync2
-xv
,来将更改推送到其他计算机。如果在文件未更改的任何其他计算机上运行此命令,系统不会执行任何操作。
4.8 使群集上线 #
完成初始群集配置后,启动所有群集节点上的群集服务,以使堆栈上线:
登录到现有节点。
启动所有群集节点上的群集服务:
#
crm cluster start --all
此命令要求节点之间使用无口令 SSH。如果未配置无口令 SSH,则必须单独登录每个节点并运行
crm cluster start
。使用
crm status
命令检查群集状态。如果所有节点都已上线,则输出应类似于如下内容:#
crm status Cluster Summary: * Stack: corosync * Current DC: alice (version ...) - partition with quorum * Last updated: ... * Last change: ... by hacluster via crmd on bob * 2 nodes configured * 1 resource instance configured Node List: * Online: [ alice bob ] ...此输出表示群集资源管理器已启动,可以管理资源了。
完成基本配置并且节点上线后,可以开始配置群集资源。使用其中一种群集管理工具,例如 crm 外壳 (crmsh) 或 Hawk2。有关更多信息,请参见第 5.4 节 “Hawk2 简介”或第 5.5 节 “crmsh 简介”。
第 II 部分 配置和管理 #
- 5 配置和管理基础知识
HA 群集的主要目的是管理用户服务。Apache Web 服务器或数据库便是一种典型的用户服务。从用户角度来看,服务就是在客户的要求下执行某些操作。但对群集来说,服务只是可以启动或停止的资源,其本质与群集无关。
本章将介绍一些管理群集时需要了解的基本概念。以下章节介绍如何使用 SUSE Linux Enterprise High Availability 提供的各种管理工具执行主要的配置和管理任务。
- 6 配置群集资源
作为群集管理员,您需要在群集中为服务器上运行的每个资源或应用程序创建群集资源。群集资源可能包括网站、电子邮件服务器、数据库、文件系统、虚拟机,以及您希望用户随时都可以访问的任何其他基于服务器的应用程序或服务。
- 7 配置资源约束
配置好所有资源只是完成了该任务的一部分。即便群集知道所有需要的资源,也可能无法正确处理这些资源。使用资源约束可指定能在哪些群集节点上运行资源、以何顺序加载资源,以及特定资源依赖于其他哪些资源。
- 8 管理群集资源
配置群集中的资源后,可使用群集管理工具启动、停止、清理、去除或迁移资源。本章介绍如何使用 Hawk2 或 crmsh 执行资源管理任务。
- 9 管理远程主机上的服务
在最近几年中,是否能够监控和管理远程主机上的服务已变得越来越重要。SUSE Linux Enterprise High Availability 11 SP3 提供了通过监控插件监控远程主机上的服务的精细功能。最近添加的
pacemaker_remote
服务现在可让 SUSE Linux Enterprise High Availability 15 SP6 全面管理和监控远程主机上的资源,就如同这些资源是真实的群集节点一样 — 而您无需在远程计算机上安装群集堆栈。- 10 添加或修改资源代理
需由群集管理的所有任务都必须可用作资源。需要考虑两个主要的组:资源代理和 STONITH 代理。对于这两个类别,您都可以添加自己的代理,根据需要扩展群集的功能。
- 11 监控群集
本章介绍如何监控群集的健康状况并查看其历史记录。
- 12 屏障和 STONITH
屏蔽在 HA(高可用性)计算机群集中是一个非常重要的概念。群集有时会检测到某个节点行为异常,需要删除此节点。这称为屏蔽,通常使用 STONITH 资源实现。屏蔽可以定义为一种使 HA 群集具有已知状态的方法。
群集中的每个资源均带有状态。例如:“资源 r1 已在 alice 上启动”。在 HA 群集中,这种状态暗示了“资源 r1 在除 alice 外的所有节点上都处于停止状态”,因为群集必须确保每个资源只能在一个节点上启动。每个节点都必须报告资源发生的每个更改。这样群集状态就是资源状态和节点状态的集合。
当节点或资源的状态无法十分肯定地确立时,将进行屏蔽。即使在群集未感知到给定节点上发生的事件时,屏蔽也可确保此节点不会运行任何重要资源。
- 13 存储保护和 SBD
SBD(STONITH 块设备)通过共享块存储(SAN、iSCSI、FCoE 等)进行消息交换来为基于 Pacemaker 的群集提供节点屏蔽机制。此方法可以将屏蔽机制隔离开来,使其不受固件版本更改的影响或不依赖于特定固件控制器。SBD 需要在每个节点上安装一个检查包,以确保能确实停止行为异常的节点。在某些情况下,还可以通过无磁盘模式运行 SBD,以便使用不含共享存储的 SBD。
群集引导脚本提供了一种自动设置群集的方式,并可让您选择使用 SBD 作为屏蔽机制。有关详细信息,请参见Article “安装和设置快速入门”。但是,手动设置 SBD 可为您提供个别设置的更多选项。
本章介绍 SBD 背后的概念。它将指导您完成 SBD 所需组件的配置,防止您的群集在发生节点分裂情况下出现可能的数据损坏。
除了节点级别屏蔽,您还可以使用额外的存储保护机制,例如 LVM 排它激活或 OCFS2 文件锁定支持(资源级别屏蔽)。它们可以保护您的系统,以防出现管理或应用程序故障。
- 14 QDevice 和 QNetd
QDevice 和 QNetd 会参与仲裁决定。在仲裁方
corosync-qnetd
的协助下,corosync-qdevice
会提供一个可配置的投票数,以使群集可以承受大于标准仲裁规则所允许的节点故障数量。我们建议您对节点数为偶数的群集(特别是双节点群集)部署corosync-qnetd
和corosync-qdevice
。- 15 访问控制列表
crm 外壳 (crmsh) 或 Hawk2 等群集管理工具可由
root
用户或haclient
组内的任何用户使用。默认情况下,这些用户具有完全读/写访问权。要限制访问权或指派更加细化的访问权限,可以使用访问控制列表 (ACL)。访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。
- 16 网络设备绑定
对于许多系统,需要实施高于典型以太网设备的标准数据安全性或可用性要求的网络连接。在这些情况下,可以将多个以太网设备聚合到单个绑定设备。
- 17 负载平衡
在负载平衡的情况下,服务器群集对于外部客户端而言就如同是一台大型的快速服务器。这种看上去像是单台服务器的服务器被称为虚拟服务器。它包括一个或多个用于调度传入请求的负载平衡器,以及若干台运行实际服务的真实服务器。有了 SUSE Linux Enterprise High Availability 负载平衡设置,您就可以构建高度可伸缩且高度可用的网络服务,例如 Web、缓存、邮件、FTP、媒体和 VoIP 服务。
- 18 虚拟化的高可用性
本章介绍如何将虚拟机配置为高度可用的群集资源。
- 19 Geo 群集(多站点群集)
除本地群集和城域群集外,SUSE® Linux Enterprise High Availability 15 SP6 还支持地理位置分散的群集(Geo 群集,有时也称为多站点群集)。这意味着,每个本地群集可以有多个地域分散的站点。这些群集之间的故障转移由更高级的实体、所谓的
booth
进行协调。有关如何使用和设置 Geo 群集的详细信息,请参见Article “Geo 群集快速入门”和Book “Geo 群集指南”。
5 配置和管理基础知识 #
HA 群集的主要目的是管理用户服务。Apache Web 服务器或数据库便是一种典型的用户服务。从用户角度来看,服务就是在客户的要求下执行某些操作。但对群集来说,服务只是可以启动或停止的资源,其本质与群集无关。
本章将介绍一些管理群集时需要了解的基本概念。以下章节介绍如何使用 SUSE Linux Enterprise High Availability 提供的各种管理工具执行主要的配置和管理任务。
5.1 使用情形 #
群集通常分为以下两类:
双节点群集
包含两个以上节点的群集。这通常表示节点数是奇数。
添加不同的拓扑可以衍生不同的用例。下面是最常见的用例:
- 位于一个位置的双节点群集
配置:FC SAN 或类似的共享存储,第 2 层网络。
使用情形:嵌入式群集,注重服务的高可用性,而不是实现数据冗余来进行数据复制。例如,此类设置可用于无线电台或装配生产线控制器。
- 位于两个位置的双节点群集(使用最广泛)
配置:对称的延伸群集,FC SAN,以及跨两个位置的第 2 层网络。
使用情形:典型的延伸群集,注重服务的高可用性和本地数据冗余。用于数据库和企业资源规划。最常用的设置之一。
- 位于三个位置的奇数数目的节点
配置:2×N+1 个节点,FC SAN 跨两个主要位置第三个辅助站点不部署 FC SAN,而是充当多数仲裁者。第 2 层网络至少跨两个主要位置。
使用情形:典型的延伸群集,注重服务的高可用性和数据冗余。例如数据库和企业资源规划。
5.2 仲裁判定 #
当一个或多个节点与群集的剩余节点之间的通讯失败时,即会发生群集分区。这些节点只能与同一分区中的其他节点通讯,并不知道被隔开的节点的存在。如果群集分区具有多数节点(或投票),则将其定义为具有仲裁(是“具有法定票数的”)。通过仲裁计算来获得此结果。要实现屏蔽,就必须具有仲裁。
仲裁不是由 Pacemaker 计算或确定。Corosync 可以直接处理双节点群集的仲裁,无需更改 Pacemaker 配置。
仲裁计算方式受以下因素的影响:
- 群集节点数
为使服务保持运行状态,包含两个以上节点的群集依赖法定票数(多数票决)来解决群集分区。根据以下公式,您可以计算群集正常运行所需的最小工作节点数目:
N ≥ C/2 + 1 N = minimum number of operational nodes C = number of cluster nodes
例如,五节点群集至少需要三个工作节点(或两个可以故障转移的节点)。
我们强烈建议使用双节点群集或奇数数目的群集节点。双节点群集适合跨两个站点的延伸设置。所含节点数为奇数的群集可以构建于单个站点上,也可以分散在三个站点之间。
- Corosync 配置
Corosync 是一个讯息交换和成员资格层,具体请参见第 5.2.1 节 “双节点群集的 Corosync 配置”和第 5.2.2 节 “N 节点群集的 Corosync 配置”。
5.2.1 双节点群集的 Corosync 配置 #
使用引导脚本时,Corosync 配置包含一个 quorum
段落,其中包含以下选项:
quorum { # Enable and configure quorum subsystem (default: off) # see also corosync.conf.5 and votequorum.5 provider: corosync_votequorum expected_votes: 2 two_node: 1 }
如果设置了 two_node: 1
,默认会自动启用 wait_for_all
选项。如果未启用 wait_for_all
,则群集应在两个节点上并行启动。否则,第一个节点会对缺失的第二个节点执行启动屏蔽。
5.2.2 N 节点群集的 Corosync 配置 #
如果不使用双节点群集,我们强烈建议使用奇数数目的节点来构成 N 节点群集。在仲裁配置方面,您有以下选择:
使用
crm cluster join
命令添加更多的节点,或手动调整 Corosync 配置。
如果要手动调整 /etc/corosync/corosync.conf
,请使用以下设置:
quorum { provider: corosync_votequorum 1 expected_votes: N 2 wait_for_all: 1 3 }
5.3 全局群集选项 #
全局群集选项控制群集在遇到特定情况时的行为方式。它们被分成若干组,可通过 Hawk2 和 crm
外壳等群集管理工具来查看和修改。
通常可保留预定义值。但为了使群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:
5.3.1 全局选项 no-quorum-policy
#
此全局选项定义在群集分区不具有法定票数(分区不具有多数节点投票)时应执行的操作。
可用值如下:
ignore
如果将
no-quorum-policy
设为ignore
,群集分区就会像其具有仲裁一样工作,即使情况并非如此。群集分区可以发出屏蔽命令,并继续进行资源管理。在 SLES 11 中,建议对双节点群集使用此设置。从 SLES 12 开始,
ignore
值已过时,不允许使用。Corosync 依据配置和条件为群集节点或单个节点提供“仲裁” — 或者不提供仲裁。对于双节点群集,当节点发生故障时,唯一有意义的行为就是始终做出反应。第一个步骤始终应该是尝试屏蔽丢失的节点。
freeze
如果失去法定票数,群集分区将会冻结。资源管理会继续:正在运行的资源不会停止(但可能会因监控事件而重启动),但受影响分区中不会再启动其他资源。
如果群集中的某些资源依赖于与其他节点的通讯(例如,OCFS2 挂载),建议对此类群集使用此设置。在这种情况下,默认设置
no-quorum-policy=stop
不起作用,因为它将导致以下状况:既无法停止这些资源,又无法连接对等节点。任何停止资源的尝试最终都会超时,并出现stop failure
,触发升级的恢复和屏蔽。stop
(默认值)如果失去法定票数,受影响群集分区中的所有资源都将以一种有序的方式停止。
suicide
如果失去法定票数,受影响群集分区中的所有节点都将被屏蔽。此选项只能与 SBD 结合使用,具体请参见第 13 章 “存储保护和 SBD”。
5.3.2 全局选项 stonith-enabled
#
此全局选项定义是否要应用屏蔽,以允许 STONITH 设备关闭发生故障的节点以及无法停止其资源的节点。默认情况下,此全局选项设置为 true
,因为对于常规的群集操作,有必要使用 STONITH 设备。根据默认值,如果未定义 STONITH 资源,群集会拒绝启动任何资源。
如果出于任何原因而需要禁用屏蔽,请将 stonith-enabled
设置为 false
,但请注意,这会影响产品的支持状态。此外,在 stonith-enabled="false"
的情况下,分布式锁管理器 (DLM) 等资源以及依赖于 DLM 的所有服务(例如 lvmlockd、GFS2 和 OCFS2)都将无法启动。
不支持无 STONITH 资源的群集。
5.4 Hawk2 简介 #
要配置和管理群集资源,请使用 Hawk2 或 crm 外壳 (crmsh) 命令行实用程序。
Hawk2 的用户友好 Web 界面可让您从 Linux 或非 Linux 计算机监控和管理 High Availability 群集。可使用(图形)Web 浏览器从群集内外的任何计算机访问 Hawk2。
5.4.1 Hawk2 要求 #
仅当系统满足以下要求后,用户才能登录 Hawk2:
- hawk2 软件包
要使用 Hawk2 连接的所有群集节点上都必须安装 hawk2 软件包。
- Web 浏览器
在要使用 Hawk2 访问群集节点的计算机上,需要安装启用了 JavaScript 和 Cookie 的(图形)Web 浏览器才能建立连接。
- Hawk2 服务
要使用 Hawk2,必须在要通过 Web 界面连接到的节点上启动相应的 Web 服务。请参见过程 5.1 “启动 Hawk2 服务”。
如果您已使用 crm 外壳提供的引导脚本设置群集,那么此时 Hawk2 服务已启用。
- 每个群集节点上的用户名、组和口令
Hawk2 用户必须是
haclient
组的成员。安装程序将创建名为hacluster
的 Linux 用户,该用户将添加到haclient
组中。使用
crm cluster init
脚本进行设置时,将为hacluster
用户设置默认口令。在启动 Hawk2 之前,请将它更改为安全口令。如果您未使用crm cluster init
脚本,请先为hacluster
设置口令,或者创建属于haclient
组的新用户。请在要使用 Hawk2 连接的所有节点上执行此操作。- 通配符证书处理
通配符证书是指对多个子域有效的公共密钥证书。例如,
*.example.com
的通配符证书可以保障login.example.com
、www.example.com
等域的安全。Hawk2 支持通配符证书及可转换证书。
/srv/www/hawk/bin/generate-ssl-cert
可生成自我签名的默认私用密钥和证书。要使用您自己的证书(可转换或通配符证书),请将生成的证书(位于
/etc/ssl/certs/hawk.pem
处)替换为您自己的证书。
在要连接的节点上,打开外壳并以
root
用户身份登录。通过输入以下命令,检查服务的状态
#
systemctl status hawk
如果服务未在运行,请使用以下命令启动服务
#
systemctl start hawk
如果希望 Hawk2 在引导时自动启动,请执行以下命令:
#
systemctl enable hawk
5.4.2 登录 #
Hawk2 Web 界面使用 HTTPS 协议和端口 7630
。
您无需使用 Hawk 登录个别群集节点,而是可以将一个浮动的虚拟 IP 地址(IPaddr
或 IPaddr2
2)配置为群集资源。该地址无需任何特殊配置。如此,无论 Hawk 服务在哪个物理节点上运行,客户端都可以连接到该服务。
在使用 crm 外壳提供的引导脚本设置群集时,系统会询问您是否配置虚拟 IP 以用于群集管理。
在任一台计算机上,启动 Web 浏览器并输入以下 URL:
https://HAWKSERVER:7630/
使用运行 Hawk Web 服务的任何群集节点的 IP 地址或主机名替换 HAWKSERVER。如果已配置虚拟 IP 地址以使用 Hawk2 进行群集管理,请使用该虚拟 IP 地址替换 HAWKSERVER。
注意:证书警告当您首次尝试访问 URL 时如果显示证书警告,则表示使用了自我签名证书。默认情况下,自我签名证书不被视为可信证书。
要校验证书,请联系群集操作员获取证书细节。
要继续,可在浏览器中添加例外,以绕过警告。
有关如何将自我签名证书替换为官方证书颁发机构签名的证书的信息,请参见替换自我签名证书。
在 Hawk2 登录屏幕上,输入
hacluster
用户(或属于haclient
组的任何其他用户)的 和 。单击
。
5.4.3 Hawk2 概述:主要元素 #
登录 Hawk2 后,左侧会显示一个导航栏,右侧会显示一个顶层行,其中包含若干链接。
默认情况下,以 root
或 hacluster
身份登录的用户对所有群集配置任务具有完全读写访问权。不过,使用访问控制列表 (ACL) 可以定义细化的访问权限。
如果在 CRM 中启用了 ACL,Hawk2 中的可用功能取决于用户角色和指派给这些角色的访问权限。Hawk2 中的hacluster
来执行。
5.4.3.2 顶层行 #
Hawk2 的顶层行显示以下条目:
- :单击可切换到批模式。可用于模拟和分阶段进行更改并通过单次事务应用这些更改。有关详细信息,请参见
5.4.4 配置全局群集选项 #
全局群集选项控制群集在遇到特定情况时的行为方式。它们被分成若干组,可通过 Hawk2 和 crmsh 之类的群集管理工具来查看和修改。通常可保留预定义值。但为了确保群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。要在屏幕右侧显示参数的简要描述,请将光标悬停在该参数上。
图 5.1︰ Hawk2 - 群集配置 #检查
和 的值并根据需要进行调整。- 设置为合适的值。有关详细信息,请参见
如果出于某些原因需要禁用屏蔽,请将
设置为no
。默认情况下,该参数设置为true
,因为执行常规的群集操作必须要使用 STONITH 设备。根据默认值,如果未配置 STONITH 资源,群集会拒绝启动任何资源。重要:不支持无 STONITH 的配置您必须为群集配置节点屏蔽机制。
全局群集选项
stonith-enabled
和startup-fencing
必须设置为true
。如果您更改这些选项,将会失去支持。
要从群集配置中去除某个参数,请单击该参数旁边的
图标。如果删除了某个参数,群集会将该参数视为采用了默认值。要向群集配置添加新参数,请从下拉框中选择一个参数。
如果您需要更改
或 ,请执行以下步骤:要调整某个值,请从下拉框中选择一个不同的值,或直接编辑该值。
要添加新的资源默认值或操作默认值,请从空下拉框中选择一项,然后输入值。如果有默认值,Hawk2 会自动建议这些值。
要去除某个参数,请单击该参数旁边的第 6.12 节 “资源选项(元属性)”和第 6.14 节 “资源操作”中所述的默认值。
图标。如果没有为 和 指定值,群集会使用
确认更改。
5.4.5 显示当前群集配置 (CIB) #
群集管理员有时需要知道群集配置。Hawk2 可以 crm 外壳语法、XML 和图表形式显示当前配置。要查看 crm 外壳语法形式的群集配置,请从左侧导航栏中选择
› ,并单击 。要改为以原始 XML 显示配置,请单击 。单击 会以图表显示 CIB 中配置的节点和资源。它还会显示各资源之间的关系。5.4.6 使用向导添加资源 #
Hawk2 向导是设置简单资源(如虚拟 IP 地址或 SBD STONITH 资源)的便捷方式。对于包含多个资源的复杂配置(例如 DRBD 块设备或 Apache Web 服务器的资源配置)而言,这种方法也十分有用。向导会引导您完成所有配置步骤,并提供您需要输入的参数的相关信息。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。单击各个类别旁边的向下箭头图标将其展开,然后选择所需的向导。
按照屏幕指导执行操作。完成最后的配置步骤后,
您所输入的值。Hawk2 会显示它将执行的操作以及配置的最终成果。根据配置,您可能会收到提示要求输入
root
口令才能 配置。
有关详细信息,请参见第 6 章 “配置群集资源”。
5.4.7 使用批模式 #
Hawk2 提供群集模拟器。该模式可用于以下操作:
,包括对群集进行分阶段更改并通过单次事务应用这些更改,而不是让每项更改立即生效。
模拟更改和群集事件,例如,了解可能失败的情况。
例如,在创建相互依赖的资源组时,可以使用批模式。通过使用批模式,您可以避免将中间或不完整的配置应用到群集。
启用批模式后,您可以添加或编辑资源和约束,或更改群集配置。此外,还可以模拟群集中的事件,包括变为上线或下线的节点、资源操作,以及要授予或撤消的票据。有关详细信息,请参见 过程 5.6 “插入节点、资源或票据事件”。
群集模拟器会在每次更改后自动运行,并在用户界面上显示预期效果。举例而言,这还意味着当您在批模式下停止某资源时,用户界面上会将该资源显示为已停止,但实际上,该资源仍在运行中。
某些向导包含除纯群集配置以外的其他操作。在批模式下使用这些向导时,群集配置以外的任何其他更改都将立即应用到在线系统。
因此,需要 root
权限的向导无法在批模式下执行。
登录 Hawk2:
https://HAWKSERVER:7630/
要激活批模式,请从顶层行选择
。顶层行下方即会另外显示一栏,指出批模式处于活动状态,且包含指向您可在批模式下执行的操作的链接。
图 5.3︰ Hawk2 批模式已激活 #当批模式处于活动状态时,对群集执行任意更改,例如添加或编辑资源和约束,或编辑群集配置。
系统将会模拟更改,并将其显示在所有屏幕上。
要查看所做更改的细节,请从批模式栏中选择
。 窗口即会打开。对于任何配置更改,该模式会以 crmsh 语法显示实时状态与模拟更改之间的差异:以
-
字符开头的行表示当前状态,而以+
开头的行显示的是预期状态。要插入事件或查看更多细节,请参见过程 5.6。否则请 窗口。
选择
或 模拟的更改,并确认您的选择。此操作还会停用批模式,使您回到正常模式。
在批模式下运行时,Hawk2 还允许您插入
和 。可让您更改节点的状态。可用的状态有
、 和 。可让您更改资源的一些属性。例如,您可以设置操作(如
monitor
、start
、stop
)、操作要应用到的节点,以及要模拟的预期结果。可让您测试授予和撤消票据(用于 Geo 群集)的影响。
登录 Hawk2:
https://HAWKSERVER:7630/
如果批模式未启动,请单击顶层行上的
切换到批模式。在批模式栏中,单击
打开 窗口。要模拟节点的状态更改:
单击
› 。选择要操作的
,然后选择其目标 。确认更改。您的事件便会添加到
对话框中所列的事件队列中。
模拟资源操作:
单击
› 。选择要操作的
和要模拟的 。如果必要,请定义
。选择要运行操作的
及目标 。您的事件便会添加到 对话框中所列的事件队列中。确认更改。
要模拟票据操作,请执行以下操作:
单击
› 。依次选择要操作的
和要模拟的 。确认更改。您的事件便会添加到
对话框中所列的事件队列中。
图 5.4)会为每个插入的事件显示新的一行。此处列出的所有事件都会立即被模拟并反映到 屏幕上。
对话框(如果您还执行了任何配置更改,在线状态和模拟更改之间的差异会显示在所插入事件的下方。
图 5.4︰ Hawk2 批模式 - 插入的事件和配置更改 #要去除插入的事件,请单击该事件旁边的
图标。Hawk2 会相应地更新 屏幕。要查看模拟运行的更多细节,请单击
并选择以下选项之一:显示详细的摘要。
- /
显示转换的图形表示形式。
显示转换的 XML 表示形式。
如果您已审阅模拟的更改,请关闭
窗口。要退出批模式,请
或 模拟的更改。
5.5 crmsh 简介 #
要配置和管理群集资源,可以使用 crm 外壳 (crmsh) 命令行实用程序或 Hawk2(基于 Web 的用户界面)。
本节介绍命令行工具 crm
。crm
命令有多个子命令,用于管理资源、CIB、节点和资源代理等对象。它提供了全面的帮助系统,并嵌入了示例。所有示例都遵循附录 B 中所述的命名约定。
事件记录到 /var/log/crmsh/crmsh.log
中。
使用不带参数(或只带一个 sublevel 参数)的 crm,crm 外壳将进入交互式模式。此模式由以下提示符指示:
crm(live/HOSTNAME)
为了容易阅读,我们的文档在交互式 crm 提示符中省略了主机名。仅当您需要在特定的节点(如 alice)上运行交互式外壳时,才包含主机名,例如:
crm(live/alice)
5.5.1 登录 #
管理群集需要有充足的权限。以下用户可以运行 crm
命令及其子命令:
root
用户或具有sudo
特权的用户。这些用户通过使用 SSH 执行 crmsh 操作(例如crm cluster init
、crm cluster join
和crm report
)拥有所有群集节点的完整权限。他们还可以对 CIB 进行更改,例如添加资源和约束。CRM 所有者用户(通常是在群集安装期间默认创建的用户
hacluster
)。此用户可以对 CIB 进行更改,但执行使用 SSH 的操作(例如crm report
)的权限受到限制。提示:非特权用户使用
user
选项,您能以普通(非特权)用户身份运行crm
及其子命令,而且必要时能使用sudo
更改其 ID。例如,下面的命令会将hacluster
设置为特权用户 ID:#
crm options user hacluster
必须设置
/etc/sudoers
,这样sudo
就不会要求提供口令。
对于使用 SSH 的操作,群集使用无口令 SSH 访问方式在节点之间进行通讯。如果使用 crm cluster init
设置群集,脚本会检查 SSH 密钥是否存在,如果尚不存在,则会生成这些密钥。如果使用 YaST 群集模块设置群集,您必须自行配置 SSH 密钥。
在大多数情况下,root
或 sudo
用户的 SSH 密钥必须存在于节点上(或在其上生成)。或者,sudo
用户的 SSH 密钥可以存在于本地计算机上,并通过 SSH 代理转发传递到节点。如果您需要避免在节点上存储 SSH 密钥,此方法可能很有用,不过这需要进行额外的配置。
在本地计算机上,启动 SSH 代理并为其添加密钥。有关详细信息,请参见 SUSE Linux Enterprise Server 的《Security and Hardening Guide》中的 Automated public key logins with ssh-agent。
以具有
sudo
特权的用户身份登录到第一个群集节点,并使用-A
选项启用 SSH 代理转发:user@local >
ssh -A USER@NODE1
使用
crm cluster init
脚本初始化群集:user@node1 >
sudo --preserve-env=SSH_AUTH_SOCK \
1crm cluster init --use-ssh-agent
2初始配置完成后,退出第一个节点并使用
-A
选项登录到第二个节点。使用
crm cluster join
脚本为群集添加第二个节点。使用-c
选项指定之前初始化群集的用户和节点:user@node2 >
sudo --preserve-env=SSH_AUTH_SOCK \ crm cluster join --use-ssh-agent -c USER@NODE1
如果您是使用 YaST 而不是引导脚本设置群集的,系统将不会自动生成 SSH 密钥。要在启用 SSH 代理转发的情况下配置 SSH 密钥,可以单独使用引导脚本的 ssh
阶段。应在使用 YaST 配置群集后、在使群集上线前运行这些命令。
在第一个节点上运行以下命令:
user@node1 >
sudo --preserve-env=SSH_AUTH_SOCK \
crm cluster init ssh --use-ssh-agent
在所有其他节点上运行以下命令:
user@node2 >
sudo --preserve-env=SSH_AUTH_SOCK \
crm cluster join ssh --use-ssh-agent -c USER@NODE1
5.5.2 获得帮助 #
可通过以下方式之一访问帮助:
输出
crm
及其命令行选项的用法:#
crm --help
列出所有可用的命令:
#
crm help
访问其他帮助部分,而不只是命令参考:
#
crm help topics
查看
configure
子命令的完整帮助文本:#
crm configure help
列显
configure
的子命令group
的语法、用法及示例:#
crm configure help group
以下命令的作用相同:
#
crm help configure group
基本上 help
子命令(不要与 --help
选项混淆)的所有输出都会打开一个文本编辑器。此文本编辑器允许您向上/向下滚动,以便更加方便地阅读帮助文本。要退出文本编辑器,请按 Q 键。
crmsh 不仅为交互式外壳提供 Tab 键补全,还全面支持在 Bash 中直接使用此功能。例如,键入 crm help
config
→| 会补全文字,就像在交互式外壳中一样。
5.5.3 执行 crmsh 的子命令 #
crm
命令本身可按以下方式使用:
直接: 将所有子命令与
crm
结合使用,按 Enter 键,便会立即看到输出。例如,输入crm help ra
可获取有关ra
子命令(资源代理)的信息。可以缩写子命令,前提是缩写后的子命令是唯一的。例如,您可以将
status
缩写为st
,crmsh 可以识别该缩写。另一项功能是缩写参数。通常,您是通过
params
关键字添加参数的。如果params
是第一个且是唯一存在的部分,则可以省略。例如,下面一行:#
crm primitive ipaddr IPaddr2 params ip=192.168.0.55
相当于下行:
#
crm primitive ipaddr IPaddr2 ip=192.168.0.55
作为 crm 外壳脚本: 外壳脚本包含
crm
crm 的子命令。有关详细信息,请参见第 5.5.5 节 “使用 crmsh 的外壳脚本”。作为 crmsh 群集脚本:此类脚本是元数据、对 RPM 包的参照、配置文件及多个 crmsh 子命令捆绑在一起并以单个描述性名称命名的集合。可以通过
crm script
命令来管理这些内容。请不要将它们与 crmsh 外壳脚本相混淆:尽管两者具有一些共同的目标,但 crm 外壳脚本只包含子命令,而群集脚本所包含的远远不只是简单的命令枚举。有关详细信息,请参见第 5.5.6 节 “使用 crmsh 的群集脚本”。
作为内部外壳交互: 输入
crm
以进入内壳。提示符会切换为crm(live)
。使用help
可获取可用子命令的概述。由于内壳具有不同级别的子命令,您可以键入一个子命令然后按 Enter“进入”相应的级别。例如,如果输入
resource
,则进入资源管理级别。提示符会切换为crm(live)resource#
。要退出该内部的外壳,请使用quit
命令。如果需要返回上一个级别,可使用back
、up
、end
或cd
。键入
crm
和相应的子命令(不带任何选项)并按 Enter,即可直接进入该级别。该内部外壳还支持使用 Tab 键补全子命令和资源。键入命令的开头,然后按 →| 键,
crm
便会补全相应命令。
crmsh 还支持执行同步命令。使用 -w
选项可以激活该功能。如果已启动 crm
但未指定 -w
,之后可以将用户首选项的 wait
设为 yes
(options
wait yes
) 来启用它。如果此选项已启用,则 crm
将会等到事务完成为止。事务一经启用,就会打印出点以指示进度。同步命令执行仅适用于 resource
start
之类的命令。
crm
工具有管理功能(子命令 resource
和 node
),可用于配置设置(configure
和 cib
)。
下面的小节概述了 crm
工具的重要方面。
5.5.4 显示有关 OCF 资源代理的信息 #
由于在群集配置中一直需要处理资源代理,crm
工具包含了 ra
命令。使用该命令可以显示有关资源代理的信息并对其进行管理(如需其他信息,另请参见第 6.2 节 “支持的资源代理类别”):
#
crm ra
crm(live)ra#
classes
命令可列出所有类别和提供方:
crm(live)ra#
classes
lsb
ocf / heartbeat linbit lvm2 ocfs2 pacemaker
service
stonith
systemd
要大致了解某个类别(和提供方)的所有可用资源,请使用 list
命令:
crm(live)ra#
list ocf
AoEtarget AudibleAlarm CTDB ClusterMon
Delay Dummy EvmsSCC Evmsd
Filesystem HealthCPU HealthSMART ICP
IPaddr IPaddr2 IPsrcaddr IPv6addr
LVM LinuxSCSI MailTo ManageRAID
ManageVE Pure-FTPd Raid1 Route
SAPDatabase SAPInstance SendArp ServeRAID
...
可使用 info
查看资源代理的概述:
crm(live)ra#
info ocf:linbit:drbd
This resource agent manages a DRBD* resource
as a master/slave resource. DRBD is a shared-nothing replicated storage
device. (ocf:linbit:drbd)
Master/Slave OCF Resource Agent for DRBD
Parameters (* denotes required, [] the default):
drbd_resource* (string): drbd resource name
The name of the drbd resource from the drbd.conf file.
drbdconf (string, [/etc/drbd.conf]): Path to drbd.conf
Full path to the drbd.conf file.
Operations' defaults (advisory minimum):
start timeout=240
promote timeout=90
demote timeout=90
notify timeout=90
stop timeout=100
monitor_Slave_0 interval=20 timeout=20 start-delay=1m
monitor_Master_0 interval=10 timeout=20 start-delay=1m
按 Q 退出查看器。
crm
在之前的示例中,我们使用了 crm
命令的内壳。但是您不一定非要使用它。将相应子命令添加到 crm
中也可获得相同的结果。例如,在外壳中输入 crm ra list ocf
可以列出所有 OCF 资源代理。
5.5.5 使用 crmsh 的外壳脚本 #
Crmsh 外壳脚本提供了将 crmsh 子命令枚举到文件中的便捷方式。如此,您便可轻松地注释特定行或稍后重新运行这些行。请注意,crmsh 外壳脚本只能包含 crmsh 子命令,不允许包含任何其他命令。
您需要先创建包含特定命令的文件,然后才能使用 crmsh 外壳脚本。例如,下面的文件会列显群集的状态并提供所有节点的列表:
# A small example file with some crm subcommands
status
node list
以井字符号 (#
) 开头的所有行都是注释,系统会将其忽略。如果某行过长,可在结尾插入反斜杠 (\
),然后换到下一行。为方便阅读,建议将属于特定子命令的行进行缩进。
要使用此脚本,请使用以下其中一种方法:
#
crm -f example.cli
#
crm < example.cli
5.5.6 使用 crmsh 的群集脚本 #
从所有群集节点收集信息并部署任何更改是一项关键的群集管理任务。您不必在不同的节点上手动执行相同的过程(这很容易出错),可以使用 crmsh 群集脚本来代替该过程。
请不要将它们与 crmsh 外壳脚本相混淆,第 5.5.5 节 “使用 crmsh 的外壳脚本”中对后者进行了介绍。
对比 crmsh 外壳脚本,群集脚本另外会执行如下任务:
安装特定任务所需的软件。
创建或修改任何配置文件。
收集信息并报告群集的潜在问题。
将更改部署到所有节点。
crmsh 群集脚本并不能取代其他群集管理工具,它只是提供了一种集成的方式用于在群集中执行上述任务。有关详细信息,请参见https://crmsh.github.io/scripts/。
5.5.6.1 用法 #
要获取所有可用群集脚本的列表,请运行:
#
crm script list
要查看脚本的组成部分,请使用 show
命令和群集脚本的名称,例如:
#
crm script show mailto
mailto (Basic)
MailTo
This is a resource agent for MailTo. It sends email to a sysadmin
whenever a takeover occurs.
1. Notifies recipients by email in the event of resource takeover
id (required) (unique)
Identifier for the cluster resource
email (required)
Email address
subject
Subject
show
的输出包含标题、简要说明和过程。每个过程分为一系列按给定顺序执行的步骤。
每个步骤都包含一份必要参数与可选参数及其简要说明和默认值的列表。
每个群集脚本都可识别一组通用参数。这些参数可传递给任何脚本:
参数 | 参数 | 说明 |
---|---|---|
action | INDEX | 如果设置此参数,则只会执行单个操作(verify 会返回索引) |
dry_run | BOOL | 如果设置此参数,则只会模拟执行(默认值:no) |
nodes | LIST | 列出要对其执行脚本的节点 |
port | NUMBER | 要连接的端口 |
statefile | FILE | 在以单一步进方式执行时,状态将保存在给定文件中 |
sudo | BOOL | 如果设置此参数,crm 会在适当的情况下提示输入 sudo 口令并使用 sudo(默认值为 no) |
timeout | NUMBER | 以秒为单位的执行超时(默认值:600) |
user | USER | 以给定用户的身份运行脚本 |
5.5.6.2 校验和运行群集脚本 #
在运行某个群集脚本之前,请检查该脚本将要执行的操作并校验其参数,以免出现问题。群集脚本可能会执行一系列操作,并且可能会出于各种原因而失败。因此,在运行脚本之前校验参数有助于避免出现问题。
例如,mailto
资源代理需要唯一的标识符和一个电子邮件地址。要校验这些参数,请运行:
#
crm script verify mailto id=sysadmin email=tux@example.org
1. Ensure mail package is installed
mailx
2. Configure cluster resources
primitive sysadmin MailTo
email="tux@example.org"
op start timeout="10"
op stop timeout="10"
op monitor interval="10" timeout="10"
clone c-sysadmin sysadmin
verify
命令会列显步骤,并将所有占位符替换为给定的参数。verify
会报告发现的任何问题。如果一切正常,请将 verify
命令替换为 run
:
#
crm script run mailto id=sysadmin email=tux@example.org
INFO: MailTo
INFO: Nodes: alice, bob
OK: Ensure mail package is installed
OK: Configure cluster resources
使用 crm status
检查您的资源是否已集成到群集中:
#
crm status
[...]
Clone Set: c-sysadmin [sysadmin]
Started: [ alice bob ]
5.5.7 使用配置模板 #
配置模板可为 crmsh 提供即时可用的群集配置。请不要将其与资源模板(如第 6.8.2 节 “使用 crmsh 创建资源模板”中所述)混淆。资源模板只适用于群集,而不适用于 crm 外壳。
配置模板只需稍作更改,即可满足特定用户的需要。每次使用模板创建配置时,都会出现警告消息,提示您哪些可以稍后编辑以供将来自定义。
以下步骤显示了如何创建简单有效的 Apache 配置:
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm configure
从配置模板创建一个新配置:
切换到
template
子命令:crm(live)configure#
template
列出可用的配置模板:
crm(live)configure template#
list templates
gfs2-base filesystem virtual-ip apache clvm ocfs2 gfs2确定需要的配置模板。由于我们需要 Apache 配置,因此选择了
apache
模板并将其命名为g-intranet
:crm(live)configure template#
new g-intranet apache
INFO: pulling in template apache INFO: pulling in template virtual-ip
定义参数:
列出您创建的配置:
crm(live)configure template#
list
g-intranet显示需要由您填充的最少的必要更改:
crm(live)configure template#
show
ERROR: 23: required parameter ip not set ERROR: 61: required parameter id not set ERROR: 65: required parameter configfile not set调用首选的文本编辑器,填写显示为错误(如步骤 3.b 中所示)的所有行:
crm(live)configure template#
edit
显示配置并检查配置是否有效(粗体文本取决于您在步骤 3.c 中进入的配置):
crm(live)configure template#
show
primitive virtual-ip ocf:heartbeat:IPaddr \ params ip="192.168.1.101" primitive apache apache \ params configfile="/etc/apache2/httpd.conf" monitor apache 120s:60s group g-intranet \ apache virtual-ip应用配置:
crm(live)configure template#
apply
crm(live)configure#
cd ..
crm(live)configure#
show
将更改提交到 CIB:
crm(live)configure#
commit
如果知道细节,可以更加简化命令。上述过程可汇总为外壳上的以下命令:
#
crm configure template \
new g-intranet apache params \
configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
如果在 crm
内壳中,可使用以下命令:
crm(live)configure template#
new intranet apache params \
configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
但是,前一条命令仅会从配置模板创建其配置。它不会将其应用或提交到 CIB。
5.5.8 使用阴影配置进行测试 #
阴影配置可用于测试不同的配置方案。如果创建了多个阴影配置,则可逐一测试这些配置,以查看更改的影响。
一般的流程显示如下:
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm configure
创建新的阴影配置:
crm(live)configure#
cib new myNewConfig
INFO: myNewConfig shadow CIB created如果省略阴影 CIB 的名称,将会创建临时名称
@tmp@
。要将当前的活动配置复制到阴影配置中,可使用以下命令,否则请跳过此步骤:
crm(myNewConfig)#
cib reset myNewConfig
使用上面的命令便于稍后修改现有资源。
照常进行更改。创建阴影配置后,会应用所有更改。要保存所有更改,请使用以下命令:
crm(myNewConfig)#
commit
如果再次需要活动群集配置,可使用以下命令切换回此配置:
crm(myNewConfig)configure#
cib use live
crm(live)#
5.5.9 调试配置更改 #
将配置更改加载回群集之前,建议使用 ptest
复查更改。使用 ptest
命令可显示提交更改后产生的操作图。需要 graphviz 软件包才能显示这些图。以下示例是一个抄本,添加了监控操作:
#
crm configure
crm(live)configure#
show fence-bob
primitive fence-bob stonith:apcsmart \
params hostlist="bob"
crm(live)configure#
monitor fence-bob 120m:60s
crm(live)configure#
show changed
primitive fence-bob stonith:apcsmart \
params hostlist="bob" \
op monitor interval="120m" timeout="60s"
crm(live)configure#
ptest
crm(live)configure#
commit
5.5.10 群集图表 #
要输出群集图表,请使用 crm configure graph
命令。它会在当前的窗口上显示当前配置,因此需要配备 X11。
如果您希望使用可缩放矢量图 (SVG),请使用以下命令:
#
crm configure graph dot config.svg svg
5.5.11 管理 Corosync 配置 #
Corosync 是大多数 HA 群集的基础消息交换层。corosync
子命令提供用于编辑和管理 Corosync 配置的命令。
例如,要列出群集的状态,请使用 status
:
#
crm corosync status
Printing ring status.
Local node ID 175704363
RING ID 0
id = 10.121.9.43
status = ring 0 active with no faults
Quorum information
------------------
Date: Thu May 8 16:41:56 2014
Quorum provider: corosync_votequorum
Nodes: 2
Node ID: 175704363
Ring ID: 4032
Quorate: Yes
Votequorum information
----------------------
Expected votes: 2
Highest expected: 2
Total votes: 2
Quorum: 2
Flags: Quorate
Membership information
----------------------
Nodeid Votes Name
175704363 1 alice.example.com (local)
175704619 1 bob.example.com
diff
命令会比较所有节点上的 Corosync 配置(如果未另行指定)并列显各节点之间的差异:
#
crm corosync diff
--- bob
+++ alice
@@ -46,2 +46,2 @@
- expected_votes: 2
- two_node: 1
+ expected_votes: 1
+ two_node: 0
有关细节,请参见https://crmsh.nongnu.org/crm.8.html#cmdhelp_corosync。
5.5.12 设置独立于 cib.xml
的口令 #
如果群集配置包含口令之类的敏感信息,应将其存储在本地文件中。这样的话,这些参数将永远不会记录到或导入支持报告中。
使用 secret
前,请先运行 show
命令了解一下所有资源的概况:
#
crm configure show
primitive mydb mysql \
params replication_user=admin ...
要为上面的 mydb
资源设置口令,请使用以下命令:
#
crm resource secret mydb set passwd linux
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]
使用以下命令可以取回保存的密码:
#
crm resource secret mydb show passwd
linux
各节点间的参数需要同步;crm resource secret
命令可用于执行此操作。强烈建议仅使用此命令来管理机密参数。
5.6 更多信息 #
- https://crmsh.github.io/
用于 High Availability 群集管理的高级命令行界面 crm 外壳 (crmsh) 的主页。
- https://crmsh.github.io/documentation
提供有关 crm 外壳的若干文档,包括使用 crmsh 完成基本群集设置的 Getting Started 教程,以及 crm 外壳的综合性Manual。后者可在 https://crmsh.github.io/man-2.0/ 上访问。https://crmsh.github.io/start-guide/ 上提供了相关教程。
- https://clusterlabs.org/
Pacemaker 主页,Pacemaker 是 SUSE Linux Enterprise High Availability 随附的群集资源管理器。
- https://www.clusterlabs.org/pacemaker/doc/
提供数个综合性手册,以及一些解释一般概念的简短文档。例如:
Pacemaker Explained:包含全面、详细的参考信息。
Colocation Explained
Ordering Explained
6 配置群集资源 #
作为群集管理员,您需要在群集中为服务器上运行的每个资源或应用程序创建群集资源。群集资源可能包括网站、电子邮件服务器、数据库、文件系统、虚拟机,以及您希望用户随时都可以访问的任何其他基于服务器的应用程序或服务。
6.1 资源类型 #
可创建以下类型的资源:
- 原始资源
基元资源是最基本的资源类型。
- 组
组包含一组需要放在一起、按顺序启动和按相反顺序停止的资源。
- 克隆资源
克隆是可以在多个主机上处于活动状态的资源。如果各个资源代理支持,则任何资源均可克隆。
可升级克隆(也称为多状态资源)是一种可以升级的特殊类型的克隆资源。
6.2 支持的资源代理类别 #
对于添加的每个群集资源,需要定义资源代理需遵守的标准。资源代理提取它们提供的服务并显示群集的确切状态,以使群集对其管理的资源不作确答。群集依赖于资源代理在收到启动、停止或监控命令时作出相应反应。
通常,资源代理的形式为外壳脚本。SUSE Linux Enterprise High Availability 支持以下几类资源代理:
- Open Cluster Framework (OCF) 资源代理
OCF RA 代理最适合与高可用性搭配使用,特别是当您需要可升级克隆资源或特殊监控功能时。这些代理通常位于
/usr/lib/ocf/resource.d/provider/
中。其功能与 LSB 脚本的功能相似。但其配置始终通过环境变量进行,这样方便接受和处理参数。OCF 规范对于操作必须返回的退出码有严格的定义。请参见第 10.3 节 “OCF 返回代码和故障恢复”。群集严格遵循这些规范。所有 OCF 资源代理都必须至少含有
status
、start
、monitor
、stop
和meta-data
操作。meta-data
操作可检索有关如何配置代理的信息。例如,要了解提供程序IPaddr
的heartbeat
代理的更多信息,请使用以下命令:OCF_ROOT=/usr/lib/ocf /usr/lib/ocf/resource.d/heartbeat/IPaddr meta-data
输出是 XML 格式的信息,包括多个部分(代理的常规描述、可用参数和可用操作)。
或者,也可以使用 crmsh 来查看有关 OCF 资源代理的信息。有关详细信息,请参见 第 5.5.4 节 “显示有关 OCF 资源代理的信息”。
- Linux Standards Base (LSB) 脚本
LSB 资源代理一般由操作系统/发行套件提供,位于
/etc/init.d
中。要用于群集,它们必须遵守 LSB init 脚本规范。举例而言,这些代理中必须至少实现以下几个操作:reload
、start
、force-reload
、stop
、restart
和status
。有关详细信息,请参见https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html。这些服务的配置没有标准化。如果要将 LSB 脚本用于 High Availability,请确保您了解如何配置相关脚本。通常可在
/usr/share/doc/packages/PACKAGENAME
中的相关软件包文档中找到这方面的信息。- systemd
Pacemaker 可以管理 systemd 服务(如果有)。systemd 不使用 init 脚本,而是使用单元文件。通常,服务(或单元文件)由操作系统提供。如果您要转换现有的 init 脚本,可访问 https://0pointer.de/blog/projects/systemd-for-admins-3.html 找到更多信息。
- 服务
目前有许多类型的系统服务同时存在:
LSB
(属于 System V init)、systemd
和(在某些发行套件中提供的)upstart
。因此,Pacemaker 支持使用特殊别名,以确定哪个服务适用于指定的群集节点。当群集中混合使用了 systemd、upstart 和 LSB 服务时,此功能尤其有用。Pacemaker 会尝试按以下顺序查找指定服务:LSB (SYS-V) init 脚本、Systemd 单元文件或 Upstart 作业。- Nagios
使用监控插件(以前称为 Nagios 插件)可以监控远程主机上的服务。Pacemaker 可以使用监控插件(如果有)来执行远程监控。有关详细信息,请参见第 9.1 节 “使用监控插件监控远程主机上的服务”。
- STONITH(屏蔽)资源代理
此类仅用于与屏蔽相关的资源。有关详细信息,请参见第 12 章 “屏障和 STONITH”。
SUSE Linux Enterprise High Availability 随附的代理是按照 OCF 规范编写的。
6.3 超时值 #
资源的超时值会受以下参数的影响:
op_defaults
(操作的全局超时),在资源模板中定义的特定超时值,
为资源定义的特定超时值。
如果为资源定义了特定值,则该值优先于全局默认值。资源的特定值也优先于在资源模板中定义的值。
获取超时值权限非常重要。将超时值设置得太小,会因以下原因产生大量(不必要的)屏蔽操作:
如果资源超时,便会失败,并且群集会尝试将其停止。
如果停止该资源的操作也失败(例如,由于停止超时设置得太短),群集将屏蔽该节点。它会将发生此情况的节点视为失控。
您可以使用 crmsh 和 Hawk2 调整操作的全局默认值并设置任何特定的超时值。确定和设置超时值的最佳实践如下所示:
检查资源启动和停止(在负载状况下)所需的时间。
如果需要,请添加
op_defaults
参数并相应地设置(默认)超时值:例如,将
op_defaults
设置为60
秒:crm(live)configure#
op_defaults timeout=60
对于需要更长时间期限的资源,则定义单独的超时值。
为资源配置操作时,添加单独的
start
和stop
操作。使用 Hawk2 配置操作时,该工具会针对这些操作提供有用的超时建议。
6.4 创建原始资源 #
必须先设置群集中的资源,然后才能使用它。例如,要使用 Apache 服务器作为群集资源,请先设置 Apache 服务器并完成 Apache 配置,然后才能在群集中启动相应的资源。
如果资源有特定环境要求,请确保这些要求已得到满足并且在所有群集节点上均相同。此类配置无法通过 SUSE Linux Enterprise High Availability 管理。您必须自行管理。
可以使用 Hawk2 或 crmsh 来创建原始资源。
当您使用 SUSE Linux Enterprise High Availability 管理某个资源时,就不能以其他方式启动或停止该资源(例如,在群集外手动启动或停止,或在系统引导或重引导时启动或停止)。该 High Availability 软件会负责所有服务的启动或停止操作。
如果当服务已在群集控制下运行后您需要执行测试或维护任务,请确保先将资源、节点或整个群集置于维护模式,然后再进行手动处理。有关详细信息,请参见 第 28.2 节 “用于维护任务的不同选项”。
群集资源和群集节点的名称应该不同。否则,Hawk2 将会失败。
6.4.1 使用 Hawk2 创建原始资源 #
要创建最基本类型的资源,请执行以下操作:
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› › 。输入唯一的
。如果存在可以根据其进行资源配置的资源模板,请选择相应的
。选择要使用的资源代理
:service
、lsb
、stonith
、ocf
或systemd
。有关详细信息,请参见第 6.2 节 “支持的资源代理类别”。如果选择了
ocf
作为类,则指定 OCF 资源代理的 。OCF 规范允许多个供应商供应相同的资源代理。从
列表中,选择要使用的资源代理(例如 或 )。将显示该资源代理的简短描述。注意图 6.1︰ Hawk2 - 原始资源 #指定资源基本信息后,Hawk2 会显示以下类别。按照 Hawk2 的建议保留这些类别,或根据需要对其进行编辑。
- 参数(实例属性)
确定资源控制的服务实例。创建资源时,Hawk2 会自动显示所有必要的参数。对这些参数进行编辑,以便拥有有效的资源配置。
有关详细信息,请参见第 6.13 节 “实例属性(参数)”。
- 操作
为监控资源所需。创建资源时,Hawk2 会显示最重要的资源操作(
start
、monitor
和stop
)。有关详细信息,请参见第 6.14 节 “资源操作”。
- 元属性
告知 CRM 如何处理特定资源。创建资源时,Hawk2 会自动列出该资源的重要元属性,例如,定义资源初始状态的
target-role
属性。默认情况下,该属性设置为Stopped
,这样资源便不会立即启动。有关详细信息,请参见第 6.12 节 “资源选项(元属性)”。
- 利用率
告知 CRM 某个资源需从节点获取的容量。
有关详细信息,请参见第 7.10.1 节 “使用 Hawk2 根据资源负载影响放置资源”。
单击
以完成配置。如果操作成功,屏幕顶部会显示一条消息。
6.4.2 使用 crmsh 创建原始资源 #
以
root
用户身份登录并启动crm
工具:#
crm configure
配置原始 IP 地址:
crm(live)configure#
primitive myIP IPaddr \ params ip=127.0.0.99 op monitor interval=60s
上一命令配置了名称为 “ 的”原始资源
myIP
。需要选择一个类别(此处为ocf
)、提供方 (heartbeat
) 和类型 (IPaddr
)。此外,此原始资源还需要其他参数,如 IP 地址。根据设置更改地址。显示您所做的更改并进行复查:
crm(live)configure#
show
提交更改使其生效:
crm(live)configure#
commit
6.5 创建资源组 #
某些群集资源依赖于其他组件或资源,它们要求每个组件或资源都按特定顺序启动,并与其依赖的资源一起在同一服务器上运行。要简化此配置,可以使用群集资源组。
可以使用 Hawk2 或 crmsh 来创建资源组。
资源组示例可以是需要 IP 地址和文件系统的 Web 服务器。在本例中,每个组件都是组成群集资源组的一个单独资源。资源组将在一台或多台服务器上运行。在发生软件或硬件故障时,资源组会将故障转移到群集中的另一台服务器,这一点与单个群集资源类似。
组具有以下属性:
- 启动和停止
资源按其显示顺序启动,并按相反顺序停止。
- 相关性
如果组中某个资源在某处无法运行,则该组中位于其之后的任何资源都不允许运行。
- 内容
组可能仅包含一些原始群集资源。组必须包含至少一个资源,否则配置无效。要引用组资源的子项,请使用子项 ID 而不是组 ID。
- 限制
尽管可以在约束中引用组的子项,但一般最好使用组的名称。
- 粘性
粘性在组中可以累加。组中每个活动成员的粘性值都会影响组的总值。因此,如果
resource-stickiness
的默认值是100
,且组中有 7 个成员(其中 5 个成员处于活动状态),那么整个组将首选其当前位置(分数为500
)。- 资源监控
要为组启用资源监控,必须为组中每个要监控的资源分别配置监控。
6.5.1 使用 Hawk2 创建资源组 #
组必须包含至少一个资源,否则配置无效。创建组时,Hawk2 允许您创建多个原始资源并将它们添加到组中。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› › 。输入唯一的
。要定义组成员,请选择“手柄”图标将组成员拖放为需要的顺序对其进行重新排序。
列表中的一项或多项。通过使用右侧的根据需要修改或添加
。单击
以完成配置。如果操作成功,屏幕顶部会显示一条消息。
6.5.2 使用 crmsh 创建资源组 #
以下示例创建了两个原始资源(一个 IP 地址和一个电子邮件资源)。
以系统管理员的身份运行
crm
命令。提示符会切换为crm(live)
。配置这两个原始资源:
crm(live)#
configure
crm(live)configure#
primitive Public-IP ocf:heartbeat:IPaddr2 \ params ip=1.2.3.4 \ op monitor interval=10s
crm(live)configure#
primitive Email systemd:postfix \ op monitor interval=10s
以正确顺序按其相关标识符对原始资源进行分组:
crm(live)configure#
group g-mailsvc Public-IP Email
6.6 创建克隆资源 #
您可能希望某些资源在群集的多个节点上同时运行。为此,必须将资源配置为克隆资源。可以配置为克隆的资源示例包括群集文件系统(如 OCFS2)。可以克隆提供的任何资源。资源的代理支持此操作。克隆资源的配置甚至也有不同,具体取决于资源驻留的节点。
资源克隆有三种类型:
- 匿名克隆
这是最简单的克隆类型。这种克隆类型在所有位置上的运行方式都相同。因此,每台计算机上只能有一个匿名克隆实例是活动的。
- 全局唯一克隆
这些资源各不相同。一个节点上运行的克隆实例与另一个节点上运行的实例不同,同一个节点上运行的任何两个实例也不同。
- 可升级克隆(多状态资源)
这些资源的活动实例分为两种状态:主动和被动。这些状态有时也称为主要和次要。可升级克隆可以是匿名的,也可以是全局唯一。有关详细信息,请参见第 6.7 节 “创建可升级克隆资源(多状态资源)”。
克隆资源必须正好包含一组或一个常规资源。
配置资源监控或约束时,克隆资源与简单资源具有不同的要求。有关细节,请参见 https://www.clusterlabs.org/pacemaker/doc/ 上的 Pacemaker Explained。
可以使用 Hawk2 或 crmsh 来创建克隆资源。
6.6.1 使用 Hawk2 创建克隆资源 #
克隆资源可以包含原始资源或组作为子资源。在 Hawk2 中,创建克隆资源时不能创建或修改子资源。添加克隆资源之前,先创建子资源并根据需要配置它们。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› › 。输入唯一的
。从
列表中,选择要作为克隆子资源的原始资源或组。根据需要修改或添加
。单击
以完成配置。如果操作成功,屏幕顶部会显示一条消息。
6.6.2 使用 crmsh 创建克隆资源 #
要创建匿名克隆资源,首先需创建一个原始资源,然后使用 clone
命令来引用它。
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm configure
配置原始资源,例如:
crm(live)configure#
primitive Apache apache
克隆原始资源:
crm(live)configure#
clone cl-apache Apache
6.7 创建可升级克隆资源(多状态资源) #
可升级克隆(以前称为多状态资源)是一种特殊的克隆。它们可让实例处于两种运行模式之一(主要或次要)。可升级克隆只能包含一个组或一个常规资源。
配置资源监控或约束时,可升级克隆的要求与简单资源不同。有关细节,请参见 https://www.clusterlabs.org/pacemaker/doc/ 上的 Pacemaker Explained。
可以使用 Hawk2 或 crmsh 来创建可升级克隆资源。
6.7.1 使用 Hawk2 创建可升级克隆资源 #
可升级克隆资源可以包含原始资源或组作为子资源。在 Hawk2 中,创建可升级克隆资源时不能创建或修改子资源。添加可升级克隆资源之前,请先创建子资源并根据需要配置它们。请参阅第 6.4.1 节 “使用 Hawk2 创建原始资源”或第 6.5.1 节 “使用 Hawk2 创建资源组”。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› › 。输入唯一的
。从
列表中,选择要作为多状态资源的子资源的原始资源或组。根据需要修改或添加
。单击
以完成配置。如果操作成功,屏幕顶部会显示一条消息。
6.7.2 使用 crmsh 创建可升级克隆资源 #
要创建可升级克隆资源,首先要创建一个原始资源,然后再创建可升级克隆资源。可升级克隆资源必须至少支持升级和降级操作。
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm configure
配置原始资源。必要时更改时间间隔:
crm(live)configure#
primitive my-rsc ocf:myCorp:myAppl \ op monitor interval=60 \ op monitor interval=61 role=Promoted
创建可升级克隆资源:
crm(live)configure#
clone clone-rsc my-rsc meta promotable=true
6.8 创建资源模板 #
如果希望创建具有类似配置的多个资源,则定义资源模板是最简单的方式。定义好模板后,就可以在原始资源或特定类型的约束中引用它,如第 7.3 节 “资源模板和约束”中所述。
如果在原始资源中引用了模板,该原始资源会继承模板中定义的所有操作、实例属性(参数)、元属性和利用率属性。此外,还可以为原始资源定义特定的操作或属性。如果在模板和原始资源中都定义了以上内容,原始资源中定义的值将优先于模板中定义的值。
可以使用 Hawk2 或 crmsh 来创建资源模板。
6.8.1 使用 Hawk2 创建资源模板 #
配置资源模板就如同配置原始资源一样。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› › 。输入唯一的
。按照过程 6.2 “使用 Hawk2 添加原始资源”中的指导从步骤 5 开始。
6.8.2 使用 crmsh 创建资源模板 #
使用 rsc_template
命令可以熟悉其语法:
#
crm configure rsc_template
usage: rsc_template <name> [<class>:[<provider>:]]<type>
[params <param>=<value> [<param>=<value>...]]
[meta <attribute>=<value> [<attribute>=<value>...]]
[utilization <attribute>=<value> [<attribute>=<value>...]]
[operations id_spec
[op op_type [<attribute>=<value>...] ...]]
例如,以下命令将会根据 ocf:heartbeat:Xen
资源和一些默认值及操作新建一个名为 BigVM
的资源模板:
crm(live)configure#
rsc_template BigVM ocf:heartbeat:Xen \
params allow_mem_management="true" \
op monitor timeout=60s interval=15s \
op stop timeout=10m \
op start timeout=10m
定义新资源模板后,可以在原始资源中使用它,或在顺序、共置或 rsc_ticket 约束中引用该模板。要引用资源模板,请使用 @
符号:
crm(live)configure#
primitive MyVM1 @BigVM \
params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1"
新的原始资源 MyVM1 将继承 BigVM 资源模板中的所有配置。例如,上述两者的等效配置有:
crm(live)configure#
primitive MyVM1 Xen \
params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1" \
params allow_mem_management="true" \
op monitor timeout=60s interval=15s \
op stop timeout=10m \
op start timeout=10m
如果希望重写一些选项或操作,只需将它们添加到您的(原始)定义中。例如,下面这个新的原始资源 MyVM2 会让监控操作的超时增加一倍,而其他值保持不变:
crm(live)configure#
primitive MyVM2 @BigVM \
params xmfile="/etc/xen/shared-vm/MyVM2" name="MyVM2" \
op monitor timeout=120s interval=30s
资源模板可以在约束中引用,以表示所有原始资源都派生自该模板。这有助于生成更加清晰明了的群集配置。除了位置约束外,允许在所有约束中进行资源模板引用。共置约束不能包含多次模板引用。
6.9 创建 STONITH 资源 #
您必须为群集配置节点屏蔽机制。
全局群集选项
stonith-enabled
和startup-fencing
必须设置为true
。如果您更改这些选项,将会失去支持。
默认情况下,全局群集选项 stonith-enabled
设置为 true
。如果未定义 STONITH 资源,群集会拒绝启动任何资源。配置一个或多个 STONITH 资源以完成 STONITH 设置。虽然 STONITH 资源的配置过程与其他资源类似,但它们的行为在某些方面有所不同。有关细节,请参见第 12.3 节 “STONITH 资源和配置”。
可以使用 Hawk2 或 crmsh 来创建 STONITH 资源。
6.9.1 使用 Hawk2 创建 STONITH 资源 #
要为 SBD、libvirt (KVM/Xen) 或 vCenter/ESX 服务器添加 STONITH 资源,最简单的方式就是使用 Hawk2 向导。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› › 。输入唯一的
。从
列表,选择资源代理类 。从
列表中,选择用于控制 STONITH 设备的 STONITH 插件。该插件的简短描述即会显示。Hawk2 会自动显示该资源必需的
。为每个参数输入值。Hawk2 会显示最重要的资源
并建议默认值。如果不修改任何设置,Hawk2 会在您确认后添加建议的操作及默认值。如无更改必要,请保留默认的
设置。图 6.5︰ Hawk2 - STONITH 资源 #确认更改以创建 STONITH 资源。
如果操作成功,屏幕顶部会显示一条消息。
要完成屏蔽配置,请添加约束。有关详细信息,请参考 第 12 章 “屏障和 STONITH”。
6.9.2 使用 crmsh 创建 STONITH 资源 #
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm
使用以下命令获取所有 STONITH 类型的列表:
crm(live)#
ra list stonith
apcmaster apcmastersnmp apcsmart baytech bladehpi cyclades drac3 external/drac5 external/dracmc-telnet external/hetzner external/hmchttp external/ibmrsa external/ibmrsa-telnet external/ipmi external/ippower9258 external/kdumpcheck external/libvirt external/nut external/rackpdu external/riloe external/sbd external/vcenter external/vmware external/xen0 external/xen0-ha fence_legacy ibmhmc ipmilan meatware nw_rpc100s rcd_serial rps10 suicide wti_mpc wti_nps从以上列表中选择 STONITH 类型并查看可用的选项列表。使用以下命令:
crm(live)#
ra info stonith:external/ipmi
IPMI STONITH external device (stonith:external/ipmi) ipmitool based power management. Apparently, the power off method of ipmitool is intercepted by ACPI which then makes a regular shutdown. In case of a split brain on a two-node, it may happen that no node survives. For two-node clusters, use only the reset method. Parameters (* denotes required, [] the default): hostname (string): Hostname The name of the host to be managed by this STONITH device. ...使用
stonith
类别(您在步骤 3 中选择的类型)和所需的相应参数创建 STONITH 资源,例如:crm(live)#
configure
crm(live)configure#
primitive my-stonith stonith:external/ipmi \ params hostname="alice" \ ipaddr="192.168.1.221" \ userid="admin" passwd="secret" \ op monitor interval=60m timeout=120s
6.10 配置资源监控 #
如果要确保资源正在运行,必须为其配置资源监控。可以使用 Hawk2 或 crmsh 来配置资源监控功能。
如果资源监控程序检测到故障,将发生以下情况:
根据
/etc/corosync/corosync.conf
中logging
部分指定的配置生成日志文件消息。故障会在群集管理工具(Hawk2、
crm status
)中和 CIB 状态部分反映出来。群集会启动重要的恢复操作,可能包括停止资源以修复故障状态,以及在本地或其他节点上重启动资源。资源也可能不会重启动,具体取决于配置和群集状态。
如果不配置资源监控,系统不会告知您资源成功启动后发生的故障,并且群集始终将资源显示为健康状况良好。
通常,资源仅会在运行时受到群集的监控。但是,为了检测并发违例,还需为停止的资源配置监控。要进行资源监控,请指定超时和/或启动延迟值及间隔。间隔告诉 CRM 检查资源状态的频率。您还可以设置特定参数,例如为 start
或 stop
操作设置 timeout
。
有关监控操作参数的详细信息,请参见第 6.14 节 “资源操作”。
6.10.1 使用 Hawk2 配置资源监控功能 #
登录 Hawk2:
https://HAWKSERVER:7630/
按过程 6.2 “使用 Hawk2 添加原始资源”中所述添加资源,或选择要编辑的现有原始资源。
Hawk2 会自动显示最重要的
(monitor
、start
、stop
)并建议默认值。要查看属于每个建议值的属性,请将鼠标悬停在相应的值上。
图 6.6︰ 操作值 #要更改针对
start
或stop
操作建议的timeout
值,请执行以下操作:单击操作旁边的钢笔图标。
在打开的对话框中,为
timeout
参数输入其他值(例如10
),然后确认更改。
要更改针对
间隔monitor
值,请执行以下操作:单击操作旁边的钢笔图标。
在打开的对话框中,为监控
interval
输入不同的值。要配置资源停止时针对资源的监控,请执行以下操作:
从下面的空下拉框中选择
role
这一项。从
role
下拉框中选择Stopped
。单击
确认更改并关闭操作对话框。
在资源配置屏幕中确认更改。如果操作成功,屏幕顶部会显示一条消息。
要查看资源故障,请切换到 Hawk2 中的
屏幕,然后选择您感兴趣的资源。在 列中,单击向下箭头图标并选择 。随后打开的对话框会列出对资源执行的最近操作。失败事件显示为红色。要查看资源细节,请单击 列中的放大镜图标。6.10.2 使用 crmsh 配置资源监控功能 #
要监控资源,有两种可能性:使用 op
关键字或 monitor
命令定义监控操作。以下示例配置了一个 Apache 资源,并使用 op
关键字指定每隔 60 秒监控一次该资源:
crm(live)configure#
primitive apache apache \
params ... \
op monitor interval=60s timeout=30s
使用以下命令也可以实现相同的目的:
crm(live)configure#
primitive apache apache \
params ...
crm(live)configure#
monitor apache 60s:30s
- 监控已停止的资源
通常,资源仅会在运行时受到群集的监控。但是,为了检测并发违例,还需为停止的资源配置监控。例如:
crm(live)configure#
primitive dummy1 Dummy \ op monitor interval="300s" role="Stopped" timeout="10s" \ op monitor interval="30s" timeout="10s"
当资源
dummy1
处于role="Stopped"
状态时,此配置每300
秒就会触发一次对该资源的监控操作。当该资源运行时,将每隔30
秒对其监控一次。- 检测
CRM 会对每个节点上的各个资源执行初始监控,也称为
probe
。清理资源之后也会执行探测。如果为资源定义了多项监控操作,CRM 会选择间隔时间最短的一项操作,并会使用其超时值作为默认的探测超时值。如果未配置任何监控操作,则将应用整个群集的默认值。默认值为20
秒(如果未通过配置op_defaults
参数指定其他值)。如果您不想依赖自动计算或op_defaults
值,请为此资源的探测定义具体的监控操作。为此,可以添加一个监控操作并将interval
设置为0
,例如:crm(live)configure#
primitive rsc1 ocf:pacemaker:Dummy \ op monitor interval="0" timeout="60"
无论
op_defaults
中定义的全局超时或已配置的任何其他操作超时为何值,rsc1
的探测都会在60s
后超时。如果指定相应资源的探测时未设置interval="0"
,CRM 会自动检查是否为该资源定义了任何其他监控操作,并如上文所述计算探测的超时值。
6.11 从文件加载资源 #
可从本地文件或网络 URL 加载部分或全部配置。可定义三种不同方法:
replace
此选项会将当前配置替换为新的源配置。
update
此选项会尝试导入源配置。它会向当前配置添加新项目或更新现有项目。
push
此选项会将内容从来源导入到当前配置中(与
update
相同)。不过,它会去除在新配置中不可用的对象。
要从文件 mycluster-config.txt
加载新配置,请使用以下语法:
#
crm configure load push mycluster-config.txt
6.12 资源选项(元属性) #
您可以为添加的每个资源定义选项。群集使用这些选项来决定资源的行为,它们会告知 CRM 如何处理特定的资源。可以使用 crm_resource --meta
命令或 Hawk2 来设置资源选项。
下面列出了一些常见选项:
priority
如果无法让所有资源都处于活动状态,群集会停止优先级较低的资源,以便让优先级较高的资源保持活动状态。
默认值为
0
.target-role
群集应在哪种状态下尝试保留此资源?允许的值:
Stopped
、Started
、Unpromoted
、Promoted
。默认值为
Started
.is-managed
是否允许群集启动和停止资源?允许的值:
true
、false
。如果该值设置为false
,则仍会监控资源的状态,并会报告任何故障。这与将资源设置为maintenance="true"
的情况不同。默认值为
true
.maintenance
是否可以手动处理资源?允许的值:
true
、false
。如果设置为true
,则所有资源将变为不受管状态:群集将停止监控这些资源,因此不知道它们的状态。您可以停止或重启动群集资源,不必等待群集尝试重启动它们。默认值为
false
.resource-stickiness
资源留在所处位置的自愿程度如何?
各克隆实例的默认值为
1
,所有其他资源的默认值为0
。migration-threshold
节点上的此资源应发生多少故障后才能确定该节点没有资格主管此资源?
默认值为
INFINITY
.multiple-active
如果群集发现资源在多个节点上处于活动状态,应执行什么操作?允许的值:
block
(将资源标记为不受管)、stop_start
、stop_only
。默认值为
stop_start
.failure-timeout
等待多少秒后才能像未发生故障一样运行(并在可能的情况下允许资源回到之前发生故障的节点上)?
默认值为
0
(禁用)。allow-migrate
是否允许实时迁移支持
migrate_to
和migrate_from
操作的资源。如果值设置为true
,则可在不丢失状态的情况下迁移资源。如果值设置为false
,将会在第一个节点上关闭资源,并在第二个节点上重启动该资源。ocf:pacemaker:remote
资源的默认值为true
,所有其他资源的默认值为false
。allow-unhealthy-nodes
允许资源在节点上运行,即使节点的健康状况分数会阻止它运行也不例外。
默认值为
false
。remote-node
此资源定义的远程节点的名称。这会将资源作为远程节点启用,同时定义唯一的名称用于标识该远程节点。如果未设置其他参数,此值还将作为要通过
remote-port
端口连接的主机名。默认情况下,此选项为禁用状态。
警告:使用唯一 ID此值不得与任何现有资源 ID 或节点 ID 重复。
remote-port
guest 与 pacemaker_remote 建立连接时使用的自定义端口。
默认值为
3121
.remote-addr
当远程节点的名称不是 guest 的主机名时,要连接的 IP 地址或主机名。
默认值为
remote-node
设置的值。remote-connect-timeout
等待中的 guest 连接经过多长时间后超时?
默认值为
60s
.
6.13 实例属性(参数) #
可为所有资源类的脚本指定参数,这些参数可确定脚本的行为方式和所控制的服务实例。如果资源代理支持参数,则可使用 crm_resource
命令或 Hawk2 添加这些参数。在 crm
命令行实用程序和 Hawk2 中,实例属性分别称为 params
和 Parameter
。通过以 root
身份执行以下命令,可找到 OCF 脚本支持的实例属性列表:
#
crm ra info [class:[provider:]]resource_agent
或(无可选部分):
#
crm ra info resource_agent
输出列出了所有支持的属性及其用途和默认值。
请注意,组、克隆和可升级克隆资源没有实例属性。但是,组、克隆或可升级克隆的子级会继承任何实例属性集。
6.14 资源操作 #
默认情况下,群集不会确保资源的健康状况一直良好。要指示群集确保资源能正常工作,需要将监控操作添加到资源定义中。可为所有类或资源代理添加监控操作。
监控操作可能具有以下属性:
id
您的操作名称,必须唯一。(ID 不会显示。)
name
要执行的操作。常用的值:
monitor
、start
、stop
。interval
执行操作的频率,以秒为单位。
timeout
需要等待多久才能声明操作失败。
requires
需要满足哪些条件才会发生此操作。允许的值:
nothing
、quorum
、fencing
。默认值取决于是否启用屏蔽以及资源的类别是否为stonith
。对于 STONITH 资源,默认值为nothing
。on-fail
此操作失败时执行的操作。允许的值:
ignore
:假装资源没有失败。block
:不对资源执行任何进一步操作。stop
:停止资源并且不在其他位置启动该资源。restart
:停止资源并再次启动资源(可能在不同的节点上)。fence
:关闭资源故障的节点 (STONITH)。standby
:将所有资源从资源失败的节点上移走。
enabled
如果值为
false
,将操作视为不存在。允许的值:true
、false
。role
仅当资源具有此角色时才运行操作。
record-pending
可全局设置或为单独资源设置。使 CIB 反映资源上“正在进行中的”操作的状态。
description
操作描述。
7 配置资源约束 #
配置好所有资源只是完成了该任务的一部分。即便群集知道所有需要的资源,也可能无法正确处理这些资源。使用资源约束可指定能在哪些群集节点上运行资源、以何顺序加载资源,以及特定资源依赖于其他哪些资源。
7.1 约束类型 #
提供三种不同的约束:
- 资源位置
位置约束定义资源可以、不可以或首选在哪些节点上运行。
- 资源共置
共置约束告知群集哪些资源可以或不可以在同一个节点上运行。
- 资源顺序
顺序约束定义操作的顺序。
不要为资源组的成员创建共置约束,而是应该创建指向整个资源组的共置约束。其他所有类型的约束可安全地用于资源组的成员。
不要对包含克隆资源或者应用了可升级克隆资源的资源使用任何约束。约束必须应用于克隆资源或可升级克隆资源,而不能应用于子资源。
7.2 分数和 infinity #
定义约束时,还需要指定分数。各种分数是群集工作方式的重要组成部分。事实上,从迁移资源到决定要将已降级群集中的哪个资源停止,所有这些操作都是通过操控分数来实现。分数按每个资源来计算,资源分数为负的任何节点都无法运行该资源。计算资源的分数后,群集会选择分数最高的节点。
INFINITY
目前定义为 1,000,000
。提高或降低分数需遵循以下三个基本规则:
任何值 + 无穷大 = 无穷大
任何值 - 无穷大 = -无穷大
无穷大 - 无穷大 = -无穷大
定义资源约束时,需为每个约束指定一个分数。分数表示您指派给此资源约束的值。分数较高的约束先应用,分数较低的约束后应用。通过为给定资源创建不同分数的其他位置约束,可以指定资源要故障转移至的目标节点的顺序。
7.3 资源模板和约束 #
如果定义了资源模板(请参见第 6.8 节 “创建资源模板”),则可在以下类型的约束中引用该模板:
顺序约束
共置约束
rsc_ticket 约束(用于 Geo 群集)
但是,共置约束不得包含多个对模板的引用。资源集不得包含对模板的引用。
在约束中引用的资源模板代表派生自该模板的所有原始资源。这意味着,约束将应用于引用资源模板的所有原始资源。在约束中引用资源模板是资源集的备用方式,它可以显著简化群集配置。有关资源集的细节,请参见第 7.7 节 “使用资源集定义约束”。
7.4 添加位置约束 #
位置约束决定资源可在哪个节点上运行、优先在哪个节点上运行,或者不能在哪个节点上运行。将与某个数据库相关的所有资源存放在同一个节点上,就是位置约束的一个示例。每个资源可多次添加此类约束。对于给定资源,将评估所有 location 约束。
可以使用 Hawk2 或 crmsh 来添加位置约束。
7.4.1 使用 Hawk2 添加位置约束 #
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› › 。输入唯一的
。从
列表中,选择要为其定义约束的一个或多个资源。输入一个
。分数表示您指派给此资源约束的值。正值表示资源可以在下一步中指定的 上运行。负值表示它不应在该节点上运行。分数较高的约束先应用,分数较低的约束后应用。也可以通过下拉框设置某些常用值:
要强制资源在该节点上运行,请单击箭头图标并选择
Always
。如此会将分数设置为INFINITY
。如果要禁止资源在该节点上运行,请单击箭头图标并选择
Never
。如此会将分数设置为-INFINITY
,表示资源不得在该节点上运行。要将分数设置为
0
,请单击箭头图标并选择Advisory
。这样便会禁用约束。如果您要设置资源发现,但又不想约束资源,便可使用此方法。
选择一个
。单击
以完成配置。如果操作成功,屏幕顶部会显示一条消息。
7.4.2 使用 crmsh 添加位置约束 #
location
命令定义资源可以、不可以或首选在哪些节点上运行。
下面是个简单的示例,它将首选在名为 fs1
的节点上运行资源 alice
的值设置为 100:
crm(live)configure#
location loc-fs1 fs1 100: alice
另一个示例是使用 ping 的位置:
crm(live)configure#
primitive ping ping \
params name=ping dampen=5s multiplier=100 host_list="r1 r2"
crm(live)configure#
clone cl-ping ping meta interleave=true
crm(live)configure#
location loc-node_pref internal_www \
rule 50: #uname eq alice \
rule ping: defined ping
参数 host_list 是要 ping 和计数的主机的空格分隔列表。位置约束的另一个用例是将基元资源分组为资源集。例如,如果多个资源依赖于 ping 属性来进行网络连接,则此功能会十分有用。以前,需要在配置中复制 -inf/ping
规则数次,因此不必要地增加了复杂性。
下面的示例会创建引用虚拟 IP 地址 loc-alice
和 vip1
的资源集 vip2
:
crm(live)configure#
primitive vip1 IPaddr2 params ip=192.168.1.5
crm(live)configure#
primitive vip2 IPaddr2 params ip=192.168.1.6
crm(live)configure#
location loc-alice { vip1 vip2 } inf: alice
在某些情况下,为 location
命令使用资源模式会有效且方便得多。资源模式是用两个斜杠括起的正则表达式。例如,可以使用以下命令全部匹配上述虚拟 IP 地址:
crm(live)configure#
location loc-alice /vip.*/ inf: alice
7.5 添加共置约束 #
共置约束告知群集哪些资源可以或不可以在同一个节点上运行。由于共置约束定义了资源之间的依赖性,因此您至少需要两个资源才能创建共置约束。
可以使用 Hawk2 或 crmsh 来添加共置约束。
7.5.1 使用 Hawk2 添加共置约束 #
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› › 。输入唯一的
。输入一个
。分数决定资源之间的位置关系。正值表示多个资源应在同一个节点上运行。负值表示多个资源不应在同一个节点上运行。系统会结合该分数与其他因素来决定将资源放置在何处。也可以通过下拉框设置某些常用值:
要强制资源在同一个节点上运行,请单击箭头图标并选择
Always
。如此会将分数设置为INFINITY
。如果要禁止资源在同一个节点上运行,请单击箭头图标并选择
Never
。如此会将分数设置为-INFINITY
,表示资源不得在同一个节点上运行。
要为约束定义资源,请执行以下步骤:
从
类别的下拉框中,选择某个资源(或模板)。系统即会添加该资源,并且下面会出现一个新的空下拉框。
重复此步骤添加更多资源。
由于最上面的资源依赖于下一个资源(下面的资源以此类推),群集首先会决定向哪个位置放置最后一个资源,然后根据该决定放置依赖它的资源,以此类推。如果无法满足约束,群集可能不允许运行依赖资源。
要交换共置约束中资源的顺序,请单击一个资源旁边的向上箭头图标,将其与上方的项目加以交换。
根据需要为每个资源指定其他参数(例如
Started
、Stopped
、Promote
、Demote
)。单击资源旁边的空下拉框,然后选择所需的条目。单击
以完成配置。如果操作成功,屏幕顶部会显示一条消息。
7.5.2 使用 crmsh 添加共置约束 #
colocation
命令用于定义哪些资源应在相同主机上运行,哪些资源应在不同主机上运行。
可以设置 +inf 或 -inf 的分数,用来定义必须始终或禁止在同一节点上运行的资源。您还可以使用非无限分数。在这种情况下,共置将称为建议,群集可决定不遵循它们,从而在出现冲突时不停止其他资源。
例如,如果希望 resource1
和 resource2
资源始终在同一个主机上运行,请使用以下约束:
crm(live)configure#
colocation coloc-2resource inf: resource1 resource2
对于主从配置,除了在本地运行资源以外,还需要了解当前节点是否为主节点。
7.6 添加顺序约束 #
使用顺序约束可在另一个资源满足特定条件(例如已启动、已停止或已升级为主资源)之前或之后,立即启动或停止某项服务。例如,在设备可用于系统之前,您不能挂载文件系统。由于顺序约束定义了资源之间的依赖性,因此您至少需要两个资源才能创建顺序约束。
可以使用 Hawk2 或 crmsh 来添加顺序约束。
7.6.1 使用 Hawk2 添加顺序约束 #
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
› › 。输入唯一的
。输入一个
。如果分数大于零,则顺序约束为强制性的,否则为选择性的。也可以通过下拉框设置某些常用值:
要将顺序约束设为强制规则,请单击箭头图标并选择
Mandatory
。如果只想将顺序约束设为一项建议,请单击箭头图标并选择
Optional
。Serialize
:要确保不会同时对资源执行两个停止/启动操作,请单击箭头图标并选择Serialize
。如此可确保一个资源完成启动操作后,另一个资源方可启动。典型的使用案例是启动期间在主机上产生高负载的资源。
对于顺序约束,通常可将选项
保持为启用状态。这指定了资源以相反顺序停止。要为约束定义资源,请执行以下步骤:
从
类别的下拉框中,选择某个资源(或模板)。系统即会添加该资源,并且下面会出现一个新的空下拉框。
重复此步骤添加更多资源。
最上面的资源最先启动,然后是第二个资源,以此类推。通常资源会以相反的顺序停止。
要交换顺序约束中资源的顺序,请单击一个资源旁边的向上箭头图标,将其与上方的项目加以交换。
根据需要为每个资源指定其他参数(例如
Started
、Stopped
、Promote
、Demote
)。单击资源旁边的空下拉框,然后选择所需的条目。确认更改以完成配置。如果操作成功,屏幕顶部会显示一条消息。
7.6.2 使用 crmsh 添加顺序约束 #
order
命令定义操作顺序。
例如,如果希望 resource1
始终在 resource2
前面启动,请使用以下约束:
crm(live)configure#
order res1_before_res2 Mandatory: resource1 resource2
7.7 使用资源集定义约束 #
资源集是可用来定义位置、共置或顺序约束的另一种方式,使用此方式,原始资源会全部划分到一个集合中。以前,为了实现此目的,用户可以定义一个资源组(不一定总能准确表达设计意图),也可以将每种关系定义为单个约束。随着资源和组合数目的增加,后面这种做法会导致约束过度膨胀。通过资源集进行配置不一定会降低复杂程度,但更易于理解和维护。
可以使用 Hawk2 或 crmsh 来配置资源集。
7.7.1 使用 Hawk2 通过资源集定义约束 #
要在位置约束中使用资源集,请执行以下操作:
按照过程 7.1 “添加位置约束”中除步骤 4 之外的步骤操作。不要选择单个资源,而是在按住 Ctrl 或 Shift 的同时单击鼠标选择多个资源。这样便会在位置约束中创建一个资源集。
要从位置约束中去除某个资源,请按住 Ctrl 并再次单击该资源,以将其取消选中。
要在共置或顺序约束中使用资源集,请执行以下操作:
按过程 7.2 “添加共置约束”或过程 7.3 “添加顺序约束”中所述操作,但为约束定义资源的步骤(步骤 5.a 或步骤 6.a)除外:
添加多个资源。
要创建资源集,请单击某个资源旁边的链形图标将其与上方的资源链接起来。资源集通过属于集合的资源周围的框架显现。
您可以在一个资源集中组合多个资源,或创建多个资源集。
图 7.4︰ Hawk2 - 一个共置约束中的两个资源集 #要将某个资源与其上方的资源解除链接,请单击该资源旁边的剪刀图标。
确认更改以完成约束配置。
7.7.2 使用 crmsh 通过资源集定义约束 #
例如,您可以在 crmsh 中使用资源集 (loc-alice
) 的以下配置在同一个节点 alice
上放置两个虚拟 IP(vip1
和 vip2
):
crm(live)configure#
primitive vip1 IPaddr2 params ip=192.168.1.5
crm(live)configure#
primitive vip2 IPaddr2 params ip=192.168.1.6
crm(live)configure#
location loc-alice { vip1 vip2 } inf: alice
如果想要使用资源集来替换共置约束的配置,请考虑以下两个示例:
<constraints> <rsc_colocation id="coloc-1" rsc="B" with-rsc="A" score="INFINITY"/> <rsc_colocation id="coloc-2" rsc="C" with-rsc="B" score="INFINITY"/> <rsc_colocation id="coloc-3" rsc="D" with-rsc="C" score="INFINITY"/> </constraints>
由资源集表示的相同配置:
<constraints> <rsc_colocation id="coloc-1" score="INFINITY" > <resource_set id="colocated-set-example" sequential="true"> <resource_ref id="A"/> <resource_ref id="B"/> <resource_ref id="C"/> <resource_ref id="D"/> </resource_set> </rsc_colocation> </constraints>
如果您想使用资源集来替换顺序约束的配置,请考虑以下两个示例:
<constraints> <rsc_order id="order-1" first="A" then="B" /> <rsc_order id="order-2" first="B" then="C" /> <rsc_order id="order-3" first="C" then="D" /> </constraints>
可以使用包含有序资源的资源集来实现相同的目的:
<constraints> <rsc_order id="order-1"> <resource_set id="ordered-set-example" sequential="true"> <resource_ref id="A"/> <resource_ref id="B"/> <resource_ref id="C"/> <resource_ref id="D"/> </resource_set> </rsc_order> </constraints>
资源集可以是有序的 (sequential=true
),也可以是无序的 (sequential=false
)。此外,可以使用 require-all
属性在 AND
与 OR
逻辑之间切换。
7.7.3 共置无依赖项的资源集 #
有时,将一组资源放置在同一个节点上(定义共置约束)会很有用,但前提是这些资源之间不存在硬性依赖关系。例如,您想要在同一个节点上放置两个资源,但不希望群集在其中一个资源发生故障时重启动另一个资源。
可以在 crm 外壳中使用 weak-bond
命令实现此目的:
#
crm configure assist weak-bond resource1 resource2
weak-bond
命令会自动创建一个虚设资源和针对给定资源的共置约束。
7.8 指定资源故障转移节点 #
资源在出现故障时会自动重启动。如果无法在当前节点上重启动,或者资源已在当前节点上失败 N
次,将会尝试故障转移到其他节点。每次资源失败时,其失败计数都会增加。您可以定义资源在失败几次 (migration-threshold
) 后会迁移到新节点。如果群集中存在两个以上的节点,则特定资源故障转移的节点由 High Availability 软件选择。
但可以通过为资源配置一个或多个位置约束和一个 migration-threshold
来指定此资源将故障转移到的节点。
可以使用 Hawk2 或 crmsh 来指定资源故障转移节点。
例如,假设您已经为 rsc1
资源配制了一个首选在 alice
节点上运行的位置约束。如果资源在该节点上失败,系统会检查 migration-threshold
并与失败计数进行比较。如果 failcount
>= migration-threshold,会将资源迁移到仅次于首选节点的节点。
达到阈值后,节点便无法运行失败的资源,除非资源的失败计数重置。这可以由群集管理员手动执行或通过设置资源的 failure-timeout
选项执行。
例如,采用 migration-threshold=2
和 failure-timeout=60s
设置会使资源在失败两次后迁移到新节点。允许该资源在一分钟后移回(具体取决于粘性和约束分数)。
迁移阈值概念有两个异常,发生在资源启动失败或停止失败时:
启动失败会将失败计数设置为
INFINITY
,因此一旦发生,资源便会立即迁移。停止失败会导致屏蔽(
stonith-enabled
设置为true
时,这是默认设置)。如果未定义 STONITH 资源(或
stonith-enabled
设置为false
),资源不会迁移。
7.8.1 使用 Hawk2 指定资源故障转移节点 #
登录 Hawk2:
https://HAWKSERVER:7630/
按过程 7.1 “添加位置约束”中所述,为资源配置位置约束。
按过程 8.1: 修改资源或组中的步骤 5 所述为资源添加
migration-threshold
元属性,并输入 migration-threshold 的值。值应是小于 INFINITY 的正数。要让资源的失败计数自动失效,请按过程 6.2: 使用 Hawk2 添加原始资源中的步骤 5 所述为资源添加
failure-timeout
元属性,并输入failure-timeout
的 。图 7.5︰ Hawk2:用于资源故障转移的元属性 #要指定具有资源首选项的故障转移节点,请创建其他位置约束。
如果不想让资源的失败计数自动失效,您也可以随时手动清理资源的失败计数。有关细节,请参见第 8.5.1 节 “使用 Hawk2 清理群集资源”。
7.8.2 使用 crmsh 指定资源故障转移节点 #
要确定资源故障转移,可使用元属性 migration-threshold
.如果在所有节点上的失败计数都超过 migration-threshold
,资源会一直处于停止状态。例如:
crm(live)configure#
location rsc1-alice rsc1 100: alice
通常,rsc1
首选在 alice
上运行。如果资源在该节点上失败,系统会检查 migration-threshold
并与失败计数进行比较。如果 failcount
>= migration-threshold
,资源会迁移到仅次于首选节点的节点。
根据 start-failure-is-fatal
选项,启动失败会将失败计数设置为 inf。停止故障可导致屏蔽。如果未定义 STONITH,资源不会迁移。
7.9 指定资源故障回复节点(资源粘性) #
当原始节点恢复上线并位于群集中时,资源可能会故障回复到该节点。为防止资源故障回复到之前运行它的节点,或者要指定让该资源故障回复到其他节点,请更改其资源粘性值。可以在创建资源时或之后指定资源粘性。
指定资源粘性值时请考虑以下含义:
- 值为
0
: 资源会放置在系统中最适合的位置。这意味着当性能“较好”或负载更低的节点变得可用时才会转移资源。该选项的作用几乎等同于自动故障回复,只是资源转移到的节点可能并非资源原先处于活动状态的节点。这是 Pacemaker 的默认行为。
- 值大于
0
: 资源偏向于留在当前位置,但可能会在有更合适的节点时移动。值越高表示资源越愿意留在当前位置。
- 值小于
0
: 资源更愿意移离当前位置。绝对值越高表示资源越愿意离开当前位置。
- 值为
INFINITY
: 资源始终留在当前位置,除非因节点不再适合运行资源(节点关机、节点待机、达到
migration-threshold
或配置更改)而强制关闭资源。此选项的作用几乎等同于禁用自动故障回复。- 值为
-INFINITY
: 资源总是从当前位置移走。
7.9.1 使用 Hawk2 指定资源故障回复节点 #
登录 Hawk2:
https://HAWKSERVER:7630/
按
resource-stickiness
过程 8.1: 修改资源或组 所述,为资源添加 步骤 5 元属性。为
resource-stickiness
指定介于-INFINITY
到INFINITY
之间的值。图 7.6︰ Hawk2:用于资源故障回复的元属性 #
7.10 根据资源负载影响放置资源 #
并非所有资源都相等。某些资源(如 Xen guest)需要托管它们的节点满足其容量要求。如果所放置资源的总需求超过了提供的容量,则资源性能将降低(或甚至失败)。
有鉴于此,SUSE Linux Enterprise High Availability 允许您指定以下参数:
特定节点提供的容量。
特定资源需要的容量。
资源放置整体策略。
可以使用 Hawk2 或 crmsh 来配置这些设置:
如果节点有充足的可用容量来满足资源要求,则此节点将被视为此资源的有效节点。要手动配置资源要求和节点提供的容量,请使用利用率属性。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。但是,属性值必须是整数。
如果具有利用率属性的多个资源组合在一起或具有共置约束,SUSE Linux Enterprise High Availability 会将该情况纳入考量。如有可能,会将资源放置到可以满足所有容量要求的节点上。
无法直接为资源组设置利用率属性。但是,为了简化组的配置,可以使用组中所有资源所需的总容量添加利用率属性。
SUSE Linux Enterprise High Availability 还提供了用于自动检测和配置节点容量和资源要求的方法:
NodeUtilization
资源代理可检查节点的 CPU 和 RAM 容量。要配置自动检测,请创建类别、提供方和类型如下的克隆资源:ocf:pacemaker:NodeUtilization
。每个节点上应都有一个克隆实例在运行。实例启动后,利用率部分将添加到节点的 CIB 配置中。有关详细信息,请参见crm ra info NodeUtilization
。
为了自动检测资源的最低要求(与 RAM 和 CPU 相关),我们改进了 Xen
资源代理。Xen
资源启动后,该代理会反映 RAM 和 CPU 使用情况。利用率属性会自动添加到资源配置中。
ocf:heartbeat:Xen
资源代理不应与 libvirt
搭配使用,因为 libvirt
需要能够修改计算机说明文件。
对于 libvirt
,请使用 ocf:heartbeat:VirtualDomain
资源代理。
除了检测最低要求外,您还可以通过 VirtualDomain
资源代理监控当前的利用率。它检测虚拟机的 CPU 和 RAM 使用情况。要使用此功能,请配置类别、提供方和类型如下的资源:ocf:heartbeat:VirtualDomain
。可以使用以下实例属性:
autoset_utilization_cpu
autoset_utilization_hv_memory
(用于 Xen)或autoset_utilization_host_memory
(用于 KVM)
这些属性默认设为 true
。这将在每个监控周期中更新 CIB 中的利用率值。有关详细信息,请参见crm ra info VirtualDomain
。
hv_memory
和host_memory
在 NodeUtilization
和 VirtualDomain
资源代理中,hv_memory
和 host_memory
默认都设为 true
。但 Xen 只需要 hv_memory
,KVM 只需要 host_memory
。为了避免引起混淆,我们建议禁用不需要的属性。例如:
hv_memory
的情况下为 KVM 创建资源代理 ##
crm configure primitive p_nu NodeUtilization \
params utilization_hv_memory=false \
op monitor timeout=20s interval=60
#
crm configure primitive p_vm VirtualDomain \
params autoset_utilization_hv_memory=false \
op monitor timeout=30s interval=10s
host_memory
的情况下为 Xen 创建资源代理 ##
crm configure primitive p_nu NodeUtilization \
params utilization_host_memory=false \
op monitor timeout=20s interval=60
#
crm configure primitive p_vm VirtualDomain \
params autoset_utilization_host_memory=false \
op monitor timeout=30s interval=10s
无论是手动还是自动配置容量和要求,放置策略都必须使用 placement-strategy
属性(在全局群集选项中)指定。可用值如下:
default
(默认值)不考虑利用率值。根据位置得分分配资源。如果分数相等,资源将均匀分布在节点中。
utilization
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。但仍会根据分配给节点的资源数执行负载平衡。
minimal
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试将资源集中到尽可能少的节点上(以节省其余节点上的能耗)。
balanced
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试均匀分布资源,从而优化资源性能。
可用的放置策略是最佳方法 - 它们不使用复杂的启发式解析程序即可始终实现最佳分配结果。确保正确设置资源优先级,以便首选调度最重要的资源。
7.10.1 使用 Hawk2 根据资源负载影响放置资源 #
利用率属性用于配置资源的要求及节点提供的容量。您需要先配置节点的容量,然后才能配置资源所需的容量。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。在
选项卡上,选择要配置其容量的节点。在
列中,单击向下箭头图标并选择 。在
下,将利用率属性的名称输入到空下拉框中。该名称可以是任意名称(例如
RAM_in_GB
)。单击
图标添加属性。在属性旁边的空文本框中,输入一个属性值。该值必须是整数。
图 7.7︰ Hawk2:编辑节点利用率属性 #添加所需数量的利用率属性,并为其添加相应的值。
确认更改。如果操作成功,屏幕顶部会显示一条消息。
请在创建原始资源或编辑现有原始资源时配置特定资源需从节点中获取的容量。
您需要先按过程 7.7 中所述设置群集节点的利用率属性,之后才能将利用率属性添加到资源。
登录 Hawk2:
https://HAWKSERVER:7630/
要为现有资源添加利用率属性,请转到第 8.2.1 节 “使用 Hawk2 编辑资源和组”中所述打开资源配置对话框。
› ,然后按如果要创建新资源,请转到第 6.4.1 节 “使用 Hawk2 创建原始资源”中所述继续操作。
› ,然后按在资料配置对话框中,转到
类别。从空下拉框中,选择您在过程 7.7 中已为节点配置的其中一个利用率属性。
在属性旁边的空文本框中,输入一个属性值。该值必须是整数。
添加所需数量的利用率属性,并为其添加相应的值。
确认更改。如果操作成功,屏幕顶部会显示一条消息。
配置节点提供的容量以及资源所需的容量之后,请在全局群集选项中设置布局策略。否则,容量配置将不起作用。可使用多个策略来调度负载:例如,可以将负载集中到尽可能少的节点上,或使其均匀分布在所有可用节点上。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 以打开相应的屏幕。该屏幕会显示全局群集选项和资源,以及操作默认值。从屏幕上部的空下拉框中选择
placement-strategy
。默认情况下,其值会设置为
,这表示不考虑利用率属性和值。根据要求,将
设置为适当值。确认更改。
7.10.2 使用 crmsh 根据资源负载影响放置资源 #
要配置资源要求和节点提供的容量,请使用利用率属性。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。在某些情况下,某些代理(例如 VirtualDomain
)将自行更新利用率。
在下例中,我们假定您已有群集节点和资源的基本配置,现在想要配置特定节点提供的容量以及特定资源需要的容量。
crm
添加或修改利用率属性 #以
root
用户身份登录,然后启动crm
交互式外壳:#
crm configure
要指定节点提供的容量,请使用以下命令并将占位符 NODE_1 替换为节点名称:
crm(live)configure#
node NODE_1 utilization hv_memory=16384 cpu=8
通过设置这些值,NODE_1 将会向资源提供 16 GB 内存和 8 个 CPU 核心。
要指定资源需要的容量,请使用:
crm(live)configure#
primitive xen1 Xen ... \ utilization hv_memory=4096 cpu=4
如此,资源会占用 NODE_1 的 4096 个内存单元以及 4 个 CPU 单元。
使用
property
命令配置放置策略:crm(live)configure#
property
...可用值如下:
default
(默认值)不考虑利用率值。根据位置得分分配资源。如果分数相等,资源将均匀分布在节点中。
utilization
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。但仍会根据分配给节点的资源数执行负载平衡。
minimal
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试将资源集中到尽可能少的节点上(以节省其余节点上的能耗)。
balanced
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试均匀分布资源,从而优化资源性能。
注意:配置资源优先级可用的放置策略是最佳方法 - 它们不使用复杂的启发式解析程序即可始终实现最佳分配结果。确保正确设置资源优先级,以便首选调度最重要的资源。
退出 crmsh 之前提交更改:
crm(live)configure#
commit
以下示例展示了含有四个虚拟机的三节点群集,其中的各个节点完全相同:
crm(live)configure#
node alice utilization hv_memory="4000"
crm(live)configure#
node bob utilization hv_memory="4000"
crm(live)configure#
node charlie utilization hv_memory="4000"
crm(live)configure#
primitive xenA Xen \
utilization hv_memory="3500" meta priority="10" \
params xmfile="/etc/xen/shared-vm/vm1"
crm(live)configure#
primitive xenB Xen \
utilization hv_memory="2000" meta priority="1" \
params xmfile="/etc/xen/shared-vm/vm2"
crm(live)configure#
primitive xenC Xen \
utilization hv_memory="2000" meta priority="1" \
params xmfile="/etc/xen/shared-vm/vm3"
crm(live)configure#
primitive xenD Xen \
utilization hv_memory="1000" meta priority="5" \
params xmfile="/etc/xen/shared-vm/vm4"
crm(live)configure#
property placement-strategy="minimal"
这三个节点都启动后,系统首先会将 xenA 放置到一个节点上,然后会放置 xenD。xenB 和 xenC 将分配在一起或者其中一个与 xenD 分配在一起。
如果一个节点出现故障,可用的总内存将不足以托管所有资源。将确保分配 xenA,xenD 同样如此。但是,xenB 和 xenC 只有其中之一仍可以放置,并且由于它们的优先级相同,结果尚不确定。要解决这种不确定性,需要为其中一个资源设置更高的优先级。
7.11 更多信息 #
有关配置约束的其他信息以及顺序和共置基本概念的详细背景信息,请参见 https://www.clusterlabs.org/pacemaker/doc/ 上的以下文档:
Pacemaker Explained 的 Resource Constraints 一章
Colocation Explained
Ordering Explained
8 管理群集资源 #
配置群集中的资源后,可使用群集管理工具启动、停止、清理、去除或迁移资源。本章介绍如何使用 Hawk2 或 crmsh 执行资源管理任务。
8.1 显示群集资源 #
8.1.1 使用 crmsh 显示群集资源 #
管理群集时,crm configure show
命令可列出当前 CIB 对象(例如群集配置、全局选项、原始资源等):
#
crm configure show
node 178326192: alice
node 178326448: bob
primitive admin_addr IPaddr2 \
params ip=192.168.2.1 \
op monitor interval=10 timeout=20
primitive stonith-sbd stonith:external/sbd \
params pcmk_delay_max=30
property cib-bootstrap-options: \
have-watchdog=true \
dc-version=1.1.15-17.1-e174ec8 \
cluster-infrastructure=corosync \
cluster-name=hacluster \
stonith-enabled=true \
placement-strategy=balanced \
standby-mode=true
rsc_defaults rsc-options: \
resource-stickiness=1 \
migration-threshold=3
op_defaults op-options: \
timeout=600 \
record-pending=true
如果您有许多资源,show
的输出会十分冗长。为限制输出,请使用资源名称。例如,如果只想列出原始资源 admin_addr
的属性,请将资源名称追加到 show
后:
#
crm configure show admin_addr
primitive admin_addr IPaddr2 \
params ip=192.168.2.1 \
op monitor interval=10 timeout=20
但在某些情况下,您可能希望更精确地限制特定资源的输出。那么,您可以使用过滤器。过滤器可将输出限定到特定组件。例如,要想仅列出节点,可使用 type:node
:
#
crm configure show type:node
node 178326192: alice
node 178326448: bob
如果您还想列出原始资源,请使用 or
运算符:
#
crm configure show type:node or type:primitive
node 178326192: alice
node 178326448: bob
primitive admin_addr IPaddr2 \
params ip=192.168.2.1 \
op monitor interval=10 timeout=20
primitive stonith-sbd stonith:external/sbd \
params pcmk_delay_max=30
此外,要搜索以特定字符串开头的对象,请使用以下表示法:
#
crm configure show type:primitive and 'admin*'
primitive admin_addr IPaddr2 \
params ip=192.168.2.1 \
op monitor interval=10 timeout=20
要列出所有可用类型,请输入 crm configure show type:
,然后按 →| 键。Bash 补全功能会列出所有类型。
8.2 编辑资源和组 #
可以使用 Hawk2 或 crmsh 来编辑资源或组。
8.2.1 使用 Hawk2 编辑资源和组 #
创建资源后,您随时都可以编辑其配置,根据需要调整参数、操作或元属性。
登录 Hawk2:
https://HAWKSERVER:7630/
在 Hawk2 的
屏幕中,转到 列表。在
列中,单击要修改的资源或组旁边的向下箭头图标,然后选择 。资源配置屏幕即会打开。
图 8.1︰ Hawk2 - 编辑原始资源 #在配置屏幕顶部,可以选择要执行的操作。
如果要编辑原始资源,可以执行以下操作:
复制资源
重命名资源(更改其 ID)
删除资源
如果要编辑组,可以执行以下操作:
创建要添加到此组的新原始资源
重命名组(更改其 ID)
拖放组成员以改变其排列顺序
要添加新参数、操作或元属性,请从空下拉框中选择一项。
要编辑
类别中的任何值,请单击相应项的 图标,为该操作输入不同的值,然后单击 。完成后,单击资源配置屏幕中的
按钮,以确认对参数、操作或元属性所做的更改。如果操作成功,屏幕顶部会显示一条消息。
8.2.2 使用 crmsh 编辑组 #
要更改组成员的顺序,请使用 modgroup
子命令中的 configure
命令。例如,使用下面的命令可将原始资源 Email
移到 Public-IP
前面:
crm(live)configure#
modgroup g-mailsvc add Email before Public-IP
要从组中去除某个资源(例如 Email
),请使用以下命令:
crm(live)configure#
modgroup g-mailsvc remove Email
8.3 启动群集资源 #
启动群集资源之前,应确保资源设置正确。例如,如果使用 Apache 服务器作为群集资源,请先设置 Apache 服务器。完成 Apache 配置,然后再启动群集中的相应资源。
当您通过 High Availability 软件管理资源时,就不能以其他方式启动或停止该资源(例如,不能在群集外手动启动或停止,或者在系统引导或重引导时启动或停止)。该 High Availability 软件会负责所有服务的启动或停止操作。
但如果要检查服务是否配置正确,可手动启动该服务,不过请确保在 High Availability 软件接管前再次停止该服务。
要对群集当前管理的资源进行干预,请先将资源设置为 maintenance mode
。有关详细信息,请参见 过程 28.5 “使用 Hawk2 将资源置于维护模式”。
可以使用 Hawk2 或 crmsh 来启动群集资源。
8.3.1 使用 Hawk2 启动群集资源 #
使用 Hawk2 创建资源时,可通过 target-role
元属性设置其初始状态。如果将其值设置为 stopped
,则该资源在创建后不会自动启动。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。 列表还会显示 。选择要启动的资源。在相应的
列中,单击 图标。要继续,请对显示的消息进行确认。
资源启动后,Hawk2 会将资源的
变为绿色,并显示当前运行该资源的节点。8.3.2 使用 crmsh 启动群集资源 #
要启动新群集资源,需要提供相应的标识符。
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm
切换到资源级别:
crm(live)#
resource
使用
start
启动资源,然后按 →| 键显示所有已知资源:crm(live)resource#
start ID
8.4 停止群集资源 #
8.4.1 使用 crmsh 停止群集资源 #
要停止一个或多个现有群集资源,需要提供相应的标识符。
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm
切换到资源级别:
crm(live)#
resource
使用
stop
停止资源,然后按 →| 键显示所有已知资源:crm(live)resource#
stop ID
您一次可以停止多个资源:
crm(live)resource#
stop ID1 ID2
...
8.5 清理群集资源 #
资源失败时会自动重启动,但每次失败都会使资源的失败计数增加。
如果为资源设置了 migration-threshold
,当失败次数达到该迁移阈值时,节点便无法再运行该资源。
默认情况下,失败计数不会自动重置。您可以通过为资源设置 failure-timeout
选项将失败计数配置为自动重置,也可以使用 Hawk2 或 crmsh 手动重置失败计数。
8.5.1 使用 Hawk2 清理群集资源 #
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
。 列表还会显示 。转到要清理的资源。在
列中,单击向下箭头按钮并选择 。要继续,请对显示的消息进行确认。如此即会执行
crm resource cleanup
命令并在所有节点上清理该资源。
8.5.2 使用 crmsh 清理群集资源 #
打开外壳并以
root
用户身份登录。获取所有资源的列表。
#
crm resource status
Full List of Resources * admin-ip (ocf:heartbeat:IPaddr2): Started * stonith-sbd (stonith:external/sbd): Started * Resource Group: dlm-clvm: * dlm: (ocf:pacemaker:controld) Started * clvm: (ocf:heartbeat:lvmlockd) Started显示资源的失败计数:
#
crm resource failcount RESOURCE show NODE
例如,要显示节点
alice
上dlm
资源的失败计数,请使用以下命令:#
crm resource failcount dlm show alice
scope=status name=fail-count-dlm value=2清理资源:
#
crm resource cleanup RESOURCE
此命令会清理所有节点上的资源。如果该资源是组的一部分,crmsh 还会清理组中的其他资源。
8.6 去除群集资源 #
要从群集中去除资源,请按照下面的 Hawk2 或 crmsh 过程操作,以免出现配置错误。
8.6.1 使用 Hawk2 去除群集资源 #
登录 Hawk2:
https://HAWKSERVER:7630/
按过程 8.5 “清理资源”中所述清理所有节点上的资源。
停止资源:
从左侧导航栏中,选择
› 。 列表还会显示 。在
列中,单击资源旁边的 按钮。要继续,请对显示的消息进行确认。
资源停止后,
列会反映此变化。
删除资源:
从左侧导航栏中,选择
› 。在
列表中,转到相应资源。在 列中,单击资源旁边的 图标。要继续,请对显示的消息进行确认。
8.6.2 使用 crmsh 去除群集资源 #
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm
获取资源列表:
crm(live)#
resource status
Full List of Resources: * admin-ip (ocf:heartbeat:IPaddr2): Started * stonith-sbd (stonith:external/sbd): Started * nfsserver (ocf:heartbeat:nfsserver): Started停止要去除的资源:
crm(live)#
resource stop RESOURCE
删除资源:
crm(live)#
configure delete RESOURCE
8.7 迁移群集资源 #
当软件或硬件发生故障时,群集会根据您可以定义的特定参数(例如迁移阈值或资源粘性),自动将资源故障转移(迁移)。您也可以手动将资源迁移到群集中的其他节点,或将其从当前节点移出,让群集决定将资源放置在哪里。
可以使用 Hawk2 或 crmsh 来迁移群集资源。
8.7.1 使用 Hawk2 迁移群集资源 #
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。 列表还会显示 。在
列表中,选择相应资源。在
列中,单击向下箭头按钮并选择 。随后打开的窗口中会提供以下选项:
-INFINITY
的位置约束。或者,您也可以将资源移到另一节点上。此选项将为目标节点创建分数为
INFINITY
的位置约束。
确认您的选择。
要使资源重新移回,请按如下操作:
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。 列表还会显示 。在
列表中,转到相应资源。在
列中,单击向下箭头按钮并选择 。要继续,请对显示的消息进行确认。Hawk2 会使用
crm_resource
--clear
命令。资源可以移回到其原始位置,也可以留在当前位置(取决于资源粘性)。
有关详细信息,请参见 https://www.clusterlabs.org/pacemaker/doc/ 上的 Pacemaker Explained。请参见 Resource Migration 部分。
8.7.2 使用 crmsh 迁移群集资源 #
可以使用 move
命令来完成此任务。例如,要将 ipaddress1
资源迁移到名为 bob
的群集节点,请使用以下命令:
#
crm resource
crm(live)resource#
move ipaddress1 bob
8.8 使用标记对资源分组 #
使用标记可以一次性引用多个资源,而无需在这些资源之间创建任何共置或顺序关系。此功能十分适用于对概念上相关的资源进行分组。例如,如果有多个资源与某个数据库相关,您可以创建名为 databases
的标记,并将与该数据库相关的所有资源都添加到此标记。这样,只需使用一条命令就能停止或启动所有这些资源。
标记也可以用于约束。例如,loc-db-prefer
位置约束将应用到标记了 databases
的一组资源:
location loc-db-prefer databases 100: alice
可以使用 Hawk2 或 crmsh 来创建标记。
8.8.1 使用 Hawk2 通过标记对资源分组 #
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› › 。输入唯一的
。从
列表中,选择要使用标记引用的资源。单击
以完成配置。如果操作成功,屏幕顶部会显示一条消息。
8.8.2 使用 crmsh 通过标记对资源分组 #
例如,如果有多个资源与某个数据库相关,您可以创建名为 databases
的标记,并将与该数据库相关的所有资源都添加到此标记:
#
crm configure tag databases: db1 db2 db3
这样,只需使用一条命令就能启动所有这些资源:
#
crm resource start databases
同样,也可以一次性停止所有这些资源:
#
crm resource stop databases
9 管理远程主机上的服务 #
在最近几年中,是否能够监控和管理远程主机上的服务已变得越来越重要。SUSE Linux Enterprise High Availability 11 SP3 提供了通过监控插件监控远程主机上的服务的精细功能。最近添加的 pacemaker_remote
服务现在可让 SUSE Linux Enterprise High Availability 15 SP6 全面管理和监控远程主机上的资源,就如同这些资源是真实的群集节点一样 — 而您无需在远程计算机上安装群集堆栈。
9.1 使用监控插件监控远程主机上的服务 #
虚拟机的监控可以通过 VM 代理来完成(只有在超级管理程序中出现 guest 时才可选择 VM 代理),或者通过从 VirtualDomain 或 Xen 代理调用外部脚本来完成。直到现在为止,仍只有通过在虚拟机中对高可用性堆栈进行完全设置才能实现更细化的监控。
现在,通过提供对监控插件(以前称为 Nagios 插件)的支持,SUSE Linux Enterprise High Availability 还可让您监控远程主机上的服务。您可以收集 guest 上的外部状态,而无需修改 guest 映像。例如,VM guest 可能会运行需要能够访问的 Web 服务或简单的网络资源。现在,有了 Nagios 资源代理,您就可以监控 guest 上的 Web 服务或网络资源。如果这些服务不再可访问,SUSE Linux Enterprise High Availability 会触发相应 guest 的重启动或迁移。
如果您的 guest 依赖于某项服务(例如,guest 要使用 NFS 服务器),则这项服务可以是由群集管理的普通资源,也可以是使用 Nagios 资源进行监控的外部服务。
要配置 Nagios 资源,必须在主机上安装以下软件包:
monitoring-plugins
monitoring-plugins-metadata
YaST 或 Zypper 会根据需要解决对后续软件包的任何依赖性问题。
将监控插件配置为属于资源容器(通常是 VM)的资源便是其中一个典型用例。如果容器的任何资源发生故障,容器会重启动。有关配置示例,请参见例 9.1 “为监控插件配置资源”。或者,若要使用 Nagios 资源代理通过网络监控主机或服务,也可以将这些代理配置为普通资源。
primitive vm1 VirtualDomain \ params hypervisor="qemu:///system" config="/etc/libvirt/qemu/vm1.xml" \ op start interval="0" timeout="90" \ op stop interval="0" timeout="90" \ op monitor interval="10" timeout="30" primitive vm1-sshd nagios:check_tcp \ params hostname="vm1" port="22" \ 1 op start interval="0" timeout="120" \ 2 op monitor interval="10" group g-vm1-and-services vm1 vm1-sshd \ meta container="vm1" 3
支持的参数与监控插件的长选项相同。监控插件通过参数 | |
由于需要一段时间才能使 guest 操作系统启动并使其服务运行,因此监控资源的启动超时必须足够长。 | |
|
以上示例仅包含一个用于 check_tcp
插件的资源,但您可以针对不同的插件类型(例如 check_http
或 check_udp
)配置多个资源。
如果服务的主机名相同,还可以为组指定 hostname
参数,而无需为各个基元资源一一添加该参数。例如:
group g-vm1-and-services vm1 vm1-sshd vm1-httpd \ meta container="vm1" \ params hostname="vm1"
如果监控插件所监控的任何服务在 VM 中失败,群集会检测到该情况并重启动容器资源(即相应 VM)。可以通过指定服务监控操作的 on-fail
属性来配置在这种情况下要执行的操作。其默认值为 restart-container
.
系统在考虑 VM 的 migration-threshold 时,会将服务的失败计数纳入考量。
9.2 使用 pacemaker_remote
管理远程节点上的服务 #
使用 pacemaker_remote
服务可将 High Availability 群集扩展到虚拟节点或远程裸机计算机。这些虚拟节点或远程裸机无需运行群集堆栈就能成为群集的成员。
SUSE Linux Enterprise High Availability 现在可以启动虚拟环境(KVM 和 LXC)以及驻留在这些虚拟环境中的资源,而不要求虚拟环境运行 Pacemaker 或 Corosync。
对于同时要管理用作群集资源的虚拟机以及 VM 中驻留的资源的用例,您现在可以使用以下设置:
“常规”(裸机)群集节点运行 SUSE Linux Enterprise High Availability。
虚拟机运行
pacemaker_remote
服务(几乎不需要在 VM 端进行任何配置)。“常规”群集节点上的群集堆栈会启动 VM 并连接到 VM 上运行的
pacemaker_remote
服务,以将 VM 作为远程节点集成到群集中。
由于远程节点上未安装群集堆栈,因此这意味着:
远程节点不参与仲裁。
远程节点无法成为 DC。
远程节点不受可伸缩性限制(Corosync 将成员数限制为 32 个节点)的约束。
remote_pacemaker
中介绍了有关 Article “Pacemaker 远程快速入门” 服务的更多信息,包括多个用例和详细的设置说明。
10 添加或修改资源代理 #
需由群集管理的所有任务都必须可用作资源。需要考虑两个主要的组:资源代理和 STONITH 代理。对于这两个类别,您都可以添加自己的代理,根据需要扩展群集的功能。
10.1 STONITH 代理 #
群集有时会检测到某个节点行为异常,需要删除此节点。这称为屏蔽,通常使用 STONITH 资源实现。
由于无法了解 SSH 可能对其他系统问题如何做出反应。出于此原因,生产环境不支持外部 SSH/STONITH 代理(例如 stonith:external/ssh
)。如果您仍要使用此类代理进行测试,请安装 libglue-devel 软件包。
要(从软件端)获取所有当前可用的 STONITH 设备列表,请使用 crm ra list stonith
命令。如果您找不到惯用的代理,请安装 -devel 软件包。有关 STONITH 设备和资源代理的详细信息,请参见第 12 章 “屏障和 STONITH”。
目前没有关于如何编写 STONITH 代理的文档。如果要写入新的 STONITH 代理,请参见 cluster-glue 软件包的源中提供的示例。
10.2 编写 OCF 资源代理 #
所有 OCF 资源代理 (RA) 都存放在 /usr/lib/ocf/resource.d/
中,请参见第 6.2 节 “支持的资源代理类别”了解详细信息。每个资源代理都必须支持以下操作才能进行控制:
start
启动或启用资源
stop
停止或禁用资源
status
返回资源状态
monitor
与
status
类似,但还会检查是否存在意外状态validate
验证资源配置
meta-data
返回有关资源代理的 XML 格式的信息
创建 OCF RA 的常规过程大概如下:
载入
/usr/lib/ocf/resource.d/pacemaker/Dummy
文件作为模板。为每个新资源代理创建新的子目录,以避免发生命名冲突。例如,如果您的资源组
kitchen
包含资源coffee_machine
,可将此资源添加到/usr/lib/ocf/resource.d/kitchen/
目录。要访问此资源代理,请执行命令crm
:#
crm configure primitive coffee_1 ocf:coffee_machine:kitchen
...实施其他外壳功能,并用不同名称保存文件。
有关编写 OCF 资源代理的更多细节,请参见 https://www.clusterlabs.org/pacemaker/doc/ 上的 Pacemaker Administration 指南。在第 1 章 “产品概述”中可以找到有关若干概念的特殊信息。
10.3 OCF 返回代码和故障恢复 #
根据 OCF 规范,有一些关于操作必须返回的退出代码的严格定义。群集会始终检查返回代码与预期结果是否相符。如果结果与预期值不匹配,则将操作视为失败,并将启动恢复操作。有三种类型的故障恢复:
恢复类型 |
说明 |
群集执行的操作 |
---|---|---|
软 |
发生临时错误。 |
重启动资源或将它移到新位置。 |
硬 |
发生非临时错误。错误可能特定于当前节点。 |
将资源移到别处,避免在当前节点上重试该资源。 |
致命 |
发生所有群集节点共有的非临时错误。这表示指定了错误配置。 |
停止资源,避免在任何群集节点上启动该资源。 |
假定某个操作被视为已失败,下表概括了不同的 OCF 返回代码。此外,该表还显示了群集在收到相应错误代码时会启动的恢复类型。
OCF 返回代码 |
OCF 别名 |
说明 |
恢复类型 |
---|---|---|---|
0 |
OCF_SUCCESS |
成功。命令成功完成。这是所有启动、停止、升级和降级命令的所需结果。 |
软 |
1 |
OCF_ERR_GENERIC |
通用“出现问题”错误代码。 |
软 |
2 |
OCF_ERR_ARGS |
资源配置在此计算机上无效(例如,它引用了在节点上找不到的位置/工具)。 |
硬 |
3 |
OCF_ERR_UNIMPLEMENTED |
请求的操作未实现。 |
硬 |
4 |
OCF_ERR_PERM |
资源代理没有足够的特权,不能完成此任务。 |
硬 |
5 |
OCF_ERR_INSTALLED |
资源所需的工具未安装在此计算机上。 |
硬 |
6 |
OCF_ERR_CONFIGURED |
资源配置无效(例如,缺少必需的参数)。 |
致命 |
7 |
OCF_NOT_RUNNING |
资源未运行。群集不会尝试停止针对任何操作返回此代码的资源。
此 OCF 返回代码可能需要或不需要资源恢复,这取决于所需的资源状态。如果不是预期情况,请进行 |
无 |
8 |
OCF_RUNNING_PROMOTED |
资源正以已升级模式运行。 |
软 |
9 |
OCF_FAILED_PROMOTED |
资源处于已升级模式,但已失败。资源将再次被降级、停止再重启动(然后也可能升级)。 |
软 |
其他 |
无 |
自定义错误代码。 |
软 |
11 监控群集 #
本章介绍如何监控群集的健康状况并查看其历史记录。
11.1 监控群集状态 #
Hawk2 提供不同的屏幕用于监控单个群集和多个群集:
和 屏幕。11.1.1 监控单个群集 #
要监控单个群集,请使用
屏幕。当您登录 Hawk2 后,默认会显示 屏幕。右上角的图标可让用户一目了然地获悉群集状态。如需更多细节,请查看以下类别:- 错误
如果发生了错误,会显示在页面顶部。
- 资源
显示配置的资源,包括它们的
、 (ID)、 (运行资源的节点)和资源代理 。在 列中,您可以启动或停止资源,触发多个操作或查看细节。可以触发的操作包括将资源设置为维护模式(或去除维护模式)、将其迁移到其他节点、清理资源、显示任何最近的事件,或编辑资源。- 节点
显示属于您登录的群集站点的节点,包括节点的
和 。在 和 列中,您可以为节点设置或去除maintenance
或standby
标志。 列可用于查看节点的最近事件或其他细节:例如,查看是否为相应节点设置了standby
、utilization
或maintenance
属性。- 票据
仅当已配置了票据的情况下才显示(用于与 Geo 群集配合使用)。
11.1.2 监控多个群集 #
要监控多个群集,请使用 Hawk2
。 屏幕中显示的群集信息存储在服务器端。群集节点之间会同步这些信息(如果已配置群集节点之间的无口令 SSH 访问权限)。不过,运行 Hawk2 的计算机甚至不需要属于任何群集也可实现该目的,它可以是不相关的独立系统。除了一般的 Hawk2 要求之外,还需要满足以下先决条件才能使用 Hawk2 监控多个群集:
要通过 Hawk2 的
监控的所有群集都必须运行 SUSE Linux Enterprise High Availability 15 SP6。如果您之前未在每个群集节点上用自己的证书(或官方证书颁发机构签名的证书)替换 Hawk2 的自我签名证书,请执行以下操作:在每个群集的每个节点上至少登录 Hawk2 一次。验证证书(或在浏览器中添加例外以绕过警告)。否则,Hawk2 将无法连接到群集。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。Hawk2 会显示当前群集站点的资源和节点的概述。此外,它还会显示已配置为与 Geo 群集配合使用的所有
。如需有关此视图中所用图标的信息,请单击 。要搜索资源 ID,请在 文本框中输入名称 (ID)。若只想显示特定节点,请单击过滤器图标并选择一个过滤选项。图 11.2︰ 包含一个群集站点 (amsterdam
) 的 Hawk2 仪表板 #要为多个群集添加仪表板,请执行以下操作:
要查看群集站点的更多细节或管理群集站点,请切换到站点的选项卡并单击锁链图标。
Hawk2 会在新的浏览器窗口或选项卡中打开此站点的
视图。在此视图中,您可以管理 Geo 群集的这部分内容。要从仪表板中去除某个群集,请单击该群集细节右侧的
x
图标。
11.2 校验群集健康状况 #
您可以使用 Hawk2 或 crmsh 来检查群集的健康状况。
11.2.1 使用 Hawk2 校验群集健康状况 #
Hawk2 提供了一个向导用来检查和检测群集存在的问题。分析完成后,Hawk2 会创建包含更多细节的群集报告。要校验群集健康状况并生成报告,Hawk2 需要具有在节点之间进行无口令 SSH 访问的权限。否则,它只能从当前节点收集数据。如果您已使用 crm 外壳提供的引导脚本设置群集,那么此时已配置好无口令 SSH 访问权限。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。展开
类别。选择
向导。单击
进行确认。输入群集的 root 口令,然后单击
。Hawk2 会生成报告。
11.2.2 使用 crmsh 检查健康状况 #
可以使用所谓的脚本来显示群集或节点的“健康”状态。脚本可以执行不同的任务,并不局限于显示健康状况。不过,本节重点介绍如何获取健康状况。
要获取有关 health
命令的所有细节,请使用 describe
:
#
crm script describe health
该命令将显示所有参数及其默认值的说明和列表。要执行脚本,请使用 run
:
#
crm script run health
如果您希望只运行整套命令中的一个步骤,可以使用 describe
命令列出 Steps 类别中的所有可用步骤。
例如,以下命令将执行 health
命令的第一个步骤。将在 health.json
文件中存储输出以供做进一步调查:
#
crm script run health statefile='health.json'
您也可以使用 crm cluster health
运行以上命令。
有关脚本的更多信息,请参见 https://crmsh.github.io/scripts/。
11.3 查看群集历史记录 #
Hawk2 提供了以下用于查看群集上的过去事件(按不同级别和不同详细程度)的功能:
您也可以使用 crmsh 查看群集历史记录信息:
11.3.1 查看节点或资源的最近事件 #
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。它会列出 和 。要查看资源的最近事件:
单击
并选择相应的资源。在资源的
列中,单击向下箭头按钮并选择 。Hawk2 会打开一个新窗口,显示最近事件的表视图。
要查看节点的最近事件:
单击
并选择相应的节点。在节点的
列中,选择 。Hawk2 会打开一个新窗口,显示最近事件的表视图。
图 11.4︰ “最近的事件”表 #
11.3.2 使用历史记录浏览器生成群集报告 #
从左侧导航栏中,选择
› ,以访问 。 可让您创建详细的群集报告并查看转换信息。它提供以下选项:创建特定时间内的群集报告。Hawk2 会调用
crm report
命令来生成报告。允许您上载直接使用 crm 外壳创建的或位于不同群集上的
crm report
存档。
生成或上载报告后,它们会显示在
下方。在报告列表中,您可以显示报告的细节,或者下载或删除报告。登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。要创建群集报告:
要立即启动报告,请单击
。要修改报告的时间段,请单击建议时间段的任意位置并从下拉框中选择另一个选项。您还可以分别输入
的开始日期、结束日期及小时。要启动报告,请单击 。报告生成后会显示在
下方。
要上载群集报告,
crm report
存档必须位于您可通过 Hawk2 访问的文件系统中。按如下所示继续:切换到
选项卡。报告上载后会显示在
下方。
要下载或删除报告,请在
列中单击报告旁边的相应图标。要查看历史记录浏览器中的报告细节,请单击报告的名称,或从 列中选择 。
图 11.6︰ Hawk2 报告细节 #单击
按钮返回到报告列表。
报告的名称。
报告的开始时间。
报告的结束时间。
报告所涵盖的群集中的转换次数以及所有转换的时间表。要了解如何查看转换的更多细节,请参见第 11.3.3 节。
节点事件。
资源事件。
11.3.3 在历史记录浏览器中查看转换细节 #
对于每个转换,群集都会保存其所提供的状态副本,作为对 pacemaker-schedulerd
的输入。会记录此存档的路径。所有 pe-*
文件都在指定协调器 (DC) 上生成。由于群集中的 DC 可能会更换,因此可能存在来自多个节点的 pe-*
文件。所有 pe-*
文件都是保存的 CIB 快照,pacemaker-schedulerd
在执行计算时会将其用作输入。
在 Hawk2 中,您可以显示每个 pe-*
文件的名称、创建时间以及文件是在哪个节点上创建的。 可以根据相应的 pe-*
文件直观显示以下细节:
显示属于转换的日志记录数据片段。显示以下命令的输出(包括资源代理的日志消息):
crm history transition peinput
显示创建
pe-*
文件时的群集配置。显示选定
pe-*
文件与下一个文件之间的配置和状态差异。显示属于转换的日志记录数据片段。显示以下命令的输出:
crm history transition log peinput
这包括来自以下守护程序的细节:
pacemaker-controld
、pacemaker-schedulerd
和pacemaker-execd
。显示转换的图形表示形式。如果您单击
,系统会模拟该计算(与pacemaker-schedulerd
执行的计算完全一样),并生成直观的图表。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。如果报告已生成或上载,它们会显示在过程 11.2 中所述生成或上载报告。
列表中。否则,请按单击报告的名称或从历史记录浏览器中的报告细节。
列中选择 以打开要访问转换细节,您需要在下面显示的转换时间表中选择一个转换点。使用
和 以及 和 图标查找您感兴趣的转换。要显示
pe-input*
文件的名称、创建时间以及文件是在哪个节点上创建的,请将鼠标指针悬停在时间线的转换点上。要查看历史记录浏览器中的转换细节,请单击要了解其详细信息的转换点。
要显示历史记录浏览器中的转换细节中所述的内容。
、 、 、 或 ,请单击相应的按钮以显示要返回报告列表,请单击
按钮。
11.3.4 使用 crmsh 检索历史记录信息 #
调查群集的历史记录是一项复杂的任务。为简化此任务,crmsh 包含了 history
命令及其子命令。假定已正确配置 SSH。
每个群集都会移动状态、迁移资源或启动重要进程。这些操作均可通过 history
子命令进行检索。
默认情况下,所有 history
命令会查看最近一小时的事件。要更改此时间段,请使用 limit
子命令。语法是:
#
crm history
crm(live)history#
limit FROM_TIME [TO_TIME]
有效示例如下所示:
limit 4:00pm
,limit 16:00
上述两个命令表达同一个意思:今天下午 4 点。
limit 2012/01/12 6pm
2012 年 1 月 12 日下午 6 点
limit "Sun 5 20:46"
当年当月 5 日(星期日)晚上 8:46
要查找更多示例以及如何创建时间段的信息,请访问 https://labix.org/python-dateutil。
info
子命令可显示 crm report
涉及的所有参数:
crm(live)history#
info
Source: live
Period: 2012-01-12 14:10:56 - end
Nodes: alice
Groups:
Resources:
要想只对 crm report
使用特定参数,请通过 help
子命令查看可用的选项。
要降低细节级别,请使用 detail
子命令及级别:
crm(live)history#
detail 1
级别数字越高,报告就越详细。默认值为 0
(零)。
设置上述参数后,使用 log
显示日志消息。
要显示上次转换操作,请使用以下命令:
crm(live)history#
transition -1
INFO: fetching new logs, please wait ...
此命令会获取日志并运行 dotty
(来自 graphviz 软件包)以显示转换图。外壳会打开日志文件,您在其中可以使用 ↓ 和 ↑ 光标键浏览内容。
如果希望不要打开转换图,请使用 nograph
选项:
crm(live)history#
transition -1 nograph
11.4 使用 SysInfo
资源代理监控系统健康状况 #
为避免节点耗尽磁盘空间因而无法管理已分配给该它的任何资源,SUSE Linux Enterprise High Availability 提供了资源代理,即 ocf:pacemaker:SysInfo
。使用此代理可监控节点磁盘分区的健康状况。SysInfo 资源代理会创建名为 #health_disk
的节点属性,如果任何受监控磁盘的可用空间低于指定限额,该属性就会变为 red
。
要定义 CRM 在节点健康状况到达临界状态时应如何反应,请使用全局群集选项 node-health-strategy
。
要在某个节点耗尽磁盘空间时从该节点自动移除资源,请执行以下操作:
配置
ocf:pacemaker:SysInfo
资源:primitive sysinfo ocf:pacemaker:SysInfo \ params disks="/tmp /var"1 min_disk_free="100M"2 disk_unit="M"3 \ op monitor interval="15s"
为了完成资源配置,请创建
ocf:pacemaker:SysInfo
的克隆并在每个群集节点上启动此克隆。将
node-health-strategy
设置为migrate-on-red
:property node-health-strategy="migrate-on-red"
如果
#health_disk
属性设置为red
,pacemaker-schedulerd
会为该节点的资源分数加-INF
。这样所有资源都会从此节点中移出。STONITH 资源将是最后一个停止的资源,但即使 STONITH 资源不再运行,该节点仍可屏蔽。屏蔽对 CIB 有直接访问权且将继续起作用。
当节点健康状况变成 red
状态后,解决会导致问题的状况。然后清除 red
状态,使节点能够再次运行资源。登录到群集节点并使用下列其中一种方法:
执行以下命令:
#
crm node status-attr NODE delete #health_disk
在该节点上重启动群集服务。
重引导该节点。
该节点会恢复正常状态并可再次运行资源。
12 屏障和 STONITH #
屏蔽在 HA(高可用性)计算机群集中是一个非常重要的概念。群集有时会检测到某个节点行为异常,需要删除此节点。这称为屏蔽,通常使用 STONITH 资源实现。屏蔽可以定义为一种使 HA 群集具有已知状态的方法。
群集中的每个资源均带有状态。例如:“资源 r1 已在 alice 上启动”。在 HA 群集中,这种状态暗示了“资源 r1 在除 alice 外的所有节点上都处于停止状态”,因为群集必须确保每个资源只能在一个节点上启动。每个节点都必须报告资源发生的每个更改。这样群集状态就是资源状态和节点状态的集合。
当节点或资源的状态无法十分肯定地确立时,将进行屏蔽。即使在群集未感知到给定节点上发生的事件时,屏蔽也可确保此节点不会运行任何重要资源。
12.1 屏蔽类别 #
有两类屏蔽:资源级别屏蔽和节点级别屏蔽。后者是本章的主题。
- 资源级别屏蔽
资源级别屏蔽可确保对给定资源的排它访问。此情况的常见示例就是通过 SAN 光纤通道开关(用于锁定节点不让访问其磁盘)或 SCSI 保留之类的方法更改节点的区域。有关示例,请参见第 13.10 节 “其他存储保护机制”。
- 节点级别屏蔽
节点级别屏蔽可彻底防止故障节点访问共享资源。这种屏蔽通常采用一种简单但却粗暴的方式来完成,即重置或关闭节点。
12.2 节点级别屏蔽 #
在 Pacemaker 群集中,节点级别屏蔽的实施方式是 STONITH(关闭其他节点)。SUSE Linux Enterprise High Availability 中包含 stonith
命令行工具,它是可远程将群集节点关机的可扩展接口。有关可用选项的概述,请运行 stonith --help
或参见 stonith
的手册页了解更多信息。
12.2.1 STONITH 设备 #
要使用节点级屏蔽,首先需要有屏蔽设备。要获取 SUSE Linux Enterprise High Availability 所支持 STONITH 设备的列表,请在任何节点上运行以下命令之一:
#
stonith -L
或
#
crm ra list stonith
STONITH 设备可分为以下类别:
- 电源分配单元 (PDU)
在管理重要网络、服务器和数据中心设备的电源容量和功能方面,电源分配单元起着至关重要的作用。它可以提供对已连接设备的远程负载监控和独立电源出口控制,以实现远程电源循环。
- 不间断电源 (UPS)
公共用电出现故障时,通过其他来源供电的稳定电源可为连接的设备提供应急电源。
- 刀片电源控制设备
如果是在刀片组上运行群集,则刀片外壳中的电源控制设备就是提供屏蔽的唯一候选。此设备必须能够管理单刀片计算机。
- 无人值守设备
无人值守设备(IBM RSA、HP iLO 和 Dell DRAC)正变得越来越普遍,在未来它们甚至可能成为现成可用计算机上的标准配置。然而,它们相比 UPS 设备有一点不足,因为它们与主机(群集节点)共享一个电源。如果节点持续断电,则认为控制该节点的设备失去作用。在这种情况下,CRM 将继续无限期地尝试屏蔽节点,而所有其他资源操作都将等待屏蔽/STONITH 操作完成。
- 测试设备
测试设备仅用于测试目的。它们通常对硬件更加友好。将群集投放到生产环境之前,必须以真实的屏蔽设备进行替换。
对 STONITH 设备的选择主要取决于您的预算和所用硬件的种类。
12.2.2 STONITH 实施 #
SUSE® Linux Enterprise High Availability 的 STONITH 实现由两个组件组成:
- pacemaker-fenced
pacemaker-fenced
是可由本地进程或通过网络访问的守护程序。它接受与屏蔽操作(重置、关闭电源和打开电源)对应的命令。它还可以检查屏蔽设备的状态。pacemaker-fenced
守护程序在 High Availability 群集中的每个节点上运行。在 DC 节点上运行的pacemaker-fenced
实例从pacemaker-controld
接收屏蔽请求。由此实例及其他pacemaker-fenced
程序决定是否要执行所需的屏蔽操作。- STONITH 插件
对于每个受支持的屏蔽设备,都有一个能够控制所述设备的 STONITH 插件。STONITH 插件是屏障设备的界面。cluster-glue 软件包中的 STONITH 插件位于每个节点上的
/usr/lib64/stonith/plugins
中。(如果您还安装了 fence-agents 软件包,该软件包中的插件将安装在/usr/sbin/fence_*
中)。对于pacemaker-fenced
而言,所有 STONITH 插件看起来都是一样的,但实际上却各不相同,都体现了屏蔽设备的性质。某些插件支持多个设备。
ipmilan
(或external/ipmi
)就是个典型的示例,它实施 IPMI 协议并可控制支持此协议的任何设备。
12.3 STONITH 资源和配置 #
要设置屏蔽,需要配置一个或多个 STONITH 资源 - pacemaker-fenced
守护程序不需要配置。所有配置都存储在 CIB 中。资源属于 stonith
stonith 类的资源(请参见第 6.2 节 “支持的资源代理类别”)。STONITH 资源是 STONITH 插件在 CIB 中的代表。除了屏蔽操作,还可以启动、停止和监控 STONITH 资源,就像任何其他资源一样。启动或停止 STONITH 资源意味着加载或卸载节点上的 STONITH 设备驱动程序。启动和停止仅是管理操作,不会转换成对屏蔽设备自身的任何操作。然而,监控操作却会转换成将其记录到设备(以校验设备能否在需要时正常运行)。STONITH 资源故障转移到另一个节点时,它通过加载相应的驱动程序允许当前节点与 STONITH 设备对话。
STONITH 资源可像任何其他资源一样进行配置。有关如何使用首选群集管理工具执行此操作的细节:
参数(属性)列表取决于相应的 STONITH 类型。要查看特定设备的参数列表,请使用 stonith
命令:
#
stonith -t stonith-device-type -n
例如,要查看 ibmhmc
设备类型的参数,请输入以下命令:
#
stonith -t ibmhmc -n
要获取设备的简短帮助文本,请使用 -h
选项:
#
stonith -t stonith-device-type -h
12.3.1 STONITH 资源配置示例 #
下面是用 crm
命令行工具的语法编写的示例配置。要应用这些配置,请将示例添加到文本文件(例如 sample.txt
)中并运行以下命令:
#
crm < sample.txt
有关使用 crm
命令行工具配置资源的更多信息,请参见第 5.5 节 “crmsh 简介”。
可以如下配置 IBM RSA 无人值守设备:
#
crm configure
crm(live)configure#
primitive st-ibmrsa-1 stonith:external/ibmrsa-telnet \
params nodename=alice ip_address=192.168.0.101 \
username=USERNAME password=PASSW0RD
crm(live)configure#
primitive st-ibmrsa-2 stonith:external/ibmrsa-telnet \
params nodename=bob ip_address=192.168.0.102 \
username=USERNAME password=PASSW0RD
crm(live)configure#
location l-st-alice st-ibmrsa-1 -inf: alice
crm(live)configure#
location l-st-bob st-ibmrsa-2 -inf: bob
crm(live)configure#
commit
此示例中使用了位置约束,这是因为 STONITH 操作失败的可能性始终存在。因此,在同时兼作执行程序的节点上操作 STONITH 并不可靠。如果重置节点,则它将无法发送有关屏蔽操作结果的通知。唯一的方法是假设操作会成功并提前发送通知。不过,如果操作失败,可能会出现问题。因此,按惯例 pacemaker-fenced
会拒绝终止其主机。
UPS 类型屏蔽设置的配置类似于上面的示例。此处不作详细介绍。所有 UPS 设备均使用相同的机制屏蔽。访问设备的方式有所不同。旧的 UPS 设备只有一个串行端口,通常使用特殊的串行电缆以 1200 波特的速率进行连接。许多新的 UPS 设备仍有一个串行端口,但它们一般还使用 USB 或以太网接口。可以使用的连接类型取决于插件支持的连接。
例如,使用 stonith
-t stonith-device-type -n
命令比较 apcmaster
与 apcsmart
设备:
#
stonith -t apcmaster -h
返回以下信息:
STONITH Device: apcmaster - APC MasterSwitch (via telnet) NOTE: The APC MasterSwitch accepts only one (telnet) connection/session a time. When one session is active, subsequent attempts to connect to the MasterSwitch will fail. For more information see http://www.apc.com/ List of valid parameter names for apcmaster STONITH device: ipaddr login password For Config info [-p] syntax, give each of the above parameters in order as the -p value. Arguments are separated by white space. Config file [-F] syntax is the same as -p, except # at the start of a line denotes a comment
使用
#
stonith -t apcsmart -h
得到以下输出:
STONITH Device: apcsmart - APC Smart UPS (via serial port - NOT USB!). Works with higher-end APC UPSes, like Back-UPS Pro, Smart-UPS, Matrix-UPS, etc (Smart-UPS may have to be >= Smart-UPS 700?). See http://www.networkupstools.org/protocols/apcsmart.html for protocol compatibility details. For more information see http://www.apc.com/ List of valid parameter names for apcsmart STONITH device: ttydev hostlist
第一个插件支持带有一个网络端口的 APC UPS 和 telnet 协议。第二个插件使用 APC SMART 协议(通过许多 APC UPS 产品系列都支持的串行线路)。
Kdump 属于特殊的屏蔽设备,实际上与屏蔽设备相反。该插件检查节点上是否正在进行内核转储。如果是,它将返回 true,并如同节点已被屏蔽那样进行操作。
必须以与其他真实的 STONITH 设备(例如 external/ipmi
)一致的方式使用 Kdump 插件。要正常运行屏蔽机制,必须在触发真实的 STONITH 设备之前,指定 Kdump 已经过检查。请按以下过程中所述,使用 crm configure
fencing_topology
来指定屏蔽设备的顺序。
使用
stonith:fence_kdump
资源代理(由 fence-agents 软件包提供)来监控启用了 Kdump 功能的所有节点。下面提供了资源的配置示例:#
crm configure
crm(live)configure#
primitive st-kdump stonith:fence_kdump \ params nodename="alice "\
1pcmk_host_check="static-list" \ pcmk_reboot_action="off" \ pcmk_monitor_action="metadata" \ pcmk_reboot_retries="1" \ timeout="60"
crm(live)configure#
commit
要监控的节点的名称。如果您需要监控多个节点,请配置更多 STONITH 资源。要防止特定节点使用屏蔽设备,请添加位置约束。
屏蔽操作会在资源超时后启动。
在每个节点上的
/etc/sysconfig/kdump
中,将KDUMP_POSTSCRIPT
配置为在 Kdump 进程完成后向所有节点发送通知。例如:KDUMP_POSTSCRIPT="/usr/lib/fence_kdump_send -i INTERVAL -p PORT -c 1 alice bob charlie"
执行 Kdump 的节点会在完成 Kdump 后自动重启动。
运行
systemctl restart kdump.service
或mkdumprd
。以上每条命令都会检测到/etc/sysconfig/kdump
已修改,并会重新生成initrd
,以在启用网络的情况下包含fence_kdump_send
库。在防火墙中针对
fence_kdump
资源打开一个端口。默认端口为7410
.为了能够在触发真实的屏蔽机制(例如
external/ipmi
)之前检查 Kdump,请使用类似以下的配置:crm(live)configure#
fencing_topology \ alice: kdump-node1 ipmi-node1 \ bob: kdump-node2 ipmi-node2
有关
fencing_topology
的更多细节,请使用以下命令:#
crm configure help fencing_topology
12.4 监控屏蔽设备 #
与任何其他资源一样,STONITH 类代理还支持使用监控操作检查状态。
请定期而谨慎地监控 STONITH 资源。对于大多数设备而言,至少 1800 秒(30 分钟)的监控间隔应已足够。
屏蔽设备是 HA 群集不可缺少的组成部分,但越少需要使用它们越好。电源管理设备常常会受广播流量过多的影响。某些设备无法处理每分钟多于十个左右连接的情况。如果两个客户端同时尝试进行连接,一些设备会分辨不清。大多数设备不能同时处理多个会话。
每隔几小时检查一次屏蔽设备的状态应该足以满足需求。需要执行屏蔽操作和电源开关故障的情况是较少的。
有关如何配置监控操作的详细信息,请参见针对命令行方法的第 6.10.2 节 “使用 crmsh 配置资源监控功能”。
12.5 特殊的屏蔽设备 #
除了处理真实 STONITH 设备的插件外,还有特殊用途的 STONITH 插件。
下面提到的一些 STONITH 插件仅供演示和测试之用。不要在实际情境中使用以下任何设备,因为这可能导致数据损坏和无法预料的结果:
external/ssh
ssh
fence_kdump
此插件检查节点上是否正在进行内核转储。如果是,它会返回
true
,并在执行操作时将节点视为已被屏蔽。在转储过程中,此节点不能运行任何资源。这可避免屏蔽已关闭但正在进行转储的节点,从而节省屏蔽所需时间。此插件必须与另一个实际 STONITH 设备一同使用。有关配置细节,请参见例 12.3 “Kdump 设备的配置”。
external/sbd
这是一个自屏蔽设备。它对可以插入共享磁盘的所谓的“毒药”作出反应。当中断共享存储区连接时,它将停止节点运行。要了解如何使用此 STONITH 代理实施基于存储的屏蔽,请参见第 13 章、过程 13.7 “配置群集以使用 SBD”。
重要:external/sbd
和 DRBDexternal/sbd
屏蔽机制要求能直接从每个节点读取 SBD 分区。因此,SBD 分区中不得使用 DRBD* 设备。但是,如果 SBD 分区位于未镜像或未复制的共享磁盘上,则可以对 DRBD 群集使用该屏蔽机制。
external/ssh
另一个基于软件的“屏蔽”机制。节点必须能够以
root
身份相互登录,而且无需密码。它使用一个参数hostlist
指定它将指向的目标节点。由于不能重置已确实失败的节点,它不得用于实际群集 - 仅供测试和演示之用。将其用于共享存储将导致数据损坏。meatware
meatware
需要用户操作才能运行。调用meatware
时,它会记录一条 CRIT 严重性消息,显示在节点的控制台上。然后,操作员会确认节点已关闭,并发出meatclient(8)
命令。此命令指示meatware
通知群集将该节点视为已出现故障。有关更多信息,请参见/usr/share/doc/packages/cluster-glue/README.meatware
。suicide
这是一个仅有软件的设备,它可以使用
reboot
命令重引导它运行所处的节点。这需要节点的操作系统的操作,在某些情况下可能失败。因此,如果可能,请避免使用此设备。然而,在单节点群集上使用此设备是很安全的。- 无磁盘 SBD
如果您想要建立一个不含共享存储的屏蔽机制,则此配置十分有用。在此无磁盘模式下,SBD 会使用硬件检查包来屏蔽节点,而不依赖于任何共享设备。不过,无磁盘 SBD 不能处理双节点群集的节点分裂情况。此选项仅适用于具有两个以上节点的群集。
suicide
是“I do not shoot my host”(我自己不关闭我的主机)规则的唯一例外。
12.6 基本建议 #
请查看以下建议列表以避免常见错误:
不要并行配置多个电源开关。
要测试 STONITH 设备及其配置,请从每个节点拔出一次插头,并校验该节点是否会被屏蔽。
在负载状态下测试资源,并校验超时值是否合适。超时值设置得过短会触发(不必要的)屏蔽操作。有关细节,请参见第 6.3 节 “超时值”。
对您的设置使用合适的屏蔽设备。有关细节,另请参见第 12.5 节 “特殊的屏蔽设备”。
配置一个或多个 STONITH 资源。默认情况下,全局群集选项
stonith-enabled
设置为true
。如果未定义 STONITH 资源,群集会拒绝启动任何资源。不要将全局群集选项
stonith-enabled
设置为false
,原因如下:未启用 STONITH 的群集不受支持。
DLM/OCFS2 将会阻止一直等待不会发生的屏蔽操作。
不要将全局群集选项
startup-fencing
设置为false
。由于以下原因,该选项默认会设置为true
:如果节点在群集启动期间处于未知状态,系统会将其屏蔽一次以确定其状态。
12.7 更多信息 #
/usr/share/doc/packages/cluster-glue
在已安装系统中,此目录包含多个 STONITH 插件和设备的自述文件。
- https://www.clusterlabs.org/pacemaker/doc/
Pacemaker Explained:说明用于配置 Pacemaker 的概念。包含全面、详细的参考信息。
- https://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html
说明 HA 群集中节点分裂、仲裁和屏蔽概念的文章。
13 存储保护和 SBD #
SBD(STONITH 块设备)通过共享块存储(SAN、iSCSI、FCoE 等)进行消息交换来为基于 Pacemaker 的群集提供节点屏蔽机制。此方法可以将屏蔽机制隔离开来,使其不受固件版本更改的影响或不依赖于特定固件控制器。SBD 需要在每个节点上安装一个检查包,以确保能确实停止行为异常的节点。在某些情况下,还可以通过无磁盘模式运行 SBD,以便使用不含共享存储的 SBD。
群集引导脚本提供了一种自动设置群集的方式,并可让您选择使用 SBD 作为屏蔽机制。有关详细信息,请参见Article “安装和设置快速入门”。但是,手动设置 SBD 可为您提供个别设置的更多选项。
本章介绍 SBD 背后的概念。它将指导您完成 SBD 所需组件的配置,防止您的群集在发生节点分裂情况下出现可能的数据损坏。
除了节点级别屏蔽,您还可以使用额外的存储保护机制,例如 LVM 排它激活或 OCFS2 文件锁定支持(资源级别屏蔽)。它们可以保护您的系统,以防出现管理或应用程序故障。
13.1 概念概述 #
SBD 是 Storage-Based Death(基于存储区的终止)或 STONITH Block Device(STONITH 块设备)的缩写。
High Availability 群集堆栈的最高优先级是保护数据完整性。此项保护通过防止对数据存储进行未协调的并行访问来实现。群集堆栈会使用几种控制机制来实现此目标。
但是,如果在群集中选出数个 DC,则可能导致网络分区或软件故障。这种节点分裂情况可能会导致数据损坏。
可防止节点分裂情况的主要方法是通过 STONITH 实现节点屏蔽。如果使用 SBD 作为节点屏蔽机制,当发生节点分裂情况时,无需使用外部关机设备即可关闭节点。
- SBD 分区
在所有节点都可访问共享存储的环境中,设备的某个小分区会格式化,以用于 SBD。该分区的大小取决于所用磁盘的块大小(例如,对于块大小为 512 字节的标准 SCSI 磁盘,该分区大小为 1 MB;块大小为 4 KB 的 DASD 磁盘需要 4 MB 大小的分区)。初始化过程会在设备上创建消息布局,配置最多 255 个节点的消息槽。
- SBD 守护程序
配置完相应的 SBD 守护程序后,在每个节点上使其上线,然后启动其余群集堆栈。它在所有其他群集组件都关闭之后才终止,从而确保了群集资源绝不会在没有 SBD 监督的情况下被激活。
- 消息
此守护程序会自动将分区上的消息槽之一分配给其自身,并持续监控其中有无发送给它自己的消息。收到消息后,守护程序会立即执行请求,如启动关闭电源或重引导循环以进行屏蔽。
另外,此守护程序会持续监控与存储设备的连接情况,如果无法连接分区,守护程序会自行终止。这就保证了它不会从屏蔽消息断开连接。如果群集数据驻留在不同分区中的同一个逻辑单元,一旦与存储设备的连接中断,工作负载便会终止,因此不会增加故障点。
- 检查包
只要使用 SBD,就必须确保检查包正常工作。新式系统支持硬件检查包,此功能需由软件组件来“激发”或“馈送数据”。软件组件(在此案例中为 SBD 守护程序)通过将服务脉冲定期写入检查包来“供给”检查包。如果守护程序停止向检查包反馈信号,硬件将强制系统重启动。这可防止出现 SBD 进程本身的故障,如失去响应或由于 I/O 错误而卡住。
如果激活了 Pacemaker 集成,仅仅只是大多数设备丢失将不会触发自我屏蔽。例如,假设您的群集包含三个节点:A、B 和 C。由于网络分隔,A 只能看到它自己,而 B 和 C 仍可相互通讯。在此案例中,有两个群集分区,一个因节点占多数(B 和 C)而具有法定票数,而另一个则不具有 (A)。如果在大多数屏蔽设备无法访问时发生此情况,则节点 A 会自我屏蔽,而节点 B 和 C 将会继续运行。
13.2 手动设置 SBD 的概述 #
手动设置基于存储的保护时必须执行以下步骤:必须以 root
身份执行这些步骤。在开始执行之前,请查看第 13.3 节 “要求和限制”。
根据您的情况,可将 SBD 与一到三个设备搭配使用,或以无磁盘模式使用。有关概述,请参见第 13.4 节 “SBD 设备数量”。有关详细的设置,请参见:
13.3 要求和限制 #
最多可将三个 SBD 设备用于基于存储的屏蔽。使用一到三个设备时,必须可从所有节点访问共享存储。
群集中的所有节点上,共享存储设备的路径都必须永久且一致。使用稳定的设备名称,如
/dev/disk/by-id/dm-uuid-part1-mpath-abcedf12345
。可通过光纤通道 (FC)、以太网光纤通道 (FCoE) 甚至 iSCSI 来连接共享存储。
共享存储段不得使用基于主机的 RAID、LVM 或 DRBD*。DRBD 可能已分割,这会导致 SBD 发生问题,因为 SBD 中不能存在两种状态。不能将群集多设备(群集 MD)用于 SBD。
但是,建议使用基于存储区的 RAID 和多路径,以提高可靠性。
可以在不同群集之间共享某个 SBD 设备,只要共享该设备的节点数不超过 255 个。
屏蔽不适用于非对称 SBD 设置。使用多个 SBD 设备时,所有节点都必须在所有 SBD 设备中有一个插槽。
使用多个 SBD 设备时,所有设备都必须具有相同的配置,例如具有相同的超时值。
对于具有两个以上节点的群集,还可以在无磁盘模式下使用 SBD。
13.4 SBD 设备数量 #
SBD 支持最多使用三个设备:
- 一个设备
最简单的实施。适用于所有数据位于同一个共享存储的群集。
- 两个设备
此配置主要用于如下环境:使用基于主机的镜像,但是没有第三个存储设备可用。SBD 在丢失对某个镜像分支的访问权后不会自行终止,这样群集便可继续运行。不过,由于 SBD 掌握的情况不够全面,无法检测到存储区的不对称分裂,因此,当只有一个镜像分支可用时,它不会屏蔽另一方。如此一来,就无法在存储阵列中的一个关闭时对第二个故障自动容错。
- 三个设备
最可靠的配置。它具有从一个设备中断(可能是因为发生故障或进行维护)的情况中恢复的能力。只有当一个以上设备失去连接并且有必要时,SBD 才会自行终止,具体取决于群集分区或节点的状态。如果至少有两个设备仍然可访问,便能成功传输屏蔽消息。
此配置适用于存储未限制为单个阵列的更为复杂的环境。基于主机的镜像解决方案可以每个镜像分支拥有一个 SBD(不自我镜像),并在 iSCSI 上有一个额外的决定项。
- 无磁盘
如果您想要建立一个不含共享存储的屏蔽机制,则此配置十分有用。在此无磁盘模式下,SBD 会使用硬件检查包来屏蔽节点,而不依赖于任何共享设备。不过,无磁盘 SBD 不能处理双节点群集的节点分裂情况。此选项仅适用于具有两个以上节点的群集。
13.5 超时计算 #
使用 SBD 作为屏蔽机制时,必须考虑所有组件的超时,因为它们之间相互依赖。使用多个 SBD 设备时,所有设备都必须具有相同的超时值。
- 检查包超时
此超时在初始化 SBD 设备期间设置。它主要取决于存储延迟。必须可在此时间内成功读取大多数设备。否则,节点可能会自我屏蔽。
注意:多路径或 iSCSI 设置如果 SBD 设备驻留在多路径设置或 iSCSI 上,则应将超时设置为检测到路径故障并切换到下一个路径所需的时间。
这还意味着
/etc/multipath.conf
中max_polling_interval
的值必须小于watchdog
超时。msgwait
超时此超时在初始化 SBD 设备期间设置。它定义了将消息写入到 SBD 设备上的某个节点槽后经过多长时间视为已传递。该超时应设置的足够长,让节点有时间检测到它是否需要自我屏蔽。
但是,如果
msgwait
超时较长,被屏蔽的群集节点可能会在屏蔽操作返回之前就重新加入群集。可以按SBD_DELAY_START
中的过程 13.4 所述,在 SBD 配置中设置 步骤 3 参数来减少此情况。- CIB 中的
stonith-timeout
此超时在 CIB 中作为全局群集属性设置。它定义了等待 STONITH 操作(重引导、打开、关闭)完成的时间。
- CIB 中的
stonith-watchdog-timeout
此超时在 CIB 中作为全局群集属性设置。如果未显式设置,则默认值为
0
,此值适用于 SBD 与一到三个设备搭配使用的情况。对于无磁盘模式下的 SBD,此超时不得为0
。有关细节,请参见过程 13.8 “配置无磁盘 SBD”。
如果您更改检查包超时,则需要同时调整另外两个超时。以下“公式”表达了这三个值之间的关系:
Timeout (msgwait) >= (Timeout (watchdog) * 2) stonith-timeout >= Timeout (msgwait) + 20%
例如,如果将检查包超时设置为 120
,请将 msgwait
超时至少设置为 240
,将 stonith-timeout
超时至少设置为 288
。
如果您使用 crm 外壳提供的引导脚本设置群集并初始化 SBD 设备,系统会自动考虑这些超时之间的关系。
13.6 设置检查包 #
SUSE Linux Enterprise High Availability 随附了几个内核模块,用于提供特定于硬件的检查包驱动程序。对于生产环境中的群集,我们建议使用硬件特定的检查包驱动程序。不过,如果没有与您的硬件匹配的检查包,则可以将 softdog
用作内核检查包模块。
SUSE Linux Enterprise High Availability 使用 SBD 守护程序作为“供给”检查包的软件组件。
13.6.1 使用硬件检查包 #
查找给定系统的正确检查包内核模块并非没有意义。自动探测常常会失败。因此,加载许多模块后才会加载正确的模块。
下表列出了一些常用检查包驱动程序。但这不是完整的受支持驱动程序列表。如果您的硬件未在下面列出,您还可以在 /lib/modules/KERNEL_VERSION/kernel/drivers/watchdog
和 /lib/modules/KERNEL_VERSION/kernel/drivers/ipmi
目录中查看选项列表。或者,您可以咨询您的硬件或系统供应商,获取特定于系统的检查包配置细节。
硬件 | 驱动程序 |
---|---|
HP | hpwdt |
Dell、Lenovo (Intel TCO) | iTCO_wdt |
Fujitsu | ipmi_watchdog |
IBM Power 上的 LPAR | pseries-wdt |
IBM z/VM 上的 VM | vmwatchdog |
Xen VM (DomU) | xen_xdt |
VMware vSphere 上的 VM | wdat_wdt |
通用 | softdog |
有些硬件供应商交付的系统管理软件(例如 HP ASR 守护程序)会使用检查包来进行系统重置。如果 SBD 使用了检查包,请禁用此类软件。不能有其他任何软件在访问检查包计时器。
要确保加载正确的检查包模块,请执行如下操作:
列出已随内核版本安装的驱动程序:
#
rpm -ql kernel-VERSION | grep watchdog
列出内核中当前加载的任何检查包模块:
#
lsmod | egrep "(wd|dog)"
如果返回了结果,请卸载错误的模块:
#
rmmod WRONG_MODULE
启用与您的硬件匹配的检查包模块:
#
echo WATCHDOG_MODULE > /etc/modules-load.d/watchdog.conf
#
systemctl restart systemd-modules-load
测试是否已正确加载 检查包模块:
#
lsmod | grep dog
校验检查包设备是否可用且可正常工作:
#
ls -l /dev/watchdog*
#
sbd query-watchdog
如果检查包设备无法使用,请检查模块名称和选项。可以考虑使用其他驱动程序。
校验检查包设备是否可正常工作:
#
sbd -w WATCHDOG_DEVICE test-watchdog
重引导计算机,以确保不存在冲突的内核模块。例如,如果您在日志中发现
cannot register ...
消息,就表示存在这样的冲突模块。要避免加载此类模块,请参见 https://documentation.suse.com/sles/html/SLES-all/cha-mod.html#sec-mod-modprobe-blacklist。
13.6.2 使用软件检查包 (softdog) #
对于生产环境中的群集,建议使用硬件特定的检查包驱动程序。不过,如果没有与您的硬件匹配的检查包,则可以将 softdog
用作内核检查包模块。
Softdog 驱动程序假设至少有一个 CPU 仍然在运行。如果所有 CPU 均已阻塞,则 softdog 驱动程序中应该重引导系统的代码永远都不会执行。相反地,即使所有 CPU 均已阻塞,硬件检查包也仍然会继续工作。
启用 softdog 检查包:
#
echo softdog > /etc/modules-load.d/watchdog.conf
#
systemctl restart systemd-modules-load
测试是否已正确加载 softdog 检查包模块:
#
lsmod | grep softdog
13.7 设置 SBD 与设备 #
进行该设置必须执行以下步骤:
在开始之前,请确保要用于 SBD 的一个或多个块设备满足在第 13.3 节中指定的要求。
设置 SBD 设备时,您需要考虑几个超时值。有关详细信息,请参见 第 13.5 节 “超时计算”。
如果节点上运行的 SBD 守护程序更新检查包计时器的速度不够快,节点会自行终止。设置超时后,请在您的特定环境中予以测试。
要将 SBD 与共享存储搭配使用,必须先在一到三个块设备上创建消息布局。sbd create
命令会将元数据头写入指定的一个或多个设备。它还会初始化最多 255 个节点的消息槽。如果不带任何其他选项执行该命令,该命令将使用默认超时设置。
确保要用于 SBD 的一个或多个设备未保存任何重要数据。执行 sbd create
命令时,会直接重写指定块设备的大约第一个 MB,而不会发出其他请求或进行备份。
决定要将哪个块设备或哪些块设备用于 SBD。
使用以下命令初始化 SBD 设备:
#
sbd -d /dev/disk/by-id/DEVICE_ID create
要将多个设备用于 SBD,请指定
-d
选项多次,例如:#
sbd -d /dev/disk/by-id/DEVICE_ID1 -d /dev/disk/by-id/DEVICE_ID2 -d /dev/disk/by-id/DEVICE_ID3 create
如果您的 SBD 设备驻留在多路径组上,请使用
-1
和-4
选项调整要用于 SBD 的超时。如果初始化了多个设备,则必须为所有设备设置相同的超时值。有关详细信息,请参见 第 13.5 节 “超时计算”。所有超时均以秒为单位指定:#
sbd -d /dev/disk/by-id/DEVICE_ID -4 180
1-1 90
2create
检查已写入设备的内容:
#
sbd -d /dev/disk/by-id/DEVICE_ID dump
Header version : 2.1 UUID : 619127f4-0e06-434c-84a0-ea82036e144c Number of slots : 255 Sector size : 512 Timeout (watchdog) : 5 Timeout (allocate) : 2 Timeout (loop) : 1 Timeout (msgwait) : 10 ==Header on disk /dev/disk/by-id/DEVICE_ID is dumped正如您看到的,超时数也存储在报头中,以确保所有参与的节点在这方面都一致。
初始化 SBD 设备之后,编辑 SBD 配置文件,然后启用并启动相应的服务以让更改生效。
打开
/etc/sysconfig/sbd
文件。搜索以下参数:SBD_DEVICE。
该参数指定要监控和要用于交换 SBD 讯息的设备。
编辑此行,用您的 SBD 设备替换 /dev/disk/by-id/DEVICE_ID:
SBD_DEVICE="/dev/disk/by-id/DEVICE_ID"
如果您需要在第一行中指定多个设备,请使用分号分隔设备(设备顺序无关紧要):
SBD_DEVICE="/dev/disk/by-id/DEVICE_ID1;/dev/disk/by-id/DEVICE_ID2;/dev/disk/by-id/DEVICE_ID3"
如果无法访问 SBD 设备,守护程序将无法启动,导致群集无法启动。
搜索以下参数:SBD_DELAY_START。
启用或禁用延迟。如果
msgwait
很长,但群集节点引导速度很快,请将 SBD_DELAY_START 设置为yes
。将此参数设置为yes
可在引导时延迟 SBD 启动。虚拟机有时候需要此项延迟。默认延迟时长与
msgwait
超时值相同。或者,您可以指定一个整数(以秒为单位),而不是yes
。如果启用 SBD_DELAY_START,还必须检查 SBD 服务文件,以确保
TimeoutStartSec
的值大于 SBD_DELAY_START 的值。有关详细信息,请参见https://www.suse.com/support/kb/doc/?id=000019356。使用
csync2
将配置文件复制到所有节点:#
csync2 -xv
有关详细信息,请参见第 4.7 节 “将配置传输到所有节点”。
将您的 SBD 设备添加到 SBD 配置文件之后,启用 SBD 守护程序。SBD 守护程序是群集堆栈的关键部分。当群集堆栈正在运行时,需要运行该守护程序。因此,每次群集服务启动时,sbd
服务也会作为依赖项启动。
在每个节点,启用 SBD 服务:
#
systemctl enable sbd
每次群集服务启动时,SBD 会与 Corosync 服务一起启动。
使用
--all
选项同时在所有节点上重启动群集服务:#
crm cluster restart --all
此操作会自动触发 SBD 守护程序的启动。
重要:发生 SBD 更改后重启动群集服务如果任何 SBD 元数据发生更改,则必须再次重启动群集服务。要在重启动期间使关键群集资源保持运行状态,请考虑先将群集置于维护模式。有关详细信息,请参见第 28 章 “执行维护任务”。
下一步是测试 SBD 设备,请参见过程 13.6。
以下命令会从 SBD 设备转储节点槽及其当前消息:
#
sbd -d /dev/disk/by-id/DEVICE_ID list
现在,您应该会看到曾随 SBD 启动的所有群集节点都列在此处。例如,如果您拥有双节点群集,消息槽对于两个节点都应显示
clear
:0 alice clear 1 bob clear
尝试将测试消息发送到节点之一:
#
sbd -d /dev/disk/by-id/DEVICE_ID message alice test
此节点会在系统日志文件中确认收到了该消息:
May 03 16:08:31 alice sbd[66139]: /dev/disk/by-id/DEVICE_ID: notice: servant: Received command test from bob on disk /dev/disk/by-id/DEVICE_ID
这就确认了 SBD 确实在节点上正常运行,并已准备好接收消息。
在最后一步中,您需要调整群集配置,请参见过程 13.7。
启动外壳,并以
root
用户或同等身份登录。运行
crm configure
。输入以下内容:
crm(live)configure#
property stonith-enabled="true"
1crm(live)configure#
property stonith-watchdog-timeout=0
2crm(live)configure#
property stonith-timeout="40s"
3此为默认配置,因为不支持没有 STONITH 的群集。而如果出于测试目的停用了 STONITH,请确保再次将此参数设置为
true
。如果未显式设置,此值默认为
0
,适用于 SBD 与一到三个设备搭配使用的情况。要计算 stonith-timeout,请参见第 13.5 节 “超时计算”。如果将 SBD 的
stonith-timeout
超时值设置为40
秒,则适合将msgwait
值设置为30
。配置 SBD STONITH 资源。您无需克隆此资源。
对于双节点群集,在节点分裂情况下,两个节点都会按预期向对方发出屏蔽。为防止两个节点几乎同时被重置,建议应用以下屏蔽延迟来帮助其中一个节点甚至是首选节点在屏蔽竞争中胜出。对于具有两个以上节点的群集,无需应用这些延迟。
- 优先级屏蔽延迟
priority-fencing-delay
群集属性默认处于禁用状态。配置延迟值后,如果另一个节点发生故障且其总资源优先级更高,针对该节点的屏蔽将延迟指定的时间。这意味着在节点分裂情况下,更重要的节点将在屏蔽竞争中胜出。可以用优先级元属性配置重要资源。在计算时,将对每个节点上运行的资源或实例的优先级值求和来进行计算。升级后的资源实例的优先级为配置的基础优先级加 1,因此它的优先级值比任何未升级的实例都高。
#
crm configure property priority-fencing-delay=30
即使使用了
priority-fencing-delay
,我们也仍然建议使用pcmk_delay_base
或pcmk_delay_max
(如下所述)来解决节点优先级恰好相同的所有情况。priority-fencing-delay
的值应显著大于pcmk_delay_max
/pcmk_delay_base
的最大值,最好是最大值的两倍。- 可预测的静态延迟
此参数用于在执行 STONITH 操作之前添加静态延迟。为防止发生节点分裂时双节点群集的两个节点同时重置,请为不同的屏蔽资源配置不同的延迟值。可以用可实现更长屏蔽延迟的参数标记首选节点,使其在任何屏蔽竞争中都胜出。要成功实现此目的,每个节点都必须有两个原始 STONITH 设备。在下面的配置中,如果出现节点分裂情况,alice 会胜出并得以留存:
crm(live)configure#
primitive st-sbd-alice stonith:external/sbd params \ pcmk_host_list=alice pcmk_delay_base=20
crm(live)configure#
primitive st-sbd-bob stonith:external/sbd params \ pcmk_host_list=bob pcmk_delay_base=0
- 动态随机延迟
此参数用于为屏蔽设备上的 STONITH 操作添加随机延迟。pcmk_delay_max 参数不会针对特定节点实施静态延迟,而是为包含屏蔽资源的任何屏蔽添加随机延迟,以防止双重重置。与 pcmk_delay_base 不同,此参数可对针对多个节点的统一屏蔽资源指定。
crm(live)configure#
primitive stonith_sbd stonith:external/sbd \ params pcmk_delay_max=30
警告:pcmk_delay_max 可能无法防止节点分裂情况下的双重重置。pcmk_delay_max 的值越低,仍会发生双重重置的可能性就越高。
如果您的目标是有可预测的幸存者,请使用优先级屏蔽延迟或可预测的静态延迟。
使用
show
查看所做的更改。使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
资源启动后,群集就会成功配置为在出现需要屏蔽的节点时使用 SBD。
13.8 设置无磁盘 SBD #
SBD 可在无磁盘模式下操作。在此模式下,当发生以下情况时,将使用检查包设备来重置节点:失去仲裁、任何受监控的守护程序发生故障且未恢复、Pacemaker 决定需要屏蔽节点。无磁盘 SBD 基于节点的“自我屏蔽”,具体取决于群集的状态、仲裁和某些合理的假设。CIB 中不需要 STONITH SBD 原始资源。
无磁盘 SBD 依赖于重新生成的成员资格和仲裁丢失来实现屏蔽。Corosync 流量必须能够通过所有网络接口(包括回写接口),并且不得被本地防火墙阻止。否则,Corosync 将无法重新生成新成员资格,可能导致出现节点分裂情况,而无磁盘 SBD 屏蔽无法处理该情况。
不要将无磁盘 SBD 用作双节点群集的屏蔽机制。请仅对包含三个或更多节点的群集使用无磁盘 SBD。无磁盘模式下的 SBD 无法处理双节点群集的节点分裂情况。如果您想对双节点群集使用无磁盘 SBD,请按第 14 章 “QDevice 和 QNetd” 中所述使用 QDevice。
打开文件
/etc/sysconfig/sbd
并使用以下项:SBD_PACEMAKER=yes SBD_STARTMODE=always SBD_DELAY_START=no SBD_WATCHDOG_DEV=/dev/watchdog SBD_WATCHDOG_TIMEOUT=5
由于未使用共享磁盘,因此不需要
SBD_DEVICE
条目。此参数缺失时,sbd
服务不会为 SBD 设备启动任何观察程序进程。如果需要在系统引导时延迟启动 SBD,请将
SBD_DELAY_START
更改为yes
。默认延迟时长为SBD_WATCHDOG_TIMEOUT
值的两倍。或者,您可以指定一个整数(以秒为单位),而不是yes
。重要:无磁盘 SBD 和 QDevice 的SBD_WATCHDOG_TIMEOUT
如果您将 QDevice 和无磁盘 SBD 搭配使用,
SBD_WATCHDOG_TIMEOUT
值必须大于 QDevice 的sync_timeout
值,否则 SBD 将会超时并无法启动。sync_timeout
的默认值为 30 秒。因此,请将SBD_WATCHDOG_TIMEOUT
设置为更大的值,例如35
。在每个节点,启用 SBD 服务:
#
systemctl enable sbd
每次群集服务启动时,SBD 会与 Corosync 服务一起启动。
使用
--all
选项同时在所有节点上重启动群集服务:#
crm cluster restart --all
此操作会自动触发 SBD 守护程序的启动。
重要:发生 SBD 更改后重启动群集服务如果任何 SBD 元数据发生更改,则必须再次重启动群集服务。要在重启动期间使关键群集资源保持运行状态,请考虑先将群集置于维护模式。有关详细信息,请参见第 28 章 “执行维护任务”。
检查是否已自动设置 have-watchdog=true 参数:
#
crm configure show | grep have-watchdog
have-watchdog=true运行
crm configure
并在 crm 外壳上设置以下群集属性:crm(live)configure#
property stonith-enabled="true"
1crm(live)configure#
property stonith-watchdog-timeout=10
2crm(live)configure#
property stonith-timeout=15
3此为默认配置,因为不支持没有 STONITH 的群集。而如果出于测试目的停用了 STONITH,请确保再次将此参数设置为
true
。对于无磁盘 SBD,此参数不能为零。它定义了经过多长时间之后可以假定屏蔽目标已自我屏蔽。请使用以下公式计算此超时:
stonith-watchdog-timeout >= (SBD_WATCHDOG_TIMEOUT * 2)
如果将 stonith-watchdog-timeout 设置为负值,Pacemaker 会自动计算此超时,并将它设置为 SBD_WATCHDOG_TIMEOUT 值的两倍。
此参数必须留出足够长的时间让屏蔽完成。对于无磁盘 SBD,请使用以下公式计算此超时:
stonith-timeout >= stonith-watchdog-timeout + 20%
重要:无磁盘 SBD 超时使用无磁盘 SBD 时,如果
stonith-timeout
值小于stonith-watchdog-timeout
值,则失败的节点可能会停滞在UNCLEAN
状态,并阻止对活动资源进行故障转移。使用
show
查看所做的更改。使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
13.9 测试 SBD 和屏蔽 #
要测试 SBD 在节点屏蔽方面是否按预期工作,请使用以下其中一种或所有方法:
- 手动触发节点屏蔽
要针对节点 NODENAME 触发屏蔽操作,请执行以下操作:
#
crm node fence NODENAME
经过 stonith-watchdog-timeout 时间之后,检查节点是否已屏蔽,并且其他节点是否将该节点视为已屏蔽。
- 模拟 SBD 失败
识别 SBD inquisitor 的进程 ID:
#
systemctl status sbd
● sbd.service - Shared-storage based fencing daemon Loaded: loaded (/usr/lib/systemd/system/sbd.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2018-04-17 15:24:51 CEST; 6 days ago Docs: man:sbd(8) Process: 1844 ExecStart=/usr/sbin/sbd $SBD_OPTS -p /var/run/sbd.pid watch (code=exited, status=0/SUCCESS) Main PID: 1859 (sbd) Tasks: 4 (limit: 4915) CGroup: /system.slice/sbd.service ├─1859 sbd: inquisitor [...]通过终止 SBD inquisitor 进程模拟 SBD 失败。在我们的示例中,SBD inquisitor 的进程 ID 是
1859
:#
kill -9 1859
节点主动自我屏蔽。经过 stonith-watchdog-timeout 时间之后,其他节点注意到该节点丢失并将其视为已自我屏蔽。
- 通过监控操作失败触发屏蔽
对于正常配置,如果资源的停止操作失败,将会触发屏蔽。要手动触发屏蔽,可以产生一个资源停止操作失败。或者,可以临时更改资源监控操作的配置,产生监控失败,如下所示:
为资源监控操作配置
on-fail=fence
属性:op monitor interval=10 on-fail=fence
让监控操作失败(例如,如果资源与某个服务相关,则可通过终止相应的守护程序来实现)。
此失败会触发屏蔽操作。
13.10 其他存储保护机制 #
除了通过 STONITH 进行节点屏蔽之外,还可使用其他方法在资源级别实现存储保护。例如,SCSI-3 和 SCSI-4 使用永久预留,而 sfex
提供锁定机制。这两种方法将在下面的小节中介绍。
13.10.1 配置 sg_persist 资源 #
SCSI 规范 3 和 4 定义了永久保留。其属于 SCSI 协议功能,可用于 I/O 屏蔽和故障转移。此功能在 sg_persist
Linux 命令中实施。
用于 sg_persist
的所有后备磁盘都必须与 SCSI 磁盘兼容。sg_persist
仅适用于 SCSI 磁盘或 iSCSI LUN 等设备。
不要将它用于 IDE、SATA 或不支持 SCSI 协议的任何块设备。
继续之前,请检查您的磁盘是否支持永久保留。使用以下命令(用您的设备名称替换 DEVICE_ID):
#
sg_persist -n --in --read-reservation -d /dev/disk/by-id/DEVICE_ID
结果显示您的磁盘是否支持永久保留:
支持的磁盘:
PR generation=0x0, there is NO reservation held
不支持的磁盘:
PR in (Read reservation): command not supported Illegal request, Invalid opcode
如果您收到错误消息(如上面所示),请用 SCSI 兼容的磁盘替换旧磁盘。否则请执行如下操作:
使用磁盘的稳定设备名称创建原始资源
sg_persist
:#
crm configure
crm(live)configure#
primitive sg sg_persist \ params devs="/dev/disk/by-id/DEVICE_ID" reservation_type=3 \ op monitor interval=60 timeout=60
创建
sg_persist
原始资源的可升级克隆:crm(live)configure#
clone clone-sg sg \ meta promotable=true promoted-max=1 notify=true
测试设置:升级资源后,您可以在运行主实例的群集节点上挂载磁盘分区并将数据写入其中,但无法在运行次要实例的群集节点上写入数据。
使用磁盘分区的稳定设备名称为 Ext4 添加文件系统原始资源:
crm(live)configure#
primitive ext4 Filesystem \ params device="/dev/disk/by-id/DEVICE_ID" directory="/mnt/ext4" fstype=ext4
在
sg_persist
克隆和文件系统资源之间添加以下顺序关系和共置约束:crm(live)configure#
order o-clone-sg-before-ext4 Mandatory: clone-sg:promote ext4:start
crm(live)configure#
colocation col-ext4-with-sg-persist inf: ext4 clone-sg:Promoted
使用
show changed
命令检查所有更改。提交更改。
有关详细信息,请参见 sg_persist
手册页。
13.10.2 使用 sfex
确保激活排它存储 #
此部分将介绍另一种低级别机制:sfex
,可将对共享存储区的访问以排它的方式锁定于一个节点。请注意,sfex 不会替代 STONITH。由于 sfex 需要共享存储,因此建议将上述 SBD 节点屏蔽机制用于存储的另一个分区。
按照设计,sfex 不能与需要并发的工作负载(例如 OCFS2)配合使用。其可作为传统故障转移型工作负载的一层保护。实际效果与 SCSI-2 保留类似,但更具一般性。
13.10.2.1 概览 #
在共享存储环境中,存储区的一个小分区专门设置为存储一个或多个锁。
在获取受保护资源之前,节点必须先获取保护锁。此顺序由 Pacemaker 强制实施。sfex 组件可确保即使 Pacemaker 遇到节点分裂情况,也不会多次授予锁。
这些锁必须定期刷新,这样某个节点的终止才不会永久性地阻止此锁,其他节点仍可继续操作。
13.10.2.2 设置 #
以下内容可帮助您了解如何创建用于 sfex 的共享分区以及如何为 CIB 中的 sfex 锁配置资源。单个 sfex 分区可存放任意数量的锁,并需要为每个锁分配 1 KB 的存储空间。默认情况下,sfex_init
将在分区上创建一个锁。
sfex 的共享分区应和要保护的数据位于同一逻辑单元上。
共享的 sfex 分区不得使用基于主机的 RAID 或 DRBD。
可以使用 LVM 逻辑卷。
创建用于 sfex 的共享分区。记下此分区的名称,并用它替换下面的
/dev/sfex
。使用以下命令创建 sfex 元数据:
#
sfex_init -n 1 /dev/sfex
校验元数据是否正确创建:
#
sfex_stat -i 1 /dev/sfex ; echo $?
此操作应返回
2
,因为当前未保存锁。
sfex 锁通过 CIB 中的资源表示,其配置如下:
crm(live)configure#
primitive sfex_1 ocf:heartbeat:sfex \ params device="/dev/sfex" index="1" collision_timeout="1" \ lock_timeout="70" monitor_interval="10" \ op monitor interval="10s" timeout="30s" on-fail="fence"
要通过 sfex 锁保护资源,请在要保护 sfex 资源的资源之间创建强制顺序和放置约束。如果要保护的资源 ID 是
filesystem1
:crm(live)configure#
order order-sfex-1 Mandatory: sfex_1 filesystem1
crm(live)configure#
colocation col-sfex-1 inf: filesystem1 sfex_1
如果使用组语法,请将 sfex 资源添加为组内的第一个资源:
crm(live)configure#
group LAMP sfex_1 filesystem1 apache ipaddr
13.11 更多信息 #
有关细节,请参见man sbd
。
14 QDevice 和 QNetd #
QDevice 和 QNetd 会参与仲裁决定。在仲裁方 corosync-qnetd
的协助下,corosync-qdevice
会提供一个可配置的投票数,以使群集可以承受大于标准仲裁规则所允许的节点故障数量。我们建议您对节点数为偶数的群集(特别是双节点群集)部署 corosync-qnetd
和 corosync-qdevice
。
14.1 概念概述 #
与计算各群集节点的配额相比,搭配使用 QDevice 和 QNetd 的方法具有以下优点:
发生节点故障时,会提供更好的可持续性。
您可以编写自己的启发脚本来影响投票。这非常适合用于复杂设置(例如 SAP 应用程序)。
可让您配置 QNetd 服务器来为多个群集提供投票。
允许为双节点群集使用无磁盘 SBD。
可帮助节点数为偶数且处于节点分裂状况下的群集(特别是双节点群集)做出仲裁决定。
使用 QDevice/QNetd 的设置由以下组件和机制构成:
- QNetd (
corosync-qnetd
) 一个不属于群集的 systemd 服务(一个守护程序,即 “QNetd 服务器”)。向
corosync-qdevice
守护程序提供投票的 systemd 守护程序。要提高安全性,可以将
corosync-qnetd
与 TLS 搭配使用以进行客户端证书检查。- QDevice (
corosync-qdevice
) 每个群集节点上与 Corosync 一起运行的 systemd 服务(守护程序)。这是
corosync-qnetd
的客户端。其主要用途是让群集能够承受大于标准仲裁规则所允许的节点故障数量。QDevice 可以与不同的仲裁方配合工作,但目前仅支持与 QNetd 配合工作。
- 算法
QDevice 支持多种不同的算法,而这些算法决定着如何分配投票的行为。目前提供的算法如下:
FFSplit (“fifty-fifty split”) 为默认算法,用于所含节点数为偶数的群集。如果群集分裂为两个相似的部分,此算法会根据启发检查结果和其他因素为其中一个部分提供一个投票。
LMS (“last man standing”) 允许仅剩的那个节点看到 QNetd 服务器以获取投票。因此此算法适用于只有一个活动节点应保留法定票数的群集。
- 启发
QDevice 支持一组命令(“启发”)。这些命令在群集服务启动、群集成员资格发生变化、成功连接到
corosync-qnetd
时或(可选)定期在本地执行。可以使用 quorum.device.heuristics 键(在corosync.conf
文件中)或--qdevice-heuristics-mode
选项来设置启发。这两种方式都可理解off
(默认值)、sync
和on
值。sync
与on
之间的区别在于,您另外还可以定期执行以上命令。仅当所有命令都成功执行时,才会视为已通过启发,否则视为启发失败。启发的结果会发送到
corosync-qnetd
,用于进行计算以确定哪个部分应具有法定票数。- 决胜方
此项用作群集的几个部分完全均衡且启发结果相同的情况下的后备措施。它可配置为最小、最大或特定的节点 ID。
14.2 要求和先决条件 #
设置 QDevice 和 QNetd 之前,您需要按如下所示准备环境:
除了群集节点外,您需准备一个单独的计算机,将其作为 QNetd 服务器。请参见第 14.3 节 “设置 QNetd 服务器”。
与 Corosync 所使用的物理网络不同的物理网络。建议 QDevice 使用该网络来连接 QNetd 服务器。理想情况下,QNetd 服务器应位于与主群集不同的机架中,或者至少位于一个单独的 PSU 上,且不要位于与 Corosync 环相同的网段中。
14.3 设置 QNetd 服务器 #
QNetd 服务器不是群集堆栈的一部分,也不是群集的实际成员。因此,您无法将资源转移到此服务器。
QNetd 服务器几乎“无状态”。一般情况下,您无需更改配置文件 /etc/sysconfig/corosync-qnetd
中的任何内容。默认情况下,corosync-qnetd 服务以 coroqnetd
组中的 coroqnetd
用户身份运行守护程序。这可避免以 root
身份运行守护程序。
要创建 QNetd 服务器,请执行以下步骤:
在将作为 QNetd 服务器的计算机上,安装 SUSE Linux Enterprise Server 15 SP6。
使用
SUSEConnect --list-extensions
中列出的命令启用 SUSE Linux Enterprise High Availability。安装 corosync-qnetd 软件包:
#
zypper install corosync-qnetd
您不需要手动启动
corosync-qnetd
服务。当您在群集上配置 QDevice 时,该服务会自动启动。
QNetd 服务器现已准备好接受来自 QDevice 客户端 corosync-qdevice
的连接。无需进行其他配置。
14.4 将 QDevice 客户端连接到 QNetd 服务器 #
设置好 QNetd 服务器后,您便可以设置并运行客户端。您可以在安装群集的过程中将客户端连接到 QNetd 服务器,也可以稍后再添加。此过程会讲解如何在稍后添加客户端。
在所有节点上安装 corosync-qdevice 软件包:
#
zypper install corosync-qdevice
在一个节点上运行以下命令配置 QDevice:
#
crm cluster init qdevice
Do you want to configure QDevice (y/n)?y
HOST or IP of the QNetd server to be used []QNETD_SERVER
TCP PORT of QNetd server [5403] QNetd decision ALGORITHM (ffsplit/lms) [ffsplit] QNetd TIE_BREAKER (lowest/highest/valid node id) [lowest] Whether using TLS on QDevice/QNetd (on/off/required) [on] Heuristics COMMAND to run with absolute path; For multiple commands, use ";" to separate []按
y
确认您要配置 QDevice,然后输入 QNetd 服务器的主机名或 IP 地址。对于其余字段,您可以接受默认值,也可以根据需要更改。重要:无磁盘 SBD 和 QDevice 的SBD_WATCHDOG_TIMEOUT
如果您将 QDevice 和无磁盘 SBD 搭配使用,
SBD_WATCHDOG_TIMEOUT
值必须大于 QDevice 的sync_timeout
值,否则 SBD 将会超时并无法启动。sync_timeout
的默认值为 30 秒。因此,请确保在/etc/sysconfig/sbd
中将SBD_WATCHDOG_TIMEOUT
设置为更大的值(例如35
)。
14.5 使用启发设置 QDevice #
如果您需要对确定投票的方式进行额外的控制,请使用启发。启发是一组可并行执行的命令。
为了此目的,crm cluster init qdevice
命令提供了 --qdevice-heuristics
选项。您可以使用绝对路径传递一个或多个命令(以分号分隔)。
例如,如果您自己的启发检查命令位于 /usr/sbin/my-script.sh
,则可以在其中一个群集节点上按如下方式运行该命令:
#
crm cluster init qdevice --qnetd-hostname=charlie \
--qdevice-heuristics=/usr/sbin/my-script.sh \
--qdevice-heuristics-mode=on
命令可以任何语言编写,例如 Shell、Python 或 Ruby 语言。如果命令成功执行,将返回 0
(零),否则会返回错误代码。
您也可以传递一组命令。仅当所有命令都成功完成(返回代码为 0)后,启发才会通过。
--qdevice-heuristics-mode=on
选项可让启发命令定期运行。
14.6 检查和显示仲裁状态 #
您可以查询某个群集节点上的仲裁状态,如例 14.1 “QDevice 的状态”中所示。该示例显示了 QDevice 节点的状态。
#
corosync-quorumtool
1
Quorum information
------------------
Date: ...
Quorum provider: corosync_votequorum
Nodes: 2 2
Node ID: 3232235777 3
Ring ID: 3232235777/8
Quorate: Yes 4
Votequorum information
----------------------
Expected votes: 3
Highest expected: 3
Total votes: 3
Quorum: 2
Flags: Quorate Qdevice
Membership information
----------------------
Nodeid Votes Qdevice Name
3232235777 1 A,V,NMW 192.168.1.1 (local) 5
3232235778 1 A,V,NMW 192.168.1.2 5
0 1 Qdevice
或者,您也可以使用 | |
我们预计的节点数量。在此示例中,这是一个双节点群集。 | |
由于 | |
仲裁状态。在此例中,群集具有仲裁。 | |
每个群集节点的状态的含意如下:
|
如果您查询 QNetd 服务器的状态,会获得类似例 14.2 “QNetd 服务器的状态”中所示的输出:
#
corosync-qnetd-tool -lv
1
Cluster "hacluster": 2
Algorithm: Fifty-Fifty split 3
Tie-breaker: Node with lowest node ID
Node ID 3232235777: 4
Client address: ::ffff:192.168.1.1:54732
HB interval: 8000ms
Configured node list: 3232235777, 3232235778
Ring ID: aa10ab0.8
Membership node list: 3232235777, 3232235778
Heuristics: Undefined (membership: Undefined, regular: Undefined)
TLS active: Yes (client certificate verified)
Vote: ACK (ACK)
Node ID 3232235778:
Client address: ::ffff:192.168.1.2:43016
HB interval: 8000ms
Configured node list: 3232235777, 3232235778
Ring ID: aa10ab0.8
Membership node list: 3232235777, 3232235778
Heuristics: Undefined (membership: Undefined, regular: Undefined)
TLS active: Yes (client certificate verified)
Vote: No change (ACK)
14.7 更多信息 #
有关 QDevice 和 QNetd 的其他信息,请参见 corosync-qdevice(8) 和 corosync-qnetd(8) 的手册页。
15 访问控制列表 #
crm 外壳 (crmsh) 或 Hawk2 等群集管理工具可由 root
用户或 haclient
组内的任何用户使用。默认情况下,这些用户具有完全读/写访问权。要限制访问权或指派更加细化的访问权限,可以使用访问控制列表 (ACL)。
访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。
仅当您的 CIB 是使用 pacemaker-2.0
或更高 CIB 语法版本验证的情况下,此 ACL 文档才适用。有关如何查验这一点以及升级 CIB 版本的细节,请参见注意:升级 CIB 语法版本。
15.1 要求和先决条件 #
开始对群集使用 ACL 之前,确保满足了以下条件:
请使用 NIS、Active Directory 或者通过手动方式将相同用户添加到所有节点,来确保群集中所有节点上的用户一致。
您要使用 ACL 修改其访问权限的所有用户都必须属于
haclient
组。所有用户都需要使用 crmsh 的绝对路径
/usr/sbin/crm
来运行 crmsh。如果非特权用户想要运行 crmsh,则需要使用
/usr/sbin
扩展其PATH
变量。
ACL 是可选功能。默认情况下,ACL 处于禁用状态。
如果未启用 ACL,则
root
以及属于haclient
组的所有用户对群集配置都将拥有完整的读/写访问权限。即使启用并配置了 ACL,
root
和默认 CRM 拥有者hacluster
也始终对群集配置拥有完全访问权限。
15.2 概念概述 #
访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。ACL 角色是用于描述对 CIB 访问权限的一组规则。规则包括以下组成部分:
诸如
read
、write
或deny
的访问权限规则应用位置的规范。此规范可以是类型、ID 参照或 XPath 表达式。XPath 是在 XML 文档中选择节点所用的语言。有关详细信息,请参见 https://en.wikipedia.org/wiki/XPath。
通常,方便的做法是在角色中捆绑 ACL 并将特定角色指派给系统用户(ACL 目标)。创建 ACL 角色的方法有以下几种:
第 15.7 节 “通过 XPath 表达式设置 ACL 规则” 下)的文件。需要知道基础 XML 的结构才能创建 ACL 规则。
第 15.8 节 “通过缩写设置 ACL 规则” 下)的文件。创建速记语法和 ACL 规则以应用到匹配的对象。
15.3 在群集中启用 ACL #
在开始配置 ACL 之前,需要先启用 ACL。要执行此操作,请在 crmsh 中使用以下命令:
#
crm configure property enable-acl=true
或者,按过程 15.1 “使用 Hawk 启用 ACL”中所述使用 Hawk2。
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
显示全局群集选项及它们当前的值。在
下面,单击空下拉框并选择 以添加该参数。系统即会添加该参数,且将其设为默认值No
。将其值设置为
Yes
,然后应用更改。
15.4 创建只读 monitor 角色 #
以下小节介绍如何使用 Hawk2 或 crm 外壳定义 monitor
角色来配置只读访问权限。
15.4.1 使用 Hawk2 创建只读 monitor 角色 #
下面的过程说明如何通过定义 monitor
角色并将其指派给用户来配置对群集配置的只读访问权限。您也可以根据过程 15.4 “使用 crmsh 添加 monitor 角色并指派用户”中所述使用 crmsh 来实现此目的。
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
。单击
。输入唯一的
,例如monitor
。对于访问
,选择Read
。在
中,输入 XPath 表达式/cib
。图 15.1︰ Hawk2 创建角色 #单击
。如此即会创建名为
monitor
的新角色,为其设置read
权限,并使用 XPath 表达式/cib
将此配置应用到 CIB 中的所有元素。如果需要,请通过单击加号图标并指定相应参数添加更多规则。
使用向上或向下箭头按钮对各规则排序。
要配置资源或约束的访问权限,还可使用第 15.8 节 “通过缩写设置 ACL 规则”中所述的缩写语法。
15.4.2 使用 crmsh 创建只读 monitor 角色 #
下面的过程说明如何通过定义 monitor
角色并将其指派给用户来配置对群集配置的只读访问权限。
以
root
身份登录。启动 crmsh 的交互模式:
#
crm configure
crm(live)configure#
定义 ACL 角色:
使用
role
命令定义新角色:crm(live)configure#
role monitor read xpath:"/cib"
上面的命令会创建名为
monitor
的新角色,为其设置read
权限,并使用 XPath 表达式/cib
将此配置应用到 CIB 中的所有元素。如有必要,可添加更多访问权限和 XPath 自变量。根据需要添加其他角色。
将角色指派给一个或多个 ACL 目标,即相应的系统用户。确保这些目标属于
haclient
组。crm(live)configure#
acl_target tux monitor
检查更改:
crm(live)configure#
show
提交更改:
crm(live)configure#
commit
要配置资源或约束的访问权限,还可使用第 15.8 节 “通过缩写设置 ACL 规则”中所述的缩写语法。
15.5 去除用户 #
以下小节介绍如何使用 Hawk2 或 crmsh 从 ACL 中去除现有用户。
15.5.1 使用 Hawk2 去除用户 #
要从 ACL 中去除用户,请执行以下步骤:
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
。要去除系统用户(ACL 目标),请单击
列下方的垃圾桶图标。在对话框中进行确认。
15.5.2 使用 crmsh 去除用户 #
要从 ACL 中去除用户,请以用户名替换占位符 USER:
#
crm configure delete USERNAME
或者,您也可以使用 edit
子命令:
#
crm configure edit USERNAME
15.6 去除现有角色 #
以下小节介绍如何使用 Hawk2 或 crmsh 去除现有角色。
请注意,不能有任何用户属于此角色。如果角色中仍存在用户的引用,则不能删除该角色。请在删除角色前先删除用户的引用。
15.6.1 使用 Hawk2 去除现有角色 #
要移除角色,请执行以下步骤:
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
。要去除角色,请单击
列下方的垃圾桶图标。在对话框中进行确认。如果有错误消息显示,请确保您的角色是“空的”,没有引用任何角色。
15.6.2 使用 crmsh 去除现有角色 #
要去除现有角色,请以角色名称替换占位符 ROLE:
#
crm configure delete ROLE
15.7 通过 XPath 表达式设置 ACL 规则 #
要通过 XPath 管理 ACL 规则,需要知道基础 XML 的结构。可使用以下命令来检索结构(该命令将显示 XML 格式的群集配置,请参见例 15.1):
#
crm configure show xml
<cib> <!-- ... --> <configuration> <crm_config> <cluster_property_set id="cib-bootstrap-options"> <nvpair name="stonith-enabled" value="true" id="cib-bootstrap-options-stonith-enabled"/> [...] </cluster_property_set> </crm_config> <nodes> <node id="175704363" uname="alice"/> <node id="175704619" uname="bob"/> </nodes> <resources> [...] </resources> <constraints/> <rsc_defaults> [...] </rsc_defaults> <op_defaults> [...] </op_defaults> <configuration> </cib>
使用 XPath 语言,您可在此 XML 文档中查找节点。例如,要选择根节点 (cib
),请使用 XPath 表达式 /cib
。要查找全局群集配置,请使用 XPath 表达式 /cib/configuration/crm_config
。
作为示例,下面列出了用于创建“操作员”角色的 XPath 表达式。具有此角色的用户只能执行此处所列的任务 - 他们既不能重新配置任何资源(例如,更改参数或操作),也不能更改共置约束或顺序约束的配置。
//crm_config//nvpair[@name='maintenance-mode']
打开或关闭群集维护模式。
//op_defaults//nvpair[@name='record-pending']
选择是否记录待发操作。
//nodes/node//nvpair[@name='standby']
将节点设置为上线或待机模式。
//resources//nvpair[@name='target-role']
启动、停止任何资源或将其升级、降级。
//resources//nvpair[@name='maintenance']
选择是否应将资源置于维护模式。
//constraints/rsc_location
将资源从一个节点迁移/移动到另一个节点。
/cib
查看群集的状态。
15.8 通过缩写设置 ACL 规则 #
不想使用 XML 结构的用户可以采用更简单的方法。
例如,请考虑以下 XPath:
//*[@id="rsc1"]
它会查找 ID 为 rsc1
的所有 XML 节点。
缩写语法与以下内容类似:
ref:"rsc1"
这同样适用于约束。这是详细的 XPath:
//constraints/rsc_location
缩写语法与以下内容类似:
type:"rsc_location"
可以在 crmsh 和 Hawk2 中使用缩写语法。CIB 守护程序知道如何将 ACL 规则应用到匹配的对象。
16 网络设备绑定 #
对于许多系统,需要实施高于典型以太网设备的标准数据安全性或可用性要求的网络连接。在这些情况下,可以将多个以太网设备聚合到单个绑定设备。
通过绑定模块选项来配置绑定设备。其行为取决于联接设备的模式。该模式默认为 mode=active-backup
,这表示当主要设备发生故障时,另一个设备将会变成活动设备。
使用 Corosync 时,绑定设备不受群集软件的管理。因此,必须在可能需要访问绑定设备的每个群集节点上配置绑定设备。
16.1 使用 YaST 配置绑定设备 #
要配置联接设备,您必须有多个可以聚合到单独一个联接设备的以太网设备。按如下所示继续:
以
root
身份启动 YaST,然后选择 › 。在
中,切换到 选项卡以显示可用的设备。检查要聚合到联接设备的以太网设备是否有指定的 IP 地址。如果有,更改此地址:
选择要更改的设备,然后单击
。在打开的
对话框的 选项卡中,选择 选项。单击
,返回到 对话框中的 选项卡。
添加新联接设备:
单击
并将 更改为 。单击 继续。选择如何为绑定设备指派 IP 地址。有三种方法可供选择:
无链接和 IP 设置(绑定端口)
动态地址(使用 DHCP 或 Zeroconf)
静态指派的 IP 地址
请使用最适合您环境的方法。如果 Corosync 管理虚拟 IP 地址,请选择
,并为接口指派一个 IP 地址。切换到
选项卡。要选择需要纳入绑定的以太网设备,请选中相应设备前面的复选框。
编辑
。可以使用以下模式:balance-rr
提供负载平衡和容错,但会使包传输变得混乱无序。这可能会导致 TCP 重组等操作出现延迟。
active-backup
提供容错。
balance-xor
提供负载平衡和容错。
broadcast
提供容错。
802.3ad
提供动态链接集合(如果连接的交换机支持动态链接集合)。
balance-tlb
为传出流量提供负载平衡。
balance-alb
为传入和传出流量提供负载平衡(如果使用的网络设备允许在使用中修改网络设备的硬件地址)。
务必向
miimon=100
联接驱动程序选项 。如果不指定此参数,则不会定期检查链路,因此,绑定驱动程序可能会持续在有故障的链路上丢包。
单击
,将 YaST 保留为 ,完成联接设备的配置。YaST 会将此配置写入/etc/sysconfig/network/ifcfg-bondDEVICENUMBER
。
16.2 将设备热插拔到绑定中 #
有时,需要用另一个接口来取代绑定中的某个接口(例如,当相应的网络设备持续发生故障时)。解决方案是设置热插拔。此外还需要更改 udev
规则,以便按总线 ID(而非 MAC 地址)匹配该设备。这样,有缺陷的硬件(同一槽内具有不同 MAC 地址的网卡)允许更换的话,您便可以更换该硬件。
如果更喜欢手动配置,请参见 SUSE Linux Enterprise Server《管理指南》中“Basic Networking”一章的“Hotplugging of bond ports”一节。
以
root
身份启动 YaST,然后选择 › 。在
中,切换到 选项卡以显示已配置的设备。如果已在绑定中配置设备, 列中将会指明。对于已经聚合到联接设备的每个以太网设备,请执行以下步骤:
选择要更改的设备,然后单击
。 对话框随即打开。切换到
选项卡,确保 设置为On Hotplug
。切换到
选项卡。针对
,单击 并选择 选项。单击
和 ,返回到 对话框中的 选项卡。如果您现在单击以太网设备项,底部窗格会显示设备的详细信息,包括总线 ID。
单击
确认您的更改,并退出网络设置。
在引导时,网络设置不会等待热插拔设备就绪,而是等待绑定就绪,后者至少需要有一个设备可用。当从系统中去除一个接口(从 NIC 驱动程序解除绑定、执行 NIC 驱动程序的 rmmod
命令或真正去除 PCI 热插拔)时,内核会自动从绑定中将其去除。当您为系统添加新网卡(更换插槽中的硬件)时,udev
会应用基于总线的永久名称规则将新网卡重命名,并为其调用 ifup
。调用 ifup
会自动将新卡加入绑定。
16.3 更多信息 #
《kernel-source
后,您可以在 /usr/src/linux/Documentation/networking/bonding.txt
处找到该文件。
对于 High Availability 设置,本指南中所述的以下选项特别重要:miimon
和 use_carrier
。
17 负载平衡 #
在负载平衡的情况下,服务器群集对于外部客户端而言就如同是一台大型的快速服务器。这种看上去像是单台服务器的服务器被称为虚拟服务器。它包括一个或多个用于调度传入请求的负载平衡器,以及若干台运行实际服务的真实服务器。有了 SUSE Linux Enterprise High Availability 负载平衡设置,您就可以构建高度可伸缩且高度可用的网络服务,例如 Web、缓存、邮件、FTP、媒体和 VoIP 服务。
17.1 概念概述 #
SUSE Linux Enterprise High Availability 支持两种负载平衡技术:Linux 虚拟服务器 (LVS) 和 HAProxy。两者的主要差别在于,Linux 虚拟服务器在 OSI 第 4 层(传输层)上运行,可配置内核的网络层,而 HAProxy 在第 7 层(应用层)上的用户空间中运行。因此,Linux 虚拟服务器所需的资源更少但处理的负载更多,而 HAProxy 可以检查流量,执行 SSL 终止,并根据流量内容做出调度决策。
另一方面,Linux 虚拟服务器包含两个不同的软件:IPVS(IP 虚拟服务器)和 KTCPVS(内核 TCP 虚拟服务器)。IPVS 提供第 4 层负载平衡,而 KTCPVS 提供第 7 层负载平衡。
本章概述了负载平衡与高可用性结合使用的概念,然后简要介绍了 Linux 虚拟服务器和 HAProxy。最后,提供了其他阅读材料的链接。
真实的服务器和负载平衡器可通过高速 LAN 或地理位置分散的 WAN 互相连接。负载平衡器可将请求发送到不同的服务器。它们使群集的多个并行服务看似单个 IP 地址(虚拟 IP 地址,即 VIP)上的一个虚拟服务。发送请求时可使用 IP 负载平衡技术或应用程序级的负载平衡技术。系统的可伸缩性通过在群集中透明地添加或删除节点来实现。
高可用性通过检测节点或服务故障并相应地照常重配置整个虚拟服务器系统来实现。
有多种负载平衡策略。下面介绍适用于 Linux 虚拟服务器的一些第 4 层策略:
循环复用: 最简单的策略就是将每个连接轮流定向到不同的地址。例如,某个 DNS 服务器的多个条目可能与某个给定主机名对应。使用 DNS 循环复用时,该 DNS 服务器将轮流返回所有这些条目。因此,不同的客户端将看到不同的地址。
选择“最佳”服务器: 虽然此策略存在一些缺点,但您可以使用“第一台做出响应的服务器”或“负载最低的服务器”方法来实现平衡。
平衡每台服务器的连接数: 用户与服务器之间的负载平衡器可以在多台服务器之间划分用户数。
地理位置: 可以将客户端定向到附近的服务器。
下面介绍适用于 HAProxy 的一些第 7 层策略:
URI: 检查 HTTP 内容并将流量发送到最适合此特定 URL 的服务器。
URL 参数,RDP Cookie: 检查会话参数的 HTTP 内容(可能在 post 参数中,或者 RDP(远程桌面协议)会话 Cookie 中),并将流量发送到为此会话提供服务的服务器。
尽管 HAProxy 与 LVS/ipvsadm
的功能有些重叠,但如果后者无法满足需要,您可以使用 HAProxy,反之亦然:
SSL 终止: 前端负载平衡器可以处理 SSL 层。因此,云节点不需要访问 SSL 密钥,而可以利用负载平衡器中的 SSL 加速器。
应用级别: HAProxy 在应用级别运行,因此,负载平衡决策受内容流的影响。这样,便可以基于 Cookie 和其他此类过滤器实现持久性。
另一方面,HAProxy 不能完全取代 LVS/ipvsadm
:
LVS 支持“直接路由”,在此模式下,负载平衡器只作用于入站流,而出站流量将直接路由到客户端。在非对称环境中,这有可能会大幅提高吞吐量。
LVS 支持状态连接表复制(通过
conntrackd
)。因此,负载平衡器能够实现对客户端和服务器透明的故障转移。
17.2 使用 Linux 虚拟服务器配置负载平衡 #
以下章节概述了 LVS 的主要组件和概念,并说明了如何在 SUSE Linux Enterprise High Availability 上设置 Linux 虚拟服务器。
17.2.1 定向器 #
LVS 的主要组件是 ip_vs(也称 IPVS)内核代码。它是默认内核的一部分,在 Linux 内核中实施传输层负载平衡(第 4 层交换)。运行包含 IPVS 代码的 Linux 内核的节点称为定向器。定向器上运行的 IPVS 代码是 LVS 的基本功能。
当客户端连接到定向器时,系统会在所有群集节点间对传入请求进行负载平衡。定向器会使用一组经过修改以使 LVS 正常工作的路由规则将数据包转发到真实服务器。例如,连接不会在定向器上发起或终止,它也不会发送确认。定向器相当于将包从最终用户转发到真实服务器(运行用于处理请求的应用程序的主机)的专用路由器。
17.2.2 用户空间控制器和守护程序 #
ldirectord
守护程序是一个用户空间守护程序,用于在 LVS 负载平衡虚拟服务器群集中管理 Linux 虚拟服务器并监控真实的服务器。配置文件(见下文)指定虚拟服务及其关联的真实服务器,并指示 ldirectord
如何将此服务器配置为 LVS 重定向器。守护程序初始化时,将为群集创建虚拟服务。
ldirectord
守护程序通过定期请求已知 URL 并检查响应,来监控真实服务器的健康状况。如果真实服务器发生故障,便会从负载平衡器的可用服务器列表中去除。当服务监控程序检测到这台停止的服务器已恢复正常并重新运行时,会将此服务器添加回可用服务器列表。如果出现所有真实服务器关闭的情况,则可以指定一台将 Web 服务重定向到的回退服务器。备用服务器通常是本地主机,它会显示一个应急页面,说明 Web 服务暂时不可用。
ldirectord
使用 ipvsadm
工具(软件包 ipvsadm)来操作 Linux 内核的虚拟服务器表。
17.2.3 数据包转发 #
定向器可采用三种不同方法将包从客户端发送到真实服务器:
- 网络地址转换 (NAT)
传入请求到达虚拟 IP,然后通过将目标 IP 地址和端口更改为所选真实服务器的 IP 地址和端口将进来的请求转发到真实服务器。真实服务器向负载平衡器发送响应,负载平衡器再更改目标 IP 地址并将响应发回客户端。因此,最终用户就能从预期的源收到回复了。由于所有流量都要流经负载平衡器,它通常会成为群集的瓶颈。
- IP 隧道通讯(IP-IP 封装)
IP 隧道通讯进程允许将发送到某个 IP 地址的包重定向到可能处于其他网络上的另一个地址。LVS 通过 IP 隧道(重定向到其他 IP 地址)向真实服务器发送请求,然后真实服务器使用自己的路由选择表直接回复到客户端。群集成员可以处于不同的子网中。
- 直接路由
来自最终用户的包将直接转发到真实服务器。IP 包未经修改,因此必须配置真实服务器以接受虚拟服务器 IP 地址的流量。来自真实服务器的响应会直接发送到客户端。真实服务器和负载平衡器需处于同一物理网络段中。
17.2.4 调度算法 #
确定将哪台真实服务器用于客户端请求的新连接,是使用不同算法来实现的。这些算法以模块的形式提供,可进行调整以适应特定需要。如需简要了解可用的模块,请参见 ipvsadm(8)
手册页。从客户端接收到连接请求时,控制器会根据日程表将一台真实的服务器指派给此客户端。调度程序是 IPVS 内核代码的一部分,用于决定哪台真实服务器会获取下一个新连接。
有关 Linux 虚拟服务器调度算法的更详细说明,请访问 http://kb.linuxvirtualserver.org/wiki/IPVS。此外,您也可以在 ipvsadm
手册页中搜索 --scheduler
。
可以在 https://www.haproxy.org/download/1.6/doc/configuration.txt 上找到 HAProxy 的相关负载平衡策略。
17.2.5 使用 YaST 设置 IP 负载平衡 #
可使用 YaST IP 负载平衡模块配置基于内核的 IP 负载平衡。它是 ldirectord
的前端。
要访问“IP 负载平衡”对话框,请以 root
用户身份启动 YaST,然后选择 › 。或者,以 root
用户身份使用 yast2 iplb
从命令行启动 YaST 群集模块。
默认安装不包括配置文件 /etc/ha.d/ldirectord.cf
。此文件由 YaST 模块创建。YaST 模块中可用的选项卡与 /etc/ha.d/ldirectord.cf
配置文件的结构相对应,用于定义全局选项和虚拟服务的选项。
有关配置示例以及负载平衡器和真实服务器之间产生的进程,请参见例 17.1 “简单的 ldirectord 配置”。
如果在虚拟服务器部分和全局部分都指定了某个参数,那么在虚拟服务器部分中定义的值将覆盖在全局部分中定义的值。
以下过程描述了如何配置最重要的全局参数。有关各参数(以及此处未提及的参数)的更多细节,请单击ldirectord
手册页。
使用
可定义ldirectord
连接每台真实服务器以检查它们是否仍处于上线状态的间隔。通过
设置真实服务器应该在多长时间内响应上次检查。使用
可以定义在ldirectord
尝试向真实服务器发出多少次请求后即判定检查失败。通过
定义协商检查经过多少秒后应视为超时。在
中,输入当所有真实服务器都停机时,要将 Web 服务重定向到的 Web 服务器的主机名或 IP 地址。如果希望系统在任何真实服务器的连接状态发生改变时均发送警报,请在
中输入有效的电子邮件地址。通过
定义经过多少秒后,如果任何真实服务器仍无法访问,应重复发出电子邮件警报。在
中,指定应在出现哪种服务器状态时发送电子邮件提醒。要定义多种状态,请使用逗号分隔的列表。通过
定义ldirectord
是否应连续监控配置文件有无修改。如果设置为yes
,则将在发生更改时自动重新加载配置。通过
开关定义是否应从内核的 LVS 表中去除发生故障的真实服务器。如果设置为 ,则不会删除发生故障的服务器。而是将其权重置为0
,表示不接受任何新连接。已建立的连接将继续存在,直到超时为止。要使用其他路径进行日志记录,请在
中指定日志文件的路径。默认情况下,ldirectord
会将其日志文件写入/var/log/ldirectord.log
。
可通过为每种虚拟服务定义若干参数来配置一个或多个虚拟服务。以下过程描述了如何配置虚拟服务最重要的参数。有关各参数(以及此处未提及的参数)的更多细节,请单击ldirectord
手册页。
在 YaST IP 负载平衡模块中,切换到
选项卡。在
中,输入负载平衡器和真实服务器可作为 LVS 访问的共享虚拟 IP 地址(IPv4 或 IPv6)和端口。还可以指定主机名和服务来代替 IP 地址和端口号。或者,也可以使用防火墙标记。防火墙标记是一种将任意VIP:port
服务的集合聚合到一个虚拟服务中的方法。要指定
,需要输入服务器的 IP 地址(IPv4、IPv6 或主机名)、端口(或服务名称)以及转发方法。转发方法必须是ipip
、gate
或masq
,请参见第 17.2.3 节 “数据包转发”。单击
按钮,为每台真实服务器输入需要的自变量。在
中选择用于测试真实服务器是否仍然活动的检查类型。例如,要发送请求并检查响应是否包含预期的字符串,请选择Negotiate
。如果已将
设置为Negotiate
,则还需定义要监控的服务类型。从 下拉框中进行选择。在
中输入检查间隔期间每台真实服务器上所请求对象的 URI。如果要检查来自真实服务器的响应是否包含特定字符串(如 “I'm alive” 消息),请定义需要匹配的正则表达式。将正则表达式输入到 中。如果来自真实服务器的响应包含此表达式,则认为真实服务器处于活动状态。
根据您在步骤 6 中选定的 类型,您还必须为身份验证指定更多参数。切换到 选项卡,输入 、 、 或 等详细信息。有关更多信息,请参见 YaST 帮助文本或
ldirectord
手册页。切换至
选项卡。选择用于负载平衡的
。有关可用调度程序的信息,请参见ipvsadm(8)
手册页。选择要使用的
。如果虚拟服务指定为 IP 地址和端口,则必须使用tcp
或udp
。如果将虚拟服务指定为防火墙标记,则协议必须是fwm
。如果需要,可定义其他参数。单击
确认配置。YaST 会将此配置写入/etc/ha.d/ldirectord.cf
。
图 17.1 “YaST IP 负载平衡 - 全局参数”和图 17.2 “YaST IP 负载平衡 - 虚拟服务”中所示的值将生成 /etc/ha.d/ldirectord.cf
中所定义的以下配置:
autoreload = yes 1 checkinterval = 5 2 checktimeout = 3 3 quiescent = yes 4 virtual = 192.168.0.200:80 5 checktype = negotiate 6 fallback = 127.0.0.1:80 7 protocol = tcp 8 real = 192.168.0.110:80 gate 9 real = 192.168.0.120:80 gate 9 receive = "still alive" 10 request = "test.html" 11 scheduler = wlc 12 service = http 13
定义 | |
| |
真实服务器必须在上次检查后多长时间内作出响应。 | |
定义不要从内核的 LVS 表中删除发生故障的真实服务器,而是将其权重置为 | |
LVS 的虚拟 IP 地址 (VIP)。可通过端口 | |
用于测试真实服务器是否仍处于活动状态的检查类型。 | |
此服务的所有真实服务器都宕机时,要将 Web 服务重定向到的服务器。 | |
要使用的协议。 | |
定义了两台真实服务器,均可通过端口 | |
需要在真实服务器的响应字符串中匹配的正则表达式。 | |
检查间隔期间每台真实服务器上所请求对象的 URI。 | |
用于负载平衡的所选调度程序。 | |
要监控的服务类型。 |
此配置会使系统执行以下操作:ldirectord
每 5 秒 (2) 连接一次每台真实服务器,并按照 9 和 11 指定的值请求 192.168.0.110:80/test.html
或 192.168.0.120:80/test.html
。如果最后一次检查时,3 秒内 (3) 未从某台真实服务器收到预期的 still alive
字符串 (10),会将此真实服务器从可用池中去除。但由于设置了 quiescent=yes
(4),系统不会将该真实服务器从 LVS 表中去除,而是将其权重置为 0
,这样就不会接受连至此真实服务器的新连接。已建立的连接会保持开启状态,直到超时。
17.2.6 其他步骤 #
除了使用 YaST 配置 ldirectord
外,还需要确保满足以下条件,才能完成 LVS 设置:
正确设置真实服务器以提供所需服务。
负载平衡服务器(或服务器)必须能够使用 IP 转发将流量路由到真实服务器。真实服务器的网络配置取决于选择的包转发方法。
为避免负载平衡服务器(或服务器)成为整个系统的单个故障点,需要设置负载平衡器的一个或多个备份。在群集配置中配置
ldirectord
的原始资源,以便在发生硬件故障时,ldirectord
可以故障转移到其他服务器。由于负载平衡器的备份也需要
ldirectord
配置文件才能完成其任务,因此请确保/etc/ha.d/ldirectord.cf
在要用作负载平衡器备份的所有服务器上都可用。可以按第 4.7 节 “将配置传输到所有节点”中所述使用 Csync2 同步配置文件。
17.3 使用 HAProxy 配置负载平衡 #
以下章节概述了 HAProxy 以及如何针对高可用性进行设置。负载平衡器会将所有请求分发到其后端服务器。它配置为主动/被动模式,也就是说,当一台服务器发生故障时,被动服务器就会变成主动服务器。在这种情况下,用户察觉不到任何服务中断的迹象。
在本节中,我们将使用以下设置:
IP 地址为
192.168.1.99
的负载平衡器。一个虚拟浮动 IP 地址
192.168.1.99
。我们的服务器(通常用于托管 Web 内容)
www.example1.com
(IP:192.168.1.200
)和www.example2.com
(IP:192.168.1.201
)
要配置 HAProxy,请使用以下过程:
安装 haproxy 软件包。
创建包含以下内容的
/etc/haproxy/haproxy.cfg
文件:global 1 maxconn 256 daemon defaults 2 log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 timeout connect 5000 3 timeout client 50s 4 timeout server 50000 5 frontend LB bind 192.168.1.99:80 6 reqadd X-Forwarded-Proto:\ http default_backend LB backend LB mode http stats enable stats hide-version stats uri /stats stats realm Haproxy\ Statistics stats auth haproxy:password 7 balance roundrobin 8 option httpclose option forwardfor cookie LB insert option httpchk GET /robots.txt HTTP/1.0 server web1-srv 192.168.1.200:80 cookie web1-srv check server web2-srv 192.168.1.201:80 cookie web2-srv check
该部分包含进程范围的选项和特定于操作系统的选项。
maxconn
每个进程的最大并发连接数。
daemon
建议的模式,HAProxy 将在后台运行。
该部分为其声明后的所有其他部分设置默认参数。一些重要的行:
redispatch
启用或禁用在连接失败时重新分发会话。
log
启用事件和流量日志记录。
mode http
以 HTTP 模式运行(针对 HAProxy 建议采用的模式)。在此模式下,将会先分析请求,然后再执行与任何服务器的连接。不符合 RFC 要求的请求将被拒绝。
option forwardfor
将 HTTP
X-Forwarded-For
报头添加到请求中。如果您想要保留客户端的 IP 地址,则需要使用此选项。
与服务器建立连接的尝试成功之前可等待的最长时间。
客户端可保持非活动状态的最长时间。
服务器端可保持非活动状态的最长时间。
该部分将前端部分和后端部分合并在一起。
balance leastconn
定义负载平衡算法,请参见 https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-balance。
stats enable
,stats auth
启用统计报告(通过
stats enable
)。auth
选项记录针对特定帐户的身份验证的统计信息。
HAProxy 统计信息报告页面的身份凭证。
负载平衡将在轮询过程中工作。
测试配置文件:
#
haproxy -f /etc/haproxy/haproxy.cfg -c
将下面一行添加到 Csync2 的配置文件
/etc/csync2/csync2.cfg
中,以确保包含 HAProxy 配置文件:include /etc/haproxy/haproxy.cfg
同步该文件:
#
csync2 -f /etc/haproxy/haproxy.cfg
#
csync2 -xv
注意Csync2 配置部分假设已使用 crm 外壳提供的引导脚本配置 HA 节点。有关细节,请参见《安装和设置快速入门》。
确保在两个负载平衡器(
alice
和bob
)上都禁用 HAProxy,因为 HAProxy 由 Pacemaker 负责启动:#
systemctl disable haproxy
配置新的 CIB:
#
crm
crm(live)#
cib new haproxy-config
crm(haproxy-config)#
primitive haproxy systemd:haproxy \ op start timeout=120 interval=0 \ op stop timeout=120 interval=0 \ op monitor timeout=100 interval=5s \ meta target-role=Started
crm(haproxy-config)#
primitive vip IPaddr2 \ params ip=192.168.1.99 nic=eth0 cidr_netmask=23 broadcast=192.168.1.255 \ op monitor interval=5s timeout=120 on-fail=restart
crm(haproxy-config)#
group g-haproxy vip haproxy
校验新 CIB 并更正任何错误:
crm(haproxy-config)#
verify
提交新的 CIB:
crm(haproxy-config)#
cib use live
crm(live)#
cib commit haproxy-config
17.4 更多信息 #
有关
ldirectord
的更多信息,请参见其综合性手册页。
18 虚拟化的高可用性 #
本章介绍如何将虚拟机配置为高度可用的群集资源。
18.1 概述 #
虚拟机在 High Availability 群集中可以充当不同的角色:
虚拟机可作为资源由群集进行管理,群集无需管理虚拟机上运行的服务。在这种情况下,VM 对于群集是不透明的。本文中所述的便是这种场景。
虚拟机可以是群集资源并运行
pacemaker_remote
,这样群集便能管理虚拟机上运行的服务。在这种情况下,VM 是 guest 节点,对群集是透明的。对于这种场景,请参见Article “Pacemaker 远程快速入门”, Section 4 “用例 2:设置包含 Guest 节点的群集”。虚拟机可以运行完整的群集堆栈。在这种情况下,VM 是常规群集节点,不是受群集管理的资源。对于这种场景,请参见Article “安装和设置快速入门”。
以下过程介绍了如何在块存储设备上设置高度可用的虚拟机,并将另一个块设备用作 OCFS2 卷来存储 VM 锁文件和 XML 配置文件。虚拟机和 OCFS2 卷配置为由群集管理的资源,并具有资源约束,以确保虚拟机在任何节点上启动之前,锁文件目录始终可用。这样可以防止虚拟机在多个节点上启动。
18.2 要求 #
一个正在运行的 High Availability 群集,该群集至少包含两个节点和一个隔离设备(如 SBD)。
群集节点之间采用无口令
root
SSH 登录方式。每个群集节点上都设置了网桥,用于安装和运行 VM。网桥必须与用于群集通讯和管理的网络分开。
两个或多个共享存储设备(或单个共享设备上的多个分区),以便所有群集节点都可以访问 VM 所需的文件和存储空间:
用作 OCFS2 卷的设备,用于存储 VM 锁文件和 XML 配置文件。下面的过程介绍了如何创建和挂载 OCFS2 卷。
包含 VM 安装源(例如 ISO 文件或磁盘映像)的设备。
根据安装源的不同,可能还需要另一个设备作为 VM 存储磁盘。
为避免 I/O 速度过慢,这些设备必须与用于 SBD 的共享设备分开。
所有存储路径的稳定设备名称,例如
/dev/disk/by-id/DEVICE_ID
。同一个共享存储设备在不同的节点上可能会使用不一致的/dev/sdX
名称,这会导致 VM 迁移失败。
18.3 配置群集资源以管理锁文件 #
按照下面的过程配置群集以管理虚拟机锁文件。在所有节点上都必须可以使用锁文件目录,这样无论 VM 在哪个节点上运行,群集都能识别锁文件。
您只需在其中一个群集节点上运行以下命令。
在其中一个共享存储设备上创建 OCFS2 卷:
#
mkfs.ocfs2 /dev/disk/by-id/DEVICE_ID
运行
crm configure
启动crm
交互式外壳。为 DLM 创建原始资源:
crm(live)configure#
primitive dlm ocf:pacemaker:controld \ op monitor interval=60 timeout=60
为 OCFS2 卷创建原始资源:
crm(live)configure#
primitive ocfs2 Filesystem \ params device="/dev/disk/by-id/DEVICE_ID" directory="/mnt/shared" fstype=ocfs2 \ op monitor interval=20 timeout=40
为 DLM 和 OCFS2 资源创建组:
crm(live)configure#
group g-virt-lock dlm ocfs2
克隆该组,使它在所有节点上运行:
crm(live)configure#
clone cl-virt-lock g-virt-lock \ meta interleave=true
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。检查组克隆的状态。它在所有节点上都应处于运行状态:
#
crm status
[...] Full List of Resources: [...] * Clone Set: cl-virt-lock [g-virt-lock]: * Started: [ alice bob ]
18.4 准备群集节点以托管虚拟机 #
按照下面的过程安装和启动所需的虚拟化服务,并将节点配置为将 VM 锁文件存储在共享的 OCFS2 卷上。
此过程使用 crm cluster run
同时在所有节点上运行命令。如果您更喜欢单独管理每个节点,可以省略命令的 crm cluster run
部分。
在群集中的所有节点上安装虚拟化软件包:
#
crm cluster run "zypper install -y -t pattern kvm_server kvm_tools"
在一个节点上的
/etc/libvirt/qemu.conf
文件中,找到并启用lock_manager
设置:lock_manager = "lockd"
在同一节点上的
/etc/libvirt/qemu-lockd.conf
文件中,找到并启用file_lockspace_dir
设置,然后将值更改为指向 OCFS2 卷上的目录:file_lockspace_dir = "/mnt/shared/lockd"
将这些文件复制到群集中的其他节点:
#
crm cluster copy /etc/libvirt/qemu.conf
#
crm cluster copy /etc/libvirt/qemu-lockd.conf
在群集中的所有节点上启用并启动
libvirtd
服务:#
crm cluster run "systemctl enable --now libvirtd"
这也会启动
virtlockd
服务。
18.5 将虚拟机添加为群集资源 #
按照下面的过程将虚拟机作为群集资源添加到群集,并设置资源限制,以确保 VM 始终可以访问锁文件。锁文件由组 g-virt-lock
中的资源管理,通过克隆 cl-virt-lock
可在所有节点上使用该组。
在其中一个群集节点上安装虚拟机,但需符合以下限制:
安装源和存储区必须位于共享设备上。
不要将 VM 配置为在主机引导时启动。
有关详细信息,请参见 Virtualization Guide for SUSE Linux Enterprise Server。
如果虚拟机正在运行,请将其关闭。将 VM 添加为资源后,群集将启动 VM。
将 XML 配置转储到 OCFS2 卷。对每个 VM 重复此步骤:
#
virsh dumpxml VM1 > /mnt/shared/VM1.xml
确保 XML 文件不包含对未共享本地路径的任何引用。
运行
crm configure
启动crm
交互式外壳。创建原始资源来管理虚拟机。对每个 VM 重复此步骤:
crm(live)configure#
primitive VM1 VirtualDomain \ params config="/mnt/shared/VM1.xml" remoteuri="qemu+ssh://%n/system" \ meta allow-migrate=true \ op monitor timeout=30s interval=10s
选项
allow-migrate=true
可启用实时迁移。如果其值设置为false
,群集会迁移 VM,具体做法是在一个节点上关闭 VM,然后在另一个节点上重启动该 VM。如果需要设置利用率属性,以帮助系统根据 VM 的负载影响放置 VM,请参见第 7.10 节 “根据资源负载影响放置资源”。
创建共置约束,使虚拟机只能在正在运行
cl-virt-lock
的节点上启动:crm(live)configure#
colocation col-fs-virt inf: ( VM1 VM2 VMX ) cl-virt-lock
创建顺序约束,使
cl-virt-lock
始终先于虚拟机启动:crm(live)configure#
order o-fs-virt Mandatory: cl-virt-lock ( VM1 VM2 VMX )
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。检查虚拟机的状态:
#
crm status
[...] Full List of Resources: [...] * Clone Set: cl-virt-lock [g-virt-lock]: * Started: [ alice bob ] * VM1 (ocf::heartbeat:VirtualDomain): Started alice * VM2 (ocf::heartbeat:VirtualDomain): Started alice * VMX (ocf::heartbeat:VirtualDomain): Started alice
虚拟机现在由 High Availability 群集管理,并且可以在群集节点之间迁移。
将虚拟机添加为群集资源后,请勿手动管理它们,应仅使用第 8 章 “管理群集资源”中所述的群集工具来管理。
要在群集管理的 VM 上执行维护任务,请参见第 28.2 节 “用于维护任务的不同选项”。
18.6 测试设置 #
执行以下测试来确认虚拟机 High Availability 设置是否按预期工作。
请在测试环境而非生产环境中执行这些测试。
虚拟机
VM1
正在节点alice
上运行在节点
bob
上,尝试使用virsh start VM1
手动启动该 VM。预期结果:
virsh
命令会失败。当VM1
正在alice
上运行时,无法在bob
上手动启动该 VM。
虚拟机
VM1
正在节点alice
上运行打开两个终端。
在第一个终端中,通过 SSH 连接到
VM1
。在第二个终端中,尝试使用
crm resource move VM1 bob
将VM1
迁移到节点bob
。运行
crm_mon -r
监控群集状态,直到其稳定为止。这可能需要一点时间。在第一个终端中,检查与
VM1
的 SSH 连接是否仍处于活动状态。预期结果:群集状态会显示
VM1
已在bob
上启动。与VM1
的 SSH 连接在整个迁移过程中都会保持活动状态。
虚拟机
VM1
正在节点bob
上运行重引导
bob
。在节点
alice
上,运行crm_mon -r
监控群集状态,直到其稳定为止。这可能需要一点时间。预期结果:群集状态会显示
VM1
已在alice
上启动。
虚拟机
VM1
正在节点alice
上运行在
alice
上,通过强制关机或拔下电源线来模拟崩溃。在节点
bob
上,运行crm_mon -r
监控群集状态,直到其稳定为止。与节点重引导后发生的 VM 迁移相比,节点崩溃后发生的 VM 故障转移通常需要更长的时间。预期结果:不久之后,群集状态会显示
VM1
已在bob
上启动。
19 Geo 群集(多站点群集) #
除本地群集和城域群集外,SUSE® Linux Enterprise High Availability 15 SP6 还支持地理位置分散的群集(Geo 群集,有时也称为多站点群集)。这意味着,每个本地群集可以有多个地域分散的站点。这些群集之间的故障转移由更高级的实体、所谓的 booth
进行协调。有关如何使用和设置 Geo 群集的详细信息,请参见Article “Geo 群集快速入门”和Book “Geo 群集指南”。
第 III 部分 存储和数据复制 #
- 20 分布式锁管理器 (DLM)
内核中的分布式锁管理器 (DLM) 是 OCFS2、GFS2、群集 MD 和群集 LVM (lvmlockd) 用于在每个相关层提供主动-主动存储的基础组件。
- 21 OCFS2
Oracle Cluster File System 2 (OCFS2) 是一个自 Linux 2.6 内核以来完全集成的通用日志文件系统。OCFS2 可将应用程序二进制文件、数据文件和数据库存储到共享存储设备。群集中的所有节点对文件系统都有并行的读和写权限。用户空间控制守护程序(通过克隆资源管理)提供与 HA 堆栈的集成,尤其是与 Corosync 和分布式锁管理器 (DLM) 的集成。
- 22 GFS2
全局文件系统 2 或称 GFS2 是适用于 Linux 计算机群集的共享磁盘文件系统。GFS2 允许所有节点直接同时访问同一个共享块存储。GFS2 不提供断开操作模式,也没有客户端角色或服务器角色。GFS2 群集中的所有节点以对等体的形式运行。GFS2 最多支持 32 个群集节点。在群集中使用 GFS2 需要通过硬件来访问共享存储设备,并需要通过一个锁管理器来控制对存储空间的访问。
如果性能是其中一个主要要求,SUSE 建议为群集环境使用 OCFS2 而不要使用 GFS2。我们的测试表明,与采用此设置的 GFS2 相比,OCFS2 的表现更好。
- 23 DRBD
通过分布式复制块设备 (DRBD*),您可以为位于 IP 网络上两个不同站点的两个块设备创建镜像。和 Corosync 一起使用时,DRBD 支持分布式高可用性 Linux 群集。本章说明如何安装和设置 DRBD。
- 24 群集逻辑卷管理器(群集 LVM)
管理群集上的共享存储设备时,存储子系统发生的所有更改都必须通知到每个节点。逻辑卷管理器 (LVM) 支持以透明方式来管理整个群集中的卷组。在多个主机之间共享的卷组可使用与本地存储相同的命令进行管理。
- 25 群集多设备(群集 MD)
群集多设备(群集 MD)是一项基于软件的群集 RAID 存储解决方案。目前,群集 MD 为群集提供了 RAID1 镜像冗余。在 SUSE Linux Enterprise High Availability 15 SP6 中,随附了 RAID10 技术预览版。如果您要尝试 RAID,请在相关
mirror
命令中用10
10 替换mdadm
。本章介绍如何创建和使用群集 MD。- 26 Samba 群集
群集 Samba 服务器提供异构网络的高可用性解决方案。本章说明了一些背景信息以及如何设置群集 Samba 服务器。
- 27 使用 ReaR (Relax-and-Recover) 实现灾难恢复
Relax-and-Recover(“ReaR”)是供系统管理员使用的灾难恢复框架。它是一个 Bash 脚本集合,您需要根据要在发生灾难时加以保护的特定生产环境调整这些脚本。
没有任何灾难恢复解决方案能够现成地解决问题。因此,必须在灾难发生前做好准备。
20 分布式锁管理器 (DLM) #
内核中的分布式锁管理器 (DLM) 是 OCFS2、GFS2、群集 MD 和群集 LVM (lvmlockd) 用于在每个相关层提供主动-主动存储的基础组件。
20.1 用于 DLM 通讯的协议 #
为了避免单一故障点,非常有必要对 High Availability 群集配置冗余通讯路径。对于 DLM 通讯也是如此。如果出于任何原因无法使用网络绑定(聚合控制协议,LACP),我们强烈建议在 Corosync 中定义冗余通讯通道(另一个环)。有关详细信息,请参见 过程 4.3 “定义冗余通讯通道”。
DLM 可使用 TCP 或 SCTP 协议通过端口 21064 进行通讯,具体使用哪个协议取决于 /etc/corosync/corosync.conf
中的配置。
如果
设置为none
(表示禁用冗余环配置),DLM 会自动使用 TCP。但是,如果未定义冗余通讯通道,当 TCP 链路断开时,DLM 通讯将会失败。如果
设置为passive
(通常会如此设置),并且在/etc/corosync/corosync.conf
中正确配置了另一个通讯环,DLM 将自动使用 SCTP。在这种情况下,DLM 消息交换会获得 SCTP 提供的冗余功能。
20.2 配置 DLM 群集资源 #
DLM 使用 Pacemaker 提供的并在用户空间中运行的群集成员资格服务。因此,DLM 需要配置为群集中每个节点上都存在的克隆资源。
由于 OCFS2、GFS2、群集 MD 和群集 LVM (lvmlockd) 全部使用 DLM,因此为 DLM 配置一个资源便已足够。由于 DLM 资源在群集中的所有节点上运行,因此它配置为克隆资源。
如果您的设置包含 OCFS2 和群集 LVM,则只需为 OCFS2 和群集 LVM 配置一个 DLM 资源就够了。在此情况下,请使用 过程 20.1 “配置 DLM 的基础组” 配置 DLM。
但是,如果您需要确保使用 DLM 的资源彼此独立(例如多个 OCFS2 挂载点),请使用不同的共置和顺序约束,而不要使用组。在此情况下,请使用 过程 20.2 “配置独立的 DLM 资源” 配置 DLM。
此配置由一个包含数个原始资源的基础组和一个基础克隆资源构成。之后,基础组和基础克隆便可用于多种不同的场景(例如,用于 OCFS2 和群集 LVM)。您只需视需要使用相应的基元资源扩展基本组。由于基本组具有内部共置和顺序约束,您无需单独指定多个组、克隆及其依赖项,方便了总体设置。
以
root
或同等身份登录节点。运行
crm configure
。为 DLM 创建原始资源:
crm(live)configure#
primitive dlm ocf:pacemaker:controld \ op monitor interval="60" timeout="60"
为
dlm
资源和其他存储相关的资源创建一个基础组:crm(live)configure#
group g-storage dlm
克隆
g-storage
组,使它在所有节点上运行:crm(live)configure#
clone cl-storage g-storage \ meta interleave=true target-role=Started
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
未启用 STONITH 的群集不受支持。如果出于测试或查错目的将全局群集选项 stonith-enabled
设置为 false
,则 DLM 资源以及依赖于它的所有服务(例如群集 LVM、GFS2 和 OCFS2)将无法启动。
此配置由一个原始资源和一个克隆资源构成,但不包含组。通过添加共置和顺序约束,可以避免在多个使用 DLM 的资源(例如多个 OCFS2 挂载点)之间形成依赖关系。
以
root
或同等身份登录节点。运行
crm configure
。为 DLM 创建原始资源:
crm(live)configure#
primitive dlm ocf:pacemaker:controld \ op start timeout=90 interval=0 \ op stop timeout=100 interval=0 \ op monitor interval=60 timeout=60
克隆
dlm
资源,使它在所有节点上运行:crm(live)configure#
clone cl-dlm dlm meta interleave=true
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
21 OCFS2 #
Oracle Cluster File System 2 (OCFS2) 是一个自 Linux 2.6 内核以来完全集成的通用日志文件系统。OCFS2 可将应用程序二进制文件、数据文件和数据库存储到共享存储设备。群集中的所有节点对文件系统都有并行的读和写权限。用户空间控制守护程序(通过克隆资源管理)提供与 HA 堆栈的集成,尤其是与 Corosync 和分布式锁管理器 (DLM) 的集成。
21.1 功能和优势 #
OCFS2 可用于诸如以下场景的存储解决方案,例如:
一般应用程序和工作负荷。
群集中的 Xen 映像存储。Xen 虚拟机和虚拟服务器可存储于由群集服务器安装的 OCFS2 卷中。它提供了 Xen 虚拟机在各服务器之间的快速便捷的可移植性。
LAMP (Linux、Apache、MySQL 和 PHP | Perl | Python) 堆栈。
作为对称的高性能并行群集文件系统,OCFS2 支持以下功能:
应用程序文件对群集中的所有节点均可用。用户只需在群集中的 OCFS2 上安装它一次。
所有节点都可以通过标准文件系统接口直接并行读写至存储区,从而方便地管理运行于群集上的应用程序。
文件访问通过 DLM 协调。DLM 控制在多数情况下都运行良好,但如果应用程序的设计与 DLM 争夺对文件访问的协调,则此设计可能会限制可伸缩性。
所有后端存储上都可以使用存储备份功能。可以方便地创建共享应用程序文件的图形,它能够帮助提供有效的故障恢复。
OCFS2 还提供以下功能:
元数据缓存。
元数据日志。
跨节点的文件数据一致性。
支持多达 4 KB 的多个块大小、多达 1 MB 的群集大小,最大卷大小为 4 PB (Petabyte)。
支持最多 32 个群集节点。
对于数据库文件的异步和直接 I/O 支持,提高了数据库性能。
仅当与 SUSE Linux Enterprise High Availability 提供的 pcmk (Pacemaker) 堆栈搭配使用时,OCFS2 才受 SUSE 支持。与 o2cb 堆栈结合使用时,SUSE 不提供对 OCFS2 的支持。
21.2 OCFS2 软件包和管理实用程序 #
SUSE Linux Enterprise High Availability 15 SP6 中会自动安装 OCFS2 内核模块 (ocfs2
)。要使用 OCFS2,请确保已在群集中的每个节点上安装以下软件包:ocfs2-tools 和与内核匹配的 ocfs2-kmp-* 软件包。
ocfs2-tools 软件包提供以下实用程序,用于管理 OCFS2 卷。有关语法信息,请参见其手册页。
- debugfs.ocfs2
检查 OCFS2 文件系统的状态以进行调试。
- defragfs.ocfs2
减少 OCFS2 文件系统的碎片。
- fsck.ocfs2
检查文件系统的错误并进行选择性的修改。
- mkfs.ocfs2
在某个设备上创建 OCFS2 文件系统,通常是共享物理或逻辑磁盘上的某个分区。
- mounted.ocfs2
检测并列出群集系统上所有的 OCFS2 卷。检测并列出已经安装了 OCFS2 设备的系统上的所有节点或列出所有的 OCFS2 设备。
- tunefs.ocfs2
更改 OCFS2 文件系统参数,包括卷标、节点槽号、所有节点槽的日志大小和卷大小。
21.3 配置 OCFS2 服务和 STONITH 资源 #
创建 OCFS2 卷之前,必须先将 DLM 和 STONITH 资源配置为群集中的服务。
以下过程使用 crm
外壳配置群集资源。或者,您也可以按第 21.6 节 “使用 Hawk2 配置 OCFS2 资源”中所述,使用 Hawk2 来配置资源。
您需要配置屏蔽设备。没有一个适当的 STONITH 机制(如 external/sbd
),则配置会失败。
启动外壳,并以
root
用户或同等身份登录。如过程 13.3 “初始化 SBD 设备”中所述,创建 SBD 分区。
运行
crm configure
.将
external/sbd
配置为屏蔽设备:crm(live)configure#
primitive sbd_stonith stonith:external/sbd \ params pcmk_delay_max=30 meta target-role="Started"
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
有关为 DLM 配置资源的细节,请参见第 20.2 节 “配置 DLM 群集资源”。
21.4 创建 OCFS2 卷 #
根据第 21.3 节 “配置 OCFS2 服务和 STONITH 资源”中所述配置 DLM 群集资源后,请将系统配置为使用 OCFS2,并创建 OCFs2 卷。
我们建议您通常将应用程序文件和数据文件存储在不同的 OCFS2 卷上。如果应用程序卷和数据卷具有不同的装入要求,则必须将它们存储在不同的卷上。
开始之前要准备计划用于 OCFS2 卷的块设备。将这些设备留作可用空间。
然后,按过程 21.2 “创建并格式化 OCFS2 卷”中所述使用 mkfs.ocfs2
创建并格式化 OCFS2 卷。下面列出了此命令最重要的参数。有关详细信息和命令语法,请参见 mkfs.ocfs2
手册页。
- 卷标签 (
-L
) 卷的描述性名称能够在不同节点上安装卷时唯一标识它。使用
tunefs.ocfs2
实用程序根据需要修改该卷标。- 群集大小 (
-C
) 分配给文件以保存数据的最小空间单元。要了解可用的选项和建议,请参见
mkfs.ocfs2
手册页。- 节点槽数 (
-N
) 可以同时安装卷的最大节点数。OCFS2 将为每个节点创建单独的系统文件(如日志)。访问卷的节点可以是小端体系结构(如 AMD64/Intel 64)和大端体系结构(如 S/390x)的组合。
节点特定的文件称为本地文件。节点槽号附加到该本地文件。例如:
journal:0000
属于指派到槽号0
的所有节点。根据预期有多少个节点并行挂载卷,在创建卷时设置每个卷的最大节点槽数。使用
tunefs.ocfs2
实用程序根据需要增加节点槽数。该值不能减小,并且一个节点槽大约会占用 100 MiB 磁盘空间。如果未指定
-N
参数,系统会根据文件系统的大小确定节点槽数。有关默认的值,请参见mkfs.ocfs2
手册页。- 块大小 (
-b
) 文件系统可寻址的最小空间单元创建卷时请指定块大小。要了解可用的选项和建议,请参见
mkfs.ocfs2
手册页。- 打开/关闭特定功能 (
--fs-features
) 可以提供功能标志的逗号分隔列表,
mkfs.ocfs2
会尝试根据此列表创建具有这些功能的文件系统。要打开某功能,请将其加入列表。要关闭某功能,请在其名称前加no
。有关所有可用标志的概述,请参见
mkfs.ocfs2
手册页。- 预定义功能 (
--fs-feature-level
) 用于从一组预定义文件系统功能中进行选择。有关可用选项的信息,请参见
mkfs.ocfs2
手册页。
如果使用 mkfs.ocfs2
创建和格式化卷时未指定任何功能,默认会启用以下功能:unwritten
、backup-super
、metaecc
、sparse
、indexed-dirs
、inline-data
和 xattr
。
只在群集节点之一上执行以下步骤。
打开终端窗口并以
root
用户身份登录。使用命令
crm status
检查群集是否已上线。使用
mkfs.ocfs2
实用程序创建并格式化卷。有关此命令的语法的信息,请参见mkfs.ocfs2
手册页。例如,要创建最多支持 32 个群集节点的新 OCFS2 文件系统,请输入以下命令:
#
mkfs.ocfs2 -N 32 /dev/disk/by-id/DEVICE_ID
始终使用稳定的设备名称(例如
/dev/disk/by-id/scsi-ST2000DM001-0123456_Wabcdefg
)。
21.5 挂载 OCFS2 卷 #
可以手动挂载 OCFS2 卷,也可以按过程 21.4 “使用群集资源管理器挂载 OCFS2 卷”中所述使用群集管理器挂载。
要挂载多个 OCFS2 卷,请参见过程 21.5 “使用群集资源管理器挂载多个 OCFS2 卷”。
打开终端窗口并以
root
用户身份登录。使用命令
crm status
检查群集是否已上线。使用
mount
命令从命令行挂载卷。
您可以在单个节点(不具有功能完备的群集堆栈)上挂载 OCFS2 卷,例如,用于快速访问备份文件中的数据。要执行此操作,请使用 mount
命令(带 -o nocluster
选项)。
此挂载方法缺少针对整个群集的保护能力。为了避免损坏文件系统,您必须确保仅将其挂载到一个节点上。
要使用 High Availability 软件挂载 OCFS2 卷,请在群集中配置 OCFS2 文件系统资源。以下过程使用 crm
外壳配置群集资源。或者,您也可以按第 21.6 节 “使用 Hawk2 配置 OCFS2 资源”中所述,使用 Hawk2 来配置资源。
以
root
或同等身份登录节点。运行
crm configure
.配置 Pacemaker 以在群集中的每个节点上挂载 OCFS2 文件系统:
crm(live)configure#
primitive ocfs2-1 ocf:heartbeat:Filesystem \ params device="/dev/disk/by-id/DEVICE_ID" directory="/mnt/shared" fstype="ocfs2" \ op monitor interval="20" timeout="40" \ op start timeout="60" op stop timeout="60" \ meta target-role="Started"
将
ocfs2-1
原始资源添加到您在过程 20.1 “配置 DLM 的基础组”中创建的g-storage
组。crm(live)configure#
modgroup g-storage add ocfs2-1
受限于基础组的内部共置和顺序约束,
ocfs2-1
资源仅可在已有dlm
资源在运行的节点上启动。重要:不要为多个 OCFS2 资源使用组将多个 OCFS2 资源添加到一个组中会在 OCFS2 卷之间创建依赖关系。例如,如果使用
crm configure group g-storage dlm ocfs2-1 ocfs2-2
创建了一个组,那么停止ocfs2-1
也会停止ocfs2-2
,启动ocfs2-2
也会启动ocfs2-1
。要在群集中使用多个 OCFS2 资源,请按过程 21.5 “使用群集资源管理器挂载多个 OCFS2 卷”中所述使用共置和顺序约束。
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
要在群集中挂载多个 OCFS2 卷,请为每个卷配置一个 OCFS2 文件系统资源,并将其与您在过程 20.2 “配置独立的 DLM 资源”中创建的 dlm
资源共置。
不要使用 DLM 将多个 OCFS2 资源添加到一个组中。这会在 OCFS2 卷之间创建依赖关系。例如,如果 ocfs2-1
和 ocfs2-2
在同一个组中,那么停止 ocfs2-1
也会停止 ocfs2-2
。
以
root
或同等身份登录节点。运行
crm configure
。为第一个 OCFS2 卷创建原始资源:
crm(live)configure#
primitive ocfs2-1 Filesystem \ params directory="/srv/ocfs2-1" fstype=ocfs2 device="/dev/disk/by-id/DEVICE_ID1" \ op monitor interval=20 timeout=40 \ op start timeout=60 interval=0 \ op stop timeout=60 interval=0
为第二个 OCFS2 卷创建原始资源:
crm(live)configure#
primitive ocfs2-2 Filesystem \ params directory="/srv/ocfs2-2" fstype=ocfs2 device="/dev/disk/by-id/DEVICE_ID2" \ op monitor interval=20 timeout=40 \ op start timeout=60 interval=0 \ op stop timeout=60 interval=0
克隆 OCFS2 资源,使其可以在所有节点上运行:
crm(live)configure#
clone cl-ocfs2-1 ocfs2-1 meta interleave=true
crm(live)configure#
clone cl-ocfs2-2 ocfs2-2 meta interleave=true
为两个 OCFS2 资源添加共置约束,使其只能在正在运行 DLM 的节点上运行:
crm(live)configure#
colocation col-ocfs2-with-dlm inf: ( cl-ocfs2-1 cl-ocfs2-2 ) cl-dlm
为两个 OCFS2 资源添加顺序约束,使其只能在 DLM 运行后才能启动:
crm(live)configure#
order o-dlm-before-ocfs2 Mandatory: cl-dlm ( cl-ocfs2-1 cl-ocfs2-2 )
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
21.6 使用 Hawk2 配置 OCFS2 资源 #
除了使用 crm 外壳为 OCFS2 手动配置 DLM 和文件系统资源以外,您还可以使用 Hawk2
中的 OCFS2 模板。不包括 STONITH 资源的配置。如果使用该向导,仍需在共享存储设备上创建 SBD 分区,并根据过程 21.1 “配置 STONITH 资源”中所述配置一个 STONITH 资源。
中的 OCFS2 模板使用 Hawk2 过程 20.1 “配置 DLM 的基础组”和过程 21.4 “使用群集资源管理器挂载 OCFS2 卷”中所述的手动配置略有不同。
中的 OCFS2 模板还会导致资源配置与21.7 在 OCFS2 文件系统上使用配额 #
要在 OCFS2 文件系统上使用配额,请分别使用适当的配额功能或挂载选项创建和挂载文件系统:ursquota
(用于单独用户的配额)或 grpquota
(用于组的配额)。这些功能也可以稍后使用 tunefs.ocfs2
在未挂载的文件系统上启用。
文件系统启用了相应的定额功能后,它会跟踪其元数据,查看每个用户(或组)使用的空间和文件数。由于 OCFS2 将配额信息视为文件系统内部元数据,因此您无需运行 quotacheck
(8) 程序。所有功能都内置到 fsck.ocfs2 和文件系统驱动程序中。
要实施强加于每个用户或组的限制,请如同在任何其他文件系统上一样运行 quotaon
(8)。
由于性能原因,每个群集节点都会在本地执行配额会计,并每 10 秒将此信息与通用中央存储设备同步一次。此间隔可使用 tunefs.ocfs2
、选项 usrquota-sync-interval
和 grpquota-sync-interval
进行调整。因此,配额信息可能不会始终都准确,因而在几个群集节点上并行操作时,用户或组可以稍微超出其配额限制。
21.8 更多信息 #
有关 OCFS2 的更多信息,请参见以下链接:
- https://ocfs2.wiki.kernel.org/
OCFS2 项目主页。
- https://oss.oracle.com/projects/ocfs2/
Oracle 上的原 OCFS2 项目主页。
- https://oss.oracle.com/projects/ocfs2/documentation
项目的原文档主页。
22 GFS2 #
全局文件系统 2 或称 GFS2 是适用于 Linux 计算机群集的共享磁盘文件系统。GFS2 允许所有节点直接同时访问同一个共享块存储。GFS2 不提供断开操作模式,也没有客户端角色或服务器角色。GFS2 群集中的所有节点以对等体的形式运行。GFS2 最多支持 32 个群集节点。在群集中使用 GFS2 需要通过硬件来访问共享存储设备,并需要通过一个锁管理器来控制对存储空间的访问。
如果性能是其中一个主要要求,SUSE 建议为群集环境使用 OCFS2 而不要使用 GFS2。我们的测试表明,与采用此设置的 GFS2 相比,OCFS2 的表现更好。
SUSE 只支持只读模式的 GFS2。不支持写入操作。
22.1 GFS2 软件包和管理实用程序 #
要使用 GFS2,请确保群集的每个节点上均已安装适用于您的内核的 gfs2-utils 和匹配的 gfs2-kmp-* 软件包。
gfs2-utils 软件包提供以下实用程序,用于管理 GFS2 卷。有关语法信息,请参见其手册页。
- fsck.gfs2
检查文件系统的错误并进行选择性的修改。
- gfs2_jadd
将其他日记添加到 GFS2 文件系统。
- gfs2_grow
产生 GFS2 文件系统。
- mkfs.gfs2
在设备上创建 GFS2 文件系统,这通常是一个共享设备或分区。
- tunegfs2
用于查看和调整 GFS2 文件系统参数,例如
UUID
、label
、lockproto
和locktable
。
22.2 配置 GFS2 服务和 STONITH 资源 #
在创建 GFS2 卷之前,必须先配置 DLM 和 STONITH 资源。
您需要配置屏蔽设备。如果未实施 STONITH 机制(如 external/sbd
),配置将会失败。
启动外壳,并以
root
用户或同等身份登录。如过程 13.3 “初始化 SBD 设备”中所述,创建 SBD 分区。
运行
crm configure
.将
external/sbd
配置为屏蔽设备:crm(live)configure#
primitive sbd_stonith stonith:external/sbd \ params pcmk_delay_max=30 meta target-role="Started"
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
有关为 DLM 配置资源的细节,请参见第 20.2 节 “配置 DLM 群集资源”。
22.3 创建 GFS2 卷 #
按第 22.2 节 “配置 GFS2 服务和 STONITH 资源”中所述将 DLM 配置为群集资源后,将系统配置为使用 GFS2 并创建 GFS2 卷。
我们建议您通常应将应用程序文件和数据文件存储在不同的 GFS2 卷上。如果应用程序卷和数据卷具有不同的装入要求,则必须将它们存储在不同的卷上。
开始之前要准备计划用于 GFS2 卷的块设备。将这些设备留作可用空间。
然后按过程 22.2 “创建并格式化 GFS2 卷”中所述,使用 mkfs.gfs2
创建并格式化 GFS2 卷。下面列出了此命令最重要的参数。有关详细信息和命令语法,请参见 mkfs.gfs2
手册页。
- 锁定协议名称 (
-p
) 要使用的锁定协议的名称。可接受的锁定协议包括 lock_dlm(用于共享存储);如果您将 GFS2 用作本地文件系统(只有 1 个节点),则可以指定 lock_nolock 协议。如果未指定此选项,将采用 lock_dlm 协议。
- 锁定表名称 (
-t
) 与您正在使用的锁定模块对应的锁定表字段。其为 clustername:fsname。clustername 值必须与群集配置文件
/etc/corosync/corosync.conf
中的值匹配。只允许此群集的成员使用此文件系统。fsname 值是唯一的文件系统名称(1 到 16 个字符),用于将此 GFS2 文件系统与创建的其他文件系统区分开。- 日志数量 (
-j
) 要为 gfs2_mkfs 创建的日志数量。要挂载该文件系统的每台计算机至少需要一个日志。如果未指定此选项,将创建一个日志。
只在群集节点之一上执行以下步骤。
打开终端窗口并以
root
用户身份登录。使用命令
crm status
检查群集是否已上线。使用
mkfs.gfs2
实用程序创建并格式化卷。有关此命令的语法的信息,请参见mkfs.gfs2
手册页。例如,要创建最多支持 32 个群集节点的新 GFS2 文件系统,请使用以下命令:
#
mkfs.gfs2 -t hacluster:mygfs2 -p lock_dlm -j 32 /dev/disk/by-id/DEVICE_ID
hacluster
名称与文件/etc/corosync/corosync.conf
中的cluster_name
项相关(这是默认设置)。始终使用稳定的设备名称(例如
/dev/disk/by-id/scsi-ST2000DM001-0123456_Wabcdefg
)。
22.4 挂载 GFS2 卷 #
可以手动挂载 GFS2 卷,也可以按过程 22.4 “使用群集管理器挂载 GFS2 卷”中所述使用群集管理器挂载。
打开终端窗口并以
root
用户身份登录。使用命令
crm status
检查群集是否已上线。使用
mount
命令从命令行挂载卷。
如果您为了进行测试手动挂载了 GFS2 文件系统,在开始将其作为群集资源使用前,请务必将其卸载以恢复原状。
要使用高可用性软件挂载 GFS2 卷,请在群集中配置 OCF 文件系统资源。以下过程使用 crm
外壳配置群集资源。或者,您可以使用 Hawk2 配置资源。
启动外壳,并以
root
用户或同等身份登录。运行
crm configure
.配置 Pacemaker 以在群集中的每个节点上挂载 GFS2 文件系统:
crm(live)configure#
primitive gfs2-1 ocf:heartbeat:Filesystem \ params device="/dev/disk/by-id/DEVICE_ID" directory="/mnt/shared" fstype="gfs2" \ op monitor interval="20" timeout="40" \ op start timeout="60" op stop timeout="60" \ meta target-role="Stopped"
将
gfs2-1
原始资源添加到您在过程 20.1 “配置 DLM 的基础组”中创建的g‑storage
组。crm(live)configure#
modgroup g-storage add gfs2-1
受限于基础组的内部共置和顺序约束,
gfs2-1
资源仅可在已有dlm
资源在运行的节点上启动。使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
23 DRBD #
通过分布式复制块设备 (DRBD*),您可以为位于 IP 网络上两个不同站点的两个块设备创建镜像。和 Corosync 一起使用时,DRBD 支持分布式高可用性 Linux 群集。本章说明如何安装和设置 DRBD。
23.1 概念概述 #
DRBD 以确保数据的两个副本保持相同的方式将主设备上的数据复制到次设备上。将其视为联网的 RAID 1。它实时对数据进行镜像,以便连续复制。应用程序不需要知道实际上它们的数据存储在不同的磁盘上。
DRBD 是 Linux 内核模块,位于下端的 I/O 调度程序与上端的文件系统之间,请参见图 23.1 “DRBD 在 Linux 中的位置”。要与 DRBD 通讯,用户需使用高级别命令 drbdadm
。为了提供最大的灵活性,DRBD 附带了低级别工具 drbdsetup
。
镜像之间的数据流量是不加密的。为实现安全数据交换,您应为连接部署虚拟专用网 (VPN) 解决方案。
DRBD 允许使用 Linux 支持的任何块设备,通常包括:
硬盘分区或完整硬盘
软件 RAID
逻辑卷管理器 (LVM)
企业卷管理系统 (EVMS)
默认情况下,DRBD 使用 7788
及更高的 TCP 端口在 DRBD 节点之间通讯。请确保您的防火墙不会阻止所用端口上的通讯。
在 DRBD 设备上创建文件系统之前,必须先设置 DRBD 设备。与用户数据相关的所有操作都只应通过 /dev/drbdN
设备执行,不能在原始设备上执行,因为 DRBD 会将原始设备最后的部分用于存储元数据。使用原始设备会导致数据不一致。
借助 udev 集成,您还可以获取 /dev/drbd/by-res/RESOURCES
格式的符号链接,这种链接更易于使用,而且还能避免在记错设备次要编号时出现问题。
例如,如果原始设备大小为 1024 MB,则 DRBD 设备仅有 1023 MB 可用于数据存储,而大约保留 70 KB 的隐藏容量用于存储元数据。通过原始磁盘访问剩余 KB 的任何尝试都会失败,因为这些 KB 不可用于存储用户数据。
23.2 安装 DRBD 服务 #
按第 I 部分 “安装和设置”中所述在联网群集中的两台 SUSE Linux Enterprise Server 计算机上安装 High Availability 软件集。安装该软件集的同时也会安装 DRBD 程序文件。
如果您不需要完整的群集堆栈,只想使用 DRBD,请安装软件包 drbd、drbd-kmp-FLAVOR、drbd-utils 和 yast2-drbd。
23.3 设置 DRBD 服务 #
以下过程使用服务器名称 alice 和 bob 以及 DRBD 资源名称 r0
。它将 alice 设置为主节点,并使用 /dev/disk/by-id/example-disk1
存储数据。确保修改这些说明,以使用您自己的节点和文件名。
以下几节假设您有 alice 和 bob 两个节点,它们应使用 TCP 端口 7788
。确保此端口在防火墙中处于打开状态。
准备系统:
确保 Linux 节点中的块设备已就绪且已分区(如果需要)。
如果磁盘包含您已不再需要的文件系统,请使用以下命令销毁文件系统结构:
#
dd if=/dev/zero of=YOUR_DEVICE count=16 bs=1M
如果有多个文件系统需要销毁,请在您希望包含到 DRBD 设置中的所有设备上重复此步骤。
如果群集已在使用 DRBD,请将群集置于维护模式:
#
crm configure property maintenance-mode=true
如果群集已在使用 DRBD,而您跳过了此步骤,实时配置中的语法错误会导致服务停止。
或者,也可以使用
drbdadm
-c FILE
来测试配置文件。
选择相应的方法来配置 DRBD:
如果您已配置 Csync2(这应该是默认设置),则 DRBD 配置文件已包含在需要同步的文件列表中。要同步这些配置文件,请运行以下命令:
#
csync2 -xv
如果您不具有 Csync2(或不想使用它),请将 DRBD 配置文件手动复制到其他节点:
#
scp /etc/drbd.conf bob:/etc/
#
scp /etc/drbd.d/* bob:/etc/drbd.d/
执行初始同步(请参见第 23.3.3 节 “初始化和格式化 DRBD 资源”)。
重置群集的维护模式标志:
#
crm configure property maintenance-mode=false
23.3.1 手动配置 DRBD #
DRBD9 的“自动升级”功能可以在挂载或打开资源的其中一个设备以向其中写入数据时自动将资源升级为主要角色。
目前,自动升级功能仅具有受限支持。使用 DRBD 9 时,SUSE 支持的用例与使用 DRBD 8 时相同。除此以外的用例(例如所包含节点超过两个的设置)不受支持。
要手动设置 DRBD,请按如下操作:
从 DRBD 版本 8.3 开始,以前的配置文件将拆分成几个不同的文件(位于 /etc/drbd.d/
目录中)。
打开
/etc/drbd.d/global_common.conf
文件。它已包含预定义的全局值。转到startup
部分并插入以下几行内容:startup { # wfc-timeout degr-wfc-timeout outdated-wfc-timeout # wait-after-sb; wfc-timeout 100; degr-wfc-timeout 120; }
这些选项用于在引导时减少超时,有关更多细节,请参见 https://docs.linbit.com/docs/users-guide-9.0/#ch-configure。
创建文件
/etc/drbd.d/r0.res
。根据具体情况更改相应的行并保存文件:resource r0 { 1 device /dev/drbd0; 2 disk /dev/disk/by-id/example-disk1; 3 meta-disk internal; 4 on alice { 5 address 192.168.1.10:7788; 6 node-id 0; 7 } on bob { 5 address 192.168.1.11:7788; 6 node-id 1; 7 } disk { resync-rate 10M; 8 } connection-mesh { 9 hosts alice bob; } }
描述关联服务的 DRBD 资源名称。例如,
nfs
、http
、mysql_0
、postgres_wal
等。本示例中使用了较笼统的名称r0
。DRBD 的设备名及其次要编号。
在以上示例中,为 DRBD 使用了次要编号 0。udev 集成脚本会提供符号链接
/dev/drbd/by-res/nfs/0
。也可以在配置中忽略设备节点名称,改为使用以下行:drbd0 minor 0
(/dev/
是可选的)或/dev/drbd0
在节点间复制的原始设备。请注意,在本例中,两个节点上的设备相同。如果需要不同的设备,请将
disk
参数移到on
主机中。Meta-disk 参数通常包含值
internal
,但您也可以明确指定某个设备来保存元数据。有关更多信息,请参见https://docs.linbit.com/docs/users-guide-9.0/#s-metadata。on
部分指定了此配置语句要应用到的主机。各个节点的 IP 地址和端口号。每个资源都需要单独的端口,通常从
7788
开始。DRBD 资源的两个端口必须相同。配置两个以上的节点时,需要节点 ID。该 ID 是用于区分不同节点的唯一非负整数。
同步率。将其设置为磁盘和网络带宽中较小者的三分之一。它仅限制重新同步,而不限制复制。
定义网格的所有节点。
hosts
参数包含共享相同 DRBD 设置的所有主机名。检查配置文件的语法。如果以下命令返回错误,请校验文件:
#
drbdadm dump all
23.3.2 使用 YaST 配置 DRBD #
可以使用 YaST 来启动 DRBD 的初始设置。创建 DRBD 设置后,可以手动调整生成的文件。
但是,一旦更改了配置文件,请不要再使用 YaST DRBD 模块。DRBD 模块仅支持有限的一组基本配置。如果您再次使用该模块,它有可能不会显示您所做的更改。
要使用 YaST 设置 DRBD,请执行以下操作:
启动 YaST 并选择配置模块
› 。如果您已有 DRBD 配置,YaST 会向您发出警告。YaST 会更改您的配置,并将原来的 DRBD 配置文件另存为*.YaSTsave
。将
› 中的引导标志保留原样(默认情况下为off
);请不要更改此项设置,因为 Pacemaker 会管理此服务。如果防火墙正在运行,请启用
。转到图 23.2 “资源配置”)。
项。选择 创建新资源(请参见图 23.2︰ 资源配置 #需要设置以下参数:
DRBD 资源的名称(必填)
相关节点的主机名
相应节点的 IP 地址和端口号(默认为
7788
)用于访问复制数据的块设备路径。如果设备包含次要编号,则关联的块设备通常命名为
/dev/drbdX
,其中 X 是设备次要编号。如果设备不包含次要编号,请务必在设备名称后面添加minor 0
。在两个节点之间复制的原始设备。如果您使用 LVM,请插入 LVM 设备名称。
internal
值,或指定一个由索引定义的具体设备来存放 DRBD 所需的元数据。一个实际设备也可用于多个 DRBD 资源。例如,如果第一个资源的
为/dev/disk/by-id/example-disk6[0]
,您可以将/dev/disk/by-id/example-disk6[1]
用于第二个资源。不过,此磁盘上必须为每个资源至少预留 128 MB 空间。固定的元数据大小会限制可复制的最大数据大小。
您可以在
/usr/share/doc/packages/drbd/drbd.conf
文件的示例中和drbd.conf(5)
的手册页中查看所有这些选项的说明。单击
。单击
输入第二个 DRBD 资源,然后单击 完成。单击
和 关闭资源配置。如果您将 LVM 与 DRBD 结合使用,则需要在 LVM 配置文件中更改特定选项(请参见
项)。YaST DRBD 模块可自动完成此项更改。LVM 过滤器中将会拒绝 DRBD 资源的 localhost 磁盘名称和默认过滤器。只能在
/dev/drbd
中扫描是否存在 LVM 设备。例如,如果将
/dev/disk/by-id/example-disk1
用作 DRBD 磁盘,系统会插入设备名称作为 LVM 过滤器中的第一项。要手动更改过滤器,请单击 复选框。单击
保存更改。
23.3.3 初始化和格式化 DRBD 资源 #
准备好系统并配置好 DRBD 后,请执行磁盘的首次初始化:
在 alice 和 bob 这两个节点上,初始化元数据存储:
#
drbdadm create-md r0
#
drbdadm up r0
要想缩短 DRBD 资源的初始重新同步时间,请检查以下项:
如果所有节点上的 DRBD 设备都具有相同数据(例如,通过使用
dd
中所述的 第 23.3 节 “设置 DRBD 服务” 命令销毁文件系统结构),则请在这两个节点上使用以下命令跳过初始重新同步步骤:#
drbdadm new-current-uuid --clear-bitmap r0/0
状态应该为
Secondary/Secondary UpToDate/UpToDate
否则,请继续下一步。
在主节点 alice 上,启动重新同步过程:
#
drbdadm primary --force r0
使用以下命令检查状态:
#
drbdadm status r0
r0 role:Primary disk:UpToDate bob role:Secondary peer-disk:UpToDate在 DRBD 设备上创建文件系统,例如:
#
mkfs.ext3 /dev/drbd0
装入文件系统并使用它:
#
mount /dev/drbd0 /mnt/
23.3.4 为 DRBD 创建群集资源 #
初始化 DRBD 设备后,创建一个群集资源用于管理 DRBD 设备,并创建一个可升级克隆资源,使此资源可在两个节点上运行:
启动
crm
交互外壳:#
crm configure
为 DRBD 资源
r0
创建原始资源:crm(live)configure#
primitive drbd-r0 ocf:linbit:drbd \ params drbd_resource="r0" \ op monitor interval=15 role=Promoted \ op monitor interval=30 role=Unpromoted
为
drbd-r0
原始资源创建一个可升级克隆资源:crm(live)configure#
clone cl-drbd-r0 drbd-r0 \ meta promotable="true" promoted-max="1" promoted-node-max="1" \ clone-max="2" clone-node-max="1" notify="true" interleave=true
提交此配置:
crm(live)configure#
commit
23.4 从 DRBD 8 迁移到 DRBD 9 #
从 DRBD 8(随附于 SUSE Linux Enterprise High Availability 12 SP1 中)到 DRBD 9(随附于 SUSE Linux Enterprise High Availability 12 SP2 中),元数据格式已发生变化。DRBD 9 不会将之前的元数据文件自动转换到新格式。
迁移到 12 SP2 之后,在启动 DRBD 之前,请先将 DRBD 元数据手动转换为版本 9 格式。要执行此操作,请使用 drbdadm create-md
。不需要更改任何配置。
使用 DRBD 9 时,SUSE 支持的用例与使用 DRBD 8 时相同。除此以外的用例(例如所包含节点超过两个的设置)不受支持。
DRBD 9 将会回退到与版本 8 兼容的状态。如果有三个或更多节点,您需要重新创建元数据才能使用 DRBD 版本 9 特定选项。
如果具有堆叠式 DRBD 资源,另请参见第 23.5 节 “创建堆叠式 DRBD 设备”了解详细信息。
要保留数据并允许在无需重新创建新资源的情况下添加新节点,请执行以下操作:
将一个节点设置为待机模式。
更新所有节点上的所有 DRBD 软件包。请参见 第 23.2 节 “安装 DRBD 服务”。
将新节点信息添加到资源配置中:
每个
on
部分中的 node-id。connection-mesh 部分的 hosts 参数中会包含所有主机名。
请参见过程 23.1 “手动配置 DRBD”中的示例配置。
在使用
internal
作为meta-disk
键时扩大 DRBD 磁盘的空间。使用支持扩大空间的设备,例如 LVM。或者,改为使用外部磁盘存储元数据,并使用meta-disk DEVICE;
。根据新配置重新创建元数据:
#
drbdadm create-md RESOURCE
取消待机模式。
23.5 创建堆叠式 DRBD 设备 #
堆叠式 DRBD 设备包含两个其他设备,其中至少有一个设备也是 DRBD 资源。也就是说,DRBD 在一个现有 DRBD 资源的基础上又添加了一个节点(请参见图 23.3 “资源堆叠”)。此类复制设置可用于备份和灾难恢复用途。
三向复制运用了异步(DRBD 协议 A)和同步复制(DRBD 协议 C)。异步部分用于堆叠的资源,同步部分用于备用资源。
您的生产环境使用堆叠设备。例如,如果您有一个 DRBD 设备 /dev/drbd0
和一个堆叠在其上的设备 /dev/drbd10
,将会在 /dev/drbd10
上创建文件系统。有关详细信息,请参见例 23.1 “三节点堆叠式 DRBD 资源的配置”。
# /etc/drbd.d/r0.res resource r0 { protocol C; device /dev/drbd0; disk /dev/disk/by-id/example-disk1; meta-disk internal; on amsterdam-alice { address 192.168.1.1:7900; } on amsterdam-bob { address 192.168.1.2:7900; } } resource r0-U { protocol A; device /dev/drbd10; stacked-on-top-of r0 { address 192.168.2.1:7910; } on berlin-charlie { disk /dev/disk/by-id/example-disk10; address 192.168.2.2:7910; # Public IP of the backup node meta-disk internal; } }
23.6 搭配使用资源级屏蔽与 STONITH #
当 DRBD 复制链路中断时,Pacemaker 会尝试将 DRBD 资源升级到另一个节点。为防止 Pacemaker 使用过时的数据启动服务,请在 DRBD 配置文件中启用资源级屏蔽。
屏蔽策略可以使用不同的值(请参见手册页 drbdsetup
和 --fencing
选项)。由于 SUSE Linux Enterprise High Availability 群集通常与 STONITH 设备搭配使用,因此例 23.2 “使用群集信息库 (CIB) 启用资源级别屏蔽的 DRBD 配置”中使用了值 resource-and-stonith
。
resource RESOURCE { net { fencing resource-and-stonith; # ... } handlers { fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh"; after-resync-target "/usr/lib/drbd/crm-unfence-peer.9.sh"; # ... } ... }
如果 DRBD 复制链路断开,DRBD 将执行以下操作:
DRBD 会调用
crm-fence-peer.9.sh
脚本。该脚本会联系群集管理器。
该脚本会确定与此 DRBD 资源关联的 Pacemaker 资源。
该脚本会确保 DRBD 资源不再升级到其他任何节点。DRBD 资源将保留在当前活动的节点上。
如果复制链路再次连通并且 DRBD 完成了其同步过程,则去除该约束。现在,群集管理器可以任意升级资源。
23.7 测试 DRBD 服务 #
如果安装和配置过程和预期一样,则您就准备好运行 DRBD 功能的基本测试了。此测试还有助于了解该软件的工作原理。
在 alice 上测试 DRBD 服务。
打开终端控制台,然后以
root
用户身份登录。在 alice 上创建一个挂载点,如
/srv/r0
:#
mkdir -p /srv/r0
挂载
drbd
设备:#
mount -o rw /dev/drbd0 /srv/r0
从主节点创建文件:
#
touch /srv/r0/from_alice
卸载 alice 上的磁盘:
#
umount /srv/r0
通过在 alice 上键入以下命令,降级 alice 上的 DRBD 服务:
#
drbdadm secondary r0
在 bob 上测试 DRBD 服务。
在 bob 上打开终端控制台,然后以
root
身份登录。在 bob 上,将 DRBD 服务升级为主服务:
#
drbdadm primary r0
在 bob 上,检查 bob 是否为主节点:
#
drbdadm status r0
在 bob 上创建一个挂载点,如
/srv/r0
:#
mkdir /srv/r0
在 bob 上,挂载 DRBD 设备:
#
mount -o rw /dev/drbd0 /srv/r0
校验在 alice 上创建的文件是否存在:
#
ls /srv/r0/from_alice
此时应该会列出
/srv/r0/from_alice
文件。
如果该服务在两个节点上都运行正常,则 DRBD 安装即已完成。
再次将 alice 设置为主节点。
通过在 bob 上键入以下命令,卸下 bob 上的磁盘:
#
umount /srv/r0
通过在 bob 上键入以下命令,降级 bob 上的 DRBD 服务:
#
drbdadm secondary r0
在 alice 上,将 DRBD 服务升级为主服务:
#
drbdadm primary r0
在 alice 上,检查 alice 是否为主节点:
#
drbdadm status r0
要使服务在服务器出问题时自动启动并进行故障转移,可以使用 Pacemaker/Corosync 将 DRBD 设置为高可用性服务。有关针对 SUSE Linux Enterprise 15 SP6 进行安装和配置的信息,请参见第 II 部分 “配置和管理”。
23.8 监控 DRBD 设备 #
DRBD 随附了可提供实时监控的实用程序 drbdmon
。该实用程序会显示所有已配置的资源及其问题。
drbdmon
显示了一个正常的连接 #如果出现了问题,drbdadm
会显示错误消息:
drbdmon
显示了一个错误的连接 #23.9 调整 DRBD #
可使用几种方式调整 DRBD:
对元数据使用外部磁盘。这可能会有所帮助,不过会降低维护便捷性。
通过
sysctl
更改接收和发送缓冲区设置,以微调网络连接。在 DRBD 配置中更改
max-epoch-size
、max-buffers
或更改两者。根据 IO 模式增大
al-extents
值。如果您有一个配备了 BBU(电池备份单元)的硬件 RAID 控制器,设置
no-disk-barrier
、no-disk-flushes
和/或no-md-flushes
可能会对您有所助益。根据工作负载启用读平衡。有关详细信息,请参见https://www.linbit.com/en/read-balancing/。
23.10 DRBD 查错 #
DRBD 设置涉及很多组件,因此导致问题发生的原因多种多样。以下几节介绍了数种常见场景和建议的解决方案。
23.10.1 配置 #
如果初始 DRBD 设置未按预期工作,则可能说明配置有问题。
获取关于配置的信息:
打开终端控制台,然后以
root
用户身份登录。运行
drbdadm
(带-d
选项)测试配置文件。输入下面的命令:#
drbdadm -d adjust r0
在
adjust
选项的干运行中,drbdadm
将 DRBD 资源的实际配置与您的 DRBD 配置文件进行比较,但它不会执行这些调用。检查输出以确保您了解任何错误的根源。如果
/etc/drbd.d/*
和drbd.conf
文件中存在错误,请更正后再继续。如果分区和设置正确,请再次运行
drbdadm
(不带-d
选项)。#
drbdadm adjust r0
这会将配置文件应用到 DRBD 资源。
23.10.2 主机名 #
DRBD 的主机名区分大小写(Node0
和 node0
是不同的主机),这与内核中存储的主机名不同(请参见 uname -n
输出)。
如果您有多个网络设备,并希望使用专用网络设备,主机名可能不会解析成所用的 IP 地址。在这种情况下,可使用参数 disable-ip-verification
。
23.10.3 TCP 端口 7788 #
如果系统无法连接到对等体,说明本地防火墙可能有问题。默认情况下,DRBD 使用 TCP 端口 7788
访问另一个节点。确保在两个节点上该端口均可访问。
23.10.4 DRBD 设备在重引导后中断连接 #
如果 DRBD 不知道哪个真实设备保存的是最新数据,就会变为节点分裂状态。在这种情况下,DRBD 子系统将分别成为次系统,并且互不相连。在这种情况下,可以在日志记录数据中找到以下消息:
Split-Brain detected, dropping connection!
要解决此问题,请在要丢弃其数据的节点上输入以下命令:
#
drbdadm secondary r0
如果状态为 WFconnection
,则请先断开连接:
#
drbdadm disconnect r0
在具有最新数据的节点上输入以下命令:
#
drbdadm connect --discard-my-data r0
通过使用对等体的数据重写一个节点的数据,以此确保两个节点上的视图保持一致,该问题可得到解决。
23.11 更多信息 #
以下开放源代码资源可用于 DRBD:
项目主页:https://www.drbd.org。
请参见Article “使用 DRBD 和 Pacemaker 的高度可用 NFS 存储服务”。
该发行套件中提供以下 DRBD 手册页:
drbd(8)
、drbdmeta(8)
、drbdsetup(8)
、drbdadm(8)
、drbd.conf(5)
。您可在
/usr/share/doc/packages/drbd-utils/drbd.conf.example
中找到被注释的 DRBD 示例配置。此外,为了更方便地在整个群集中进行存储管理,请参见 DRBD-Manager 上有关 https://www.linbit.com/en/drbd-manager/ 的最新声明。
24 群集逻辑卷管理器(群集 LVM) #
管理群集上的共享存储设备时,存储子系统发生的所有更改都必须通知到每个节点。逻辑卷管理器 (LVM) 支持以透明方式来管理整个群集中的卷组。在多个主机之间共享的卷组可使用与本地存储相同的命令进行管理。
24.1 概念概述 #
系统通过不同的工具来协调群集 LVM:
- 分布式锁管理器 (DLM)
通过群集范围的锁定协调对多个主机之间共享资源的访问。
- 逻辑卷管理器 (LVM)
LVM 提供了一个虚拟的磁盘空间池,允许将一个逻辑卷灵活分布在多个磁盘上。
- 群集逻辑卷管理器(群集 LVM)
Cluster LVM
一词表示在群集环境中使用了 LVM。这需要对配置进行一些调整,以保护共享存储设备上的 LVM 元数据。自 SUSE Linux Enterprise 15 起,群集扩展使用 lvmlockd 取代了 clvmd。有关 lvmlockd 的详细信息,请参见lvmlockd
命令的手册页 (man 8 lvmlockd
)。- 卷组和逻辑卷
卷组 (VG) 和逻辑卷 (LV) 都属于 LVM 的基本概念。卷组是多个物理磁盘的存储池。逻辑卷属于卷组,可视为一种弹性卷,您可以在其上创建文件系统。在群集环境中,存在共享 VG 的概念,共享 VG 由共享存储设备组成,可被多个主机同时使用。
24.2 群集式 LVM 的配置 #
确保满足以下要求:
有共享存储设备可用,例如,该共享存储设备可通过光纤通道、FCoE、SCSI、iSCSI SAN 或 DRBD* 提供。
确保已安装以下软件包:
lvm2
和lvm2-lockd
。自 SUSE Linux Enterprise 15 起,群集扩展使用 lvmlockd 取代了 clvmd。确保 clvmd 守护程序未运行,否则 lvmlockd 将无法启动。
24.2.1 创建群集资源 #
在一个节点上执行以下基本步骤,以在群集中配置共享 VG:
启动外壳并以
root
用户身份登录。检查群集资源的当前配置:
#
crm configure show
如果已经配置 DLM 资源(及相应的基本组和基本克隆),则继续过程 24.2 “创建 lvmlockd 资源”。
否则,如过程 20.1 “配置 DLM 的基础组”中所述配置 DLM 资源和相应的基本组和基本克隆。
启动外壳并以
root
用户身份登录。运行以下命令以查看此资源的使用情况:
#
crm configure ra info lvmlockd
按如下所示配置
lvmlockd
资源:#
crm configure primitive lvmlockd lvmlockd \ op start timeout="90" \ op stop timeout="100" \ op monitor interval="30" timeout="90"
为了确保在每个节点上启动
lvmlockd
资源,请将原始资源添加到您在过程 24.1 “创建 DLM 资源”中为存储创建的基本组:#
crm configure modgroup g-storage add lvmlockd
查看所做的更改:
#
crm configure show
检查资源是否运行正常:
#
crm status full
启动外壳并以
root
用户身份登录。假设您已有两个共享磁盘,并使用它们创建共享 VG:
#
vgcreate --shared vg1 /dev/disk/by-id/DEVICE_ID1 /dev/disk/by-id/DEVICE_ID2
创建 LV,但一开始不激活它:
#
lvcreate -an -L10G -n lv1 vg1
启动外壳并以
root
用户身份登录。运行以下命令以查看此资源的使用情况:
#
crm configure ra info LVM-activate
此资源负责管理 VG 的激活。在共享 VG 中,有两种不同的 LV 激活模式:排它模式和共享模式。排它模式是默认模式,通常应在
ext4
等本地文件系统使用 LV 时使用。共享模式仅应用于 OCFS2 等群集文件系统。配置资源以管理 VG 的激活。根据您的方案,选择下列其中一个选项:
对于本地文件系统使用情形,使用排它激活模式:
#
crm configure primitive vg1 LVM-activate \ params vgname=vg1 vg_access_mode=lvmlockd \ op start timeout=90s interval=0 \ op stop timeout=90s interval=0 \ op monitor interval=30s timeout=90s
对于 OCFS2,使用共享激活模式,并将其添加到克隆的
g-storage
组:#
crm configure primitive vg1 LVM-activate \ params vgname=vg1 vg_access_mode=lvmlockd activation_mode=shared \ op start timeout=90s interval=0 \ op stop timeout=90s interval=0 \ op monitor interval=30s timeout=90s
#
crm configure modgroup g-storage add vg1
检查资源是否运行正常:
#
crm status full
24.2.2 方案:在 SAN 上将群集 LVM 与 iSCSI 搭配使用 #
以下方案使用两个 SAN 盒,将其 iSCSI 目标导出到多个客户端。大致想法如图 24.1 “使用群集 LVM 的共享磁盘设置”所示。
以下过程将损坏磁盘上的所有数据。
首先只配置一个 SAN 盒。每个 SAN Box 都需要导出自己的 iSCSI 目标。按如下所示继续:
运行 YaST,然后单击
› 启动 iSCSI 服务器模块。如果要在计算机引导时启动 iSCSI 目标,请选择
,否则请选择 。如果正在运行防火墙,请启用
。切换到
选项卡。如果需要身份验证,请启用传入及/或传出身份验证。在本例中,我们选择 。添加新的 iSCSI 目标:
切换到
选项卡。单击
。输入目标名称。名称需要采用如下所示的格式:
iqn.DATE.DOMAIN
有关格式的详细信息,请参见 https://www.ietf.org/rfc/rfc3720.txt 上的 Section 3.2.6.3.1. Type "iqn." (iSCSI Qualified Name) 。
如果需要描述性更强的名称,可以进行更改,但要确保每个目标的标识符都是唯一的。
单击
。在
中输入设备名,并使用 。单击
两次。
出现警告框时单击
进行确认。打开配置文件
/etc/iscsi/iscsid.conf
,将参数node.startup
更改为automatic
。
现在按如下方式设置 iSCSI 发起端:
运行 YaST,然后单击
› 。如果要在计算机引导时启动 iSCSI 发起端,请选择
,否则请将其设置为 。切换到
选项卡并单击 按钮。添加 iSCSI 目标的 IP 地址和端口(请参见过程 24.5 “配置 iSCSI 目标 (SAN)”)。通常,可以保留端口并使用其默认值。
如果使用身份验证,请插入传入和传出用户名和口令,否则请激活
。选择
。找到的连接随即显示在列表中。单击
继续。打开外壳,并以
root
用户身份登录。测试 iSCSI 发起端是否已成功启动:
#
iscsiadm -m discovery -t st -p 192.168.3.100
192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1建立会话:
#
iscsiadm -m node -l -p 192.168.3.100 -T iqn.2010-03.de.jupiter:san1
Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260] Login to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260]: successful使用
lsscsi
查看设备名:... [4:0:0:2] disk IET ... 0 /dev/sdd [5:0:0:1] disk IET ... 0 /dev/sde
查找第三列中有
IET
的项。在本例中,设备为/dev/sdd
和/dev/sde
。
打开已按过程 24.6 “配置 iSCSI 发起端”运行 iSCSI 发起端的一个节点上的
root
外壳。使用磁盘
/dev/sdd
和/dev/sde
的稳定设备名称在磁盘上创建共享卷组(例如,在/dev/disk/by-id/
中创建):#
vgcreate --shared testvg /dev/disk/by-id/DEVICE_ID /dev/disk/by-id/DEVICE_ID
根据需要创建逻辑卷:
#
lvcreate --name lv1 --size 500M testvg
使用
vgdisplay
检查卷组:--- Volume group --- VG Name testvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 1016,00 MB PE Size 4,00 MB Total PE 254 Alloc PE / Size 0 / 0 Free PE / Size 254 / 1016,00 MB VG UUID UCyWw8-2jqV-enuT-KH4d-NXQI-JhH3-J24anD
使用
vgs
命令检查卷组的共享状态:#
vgs
VG #PV #LV #SN Attr VSize VFree vgshared 1 1 0 wz--ns 1016.00m 1016.00mAttr
列显示卷属性。在本例中,卷组可写入 (w
)、可调整大小 (z
),分配策略为普通 (n
),并且其为共享资源 (s
)。有关细节,请参见vgs
的手册页。
创建卷并启动资源后,/dev/testvg
下会显示新的设备名称,例如 /dev/testvg/lv1
。这表示 LV 已激活,可以使用。
24.2.3 方案:将群集 LVM 与 DRBD 搭配使用 #
如果数据中心位于城市、国家/地区或大洲的不同区域,则可使用以下方案。
创建主/主 DRBD 资源:
首先,按过程 23.1 “手动配置 DRBD”中所述将 DRBD 设备设置为主/从模式。确保两个节点上的磁盘状态均为
up-to-date
。使用drbdadm status
确认是否如此。将以下选项添加到配置文件(通常类似于
/etc/drbd.d/r0.res
):resource r0 { net { allow-two-primaries; } ... }
将更改的配置文件复制到另一个节点,例如:
#
scp /etc/drbd.d/r0.res venus:/etc/drbd.d/
在两个节点上运行以下命令:
#
drbdadm disconnect r0
#
drbdadm connect r0
#
drbdadm primary r0
检查节点的状态:
#
drbdadm status r0
将 lvmlockd 资源作为克隆包含在 Pacemaker 配置中,并使它依赖于 DLM 克隆资源。有关详细指示信息,请参见过程 24.1 “创建 DLM 资源”。继续之前,请确认这些资源已在群集上成功启动。可以使用
crm status
或 Web 界面检查正在运行的服务。使用
pvcreate
命令为 LVM 准备物理卷。例如,在设备/dev/drbd_r0
上,应使用如下命令:#
pvcreate /dev/drbd_r0
创建共享卷组:
#
vgcreate --shared testvg /dev/drbd_r0
根据需要创建逻辑卷。例如,使用以下命令创建 4 GB 的逻辑卷:
#
lvcreate --name lv1 -L 4G testvg
现在 VG 内的逻辑卷可以作为挂载的文件系统用于原始用途。确保使用逻辑卷的服务具备适当的依赖项,以便在激活 VG 后对它们进行共置和排序。
完成这些配置步骤后,即可像在任何独立工作站上一样进行 LVM 配置。
24.3 明确配置适合的 LVM 设备 #
如果看似有若干设备共享同一个物理卷签名(多路径设备或 DRBD 就有可能发生这种情况),建议明确配置 LVM 扫描 PV 的设备。
例如,如果命令 vgcreate
使用物理设备而非镜像块设备,DRBD 会产生混乱。进而导致 DRBD 出现节点分裂情况。
要停用 LVM 的单个设备,请执行以下操作:
编辑文件
/etc/lvm/lvm.conf
,搜索以filter
开头的行。其中的模式作为正则表达式来处理。前面的“a”表示接受扫描的设备模式,前面的“r”表示拒绝遵守该设备模式的设备。
要去除名为
/dev/sdb1
的设备,请在过滤规则中添加以下表达式:"r|^/dev/sdb1$|"
完整的过滤行将显示如下:
filter = [ "r|^/dev/sdb1$|", "r|/dev/.*/by-path/.*|", "r|/dev/.*/by-id/.*|", "a/.*/" ]
接受 DRBD 和 MPIO 设备但拒绝其他所有设备的过滤行如下所示:
filter = [ "a|/dev/drbd.*|", "a|/dev/.*/by-id/dm-uuid-mpath-.*|", "r/.*/" ]
编写配置文件并将它复制到所有群集节点。
24.4 从镜像 LV 联机迁移到群集 MD #
从 SUSE Linux Enterprise High Availability 15 开始,群集 LVM 中的 cmirrord
已弃用。我们强烈建议将群集中的镜像逻辑卷迁移到群集 MD。群集 MD 表示“群集多设备”,是适用于群集的基于软件的 RAID 存储解决方案。
24.4.1 迁移之前的示例设置 #
假设您采用以下示例设置:
您有一个双节点群集,它由节点
alice
和bob
组成。名为
test-lv
的镜像逻辑卷是基于名为cluster-vg2
的卷组创建的。卷组
cluster-vg2
由磁盘/dev/vdb
和/dev/vdc
组成。
#
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
├─vda1 253:1 0 4G 0 part [SWAP]
└─vda2 253:2 0 36G 0 part /
vdb 253:16 0 20G 0 disk
├─cluster--vg2-test--lv_mlog_mimage_0 254:0 0 4M 0 lvm
│ └─cluster--vg2-test--lv_mlog 254:2 0 4M 0 lvm
│ └─cluster--vg2-test--lv 254:5 0 12G 0 lvm
└─cluster--vg2-test--lv_mimage_0 254:3 0 12G 0 lvm
└─cluster--vg2-test--lv 254:5 0 12G 0 lvm
vdc 253:32 0 20G 0 disk
├─cluster--vg2-test--lv_mlog_mimage_1 254:1 0 4M 0 lvm
│ └─cluster--vg2-test--lv_mlog 254:2 0 4M 0 lvm
│ └─cluster--vg2-test--lv 254:5 0 12G 0 lvm
└─cluster--vg2-test--lv_mimage_1 254:4 0 12G 0 lvm
└─cluster--vg2-test--lv 254:5 0 12G 0 lvm
在启动迁移过程之前,请检查逻辑卷和物理卷的容量与利用率。如果逻辑卷使用了所有物理卷容量,迁移可能会失败,并且目标卷上会显示 insufficient free space
错误。如何防止这种迁移失败取决于镜像日志所用的选项:
镜像日志本身是否已镜像(
mirrored
选项),并且已在镜像分支所在的同一个设备上分配?: (例如,如果您按照 Administration Guide for those versions 中所述,为 SUSE Linux Enterprise High Availability 11 或 12 上的cmirrord
设置创建了逻辑卷,则可能符合这种情况。)默认情况下,
mdadm
会在设备开头到数组数据开头之间预留一定数量的空间。在迁移期间,您可以检查未使用的填充空间,并使用data-offset
选项减小此空间(如步骤 1.d 和下文所述)。data-offset
必须在设备上保留足够的空间,使群集 MD 能够将其元数据写入设备。但偏移量必须足够小,使设备的剩余容量可以容纳所迁移卷的所有物理卷区域。由于卷可能已跨越整个设备但不包括镜像日志,因此,偏移量必须小于镜像日志的大小。我们建议将
data-offset
设置为 128 KB。如果未指定偏移量的值,其默认值为 1 KB(1024 字节)。镜像日志是已写入不同的设备(
disk
选项)还是保留在内存中(core
选项)?: 在开始迁移之前,请增大物理卷的大小,或减小逻辑卷的大小(以便为物理卷释放更多的空间)。
24.4.2 将镜像 LV 迁移到群集 MD #
以下过程基于第 24.4.1 节 “迁移之前的示例设置”。请根据您的设置调整指令,并相应地替换 LV、VG、磁盘和群集 MD 设备的名称。
迁移过程完全不会造成停机。在迁移过程中仍可挂载文件系统。
在节点
alice
上执行以下步骤:将镜像逻辑卷
test-lv
转换为线性逻辑卷:#
lvconvert -m0 cluster-vg2/test-lv /dev/vdc
从卷组
cluster-vg2
中去除物理卷/dev/vdc
:#
vgreduce cluster-vg2 /dev/vdc
从 LVM 中去除以下物理卷:
#
pvremove /dev/vdc
如果现在就运行
lsblk
,您将会看到:NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk ├─vda1 253:1 0 4G 0 part [SWAP] └─vda2 253:2 0 36G 0 part / vdb 253:16 0 20G 0 disk └─cluster--vg2-test--lv 254:5 0 12G 0 lvm vdc 253:32 0 20G 0 disk
使用磁盘
/dev/vdc
创建群集 MD 设备/dev/md0
:#
mdadm --create /dev/md0 --bitmap=clustered \ --metadata=1.2 --raid-devices=1 --force --level=mirror \ /dev/vdc --data-offset=128
有关为何要使用
data-offset
选项的细节,请参见重要:避免迁移失败。
在节点
bob
上组装以下 MD 设备:#
mdadm --assemble md0 /dev/vdc
如果您的群集由两个以上的节点组成,请在该群集中的所有剩余节点上执行此步骤。
返回到节点
alice
:将 MD 设备
/dev/md0
初始化为与 LVM 搭配使用的物理卷:#
pvcreate /dev/md0
将 MD 设备
/dev/md0
添加到卷组cluster-vg2
:#
vgextend cluster-vg2 /dev/md0
将磁盘
/dev/vdb
中的数据移到/dev/md0
设备:#
pvmove /dev/vdb /dev/md0
从卷
group cluster-vg2
中去除物理卷/dev/vdb
:#
vgreduce cluster-vg2 /dev/vdb
从设备中去除标签,使 LVM 不再将该设备识别为物理卷:
#
pvremove /dev/vdb
将
/dev/vdb
添加到 MD 设备/dev/md0
:#
mdadm --grow /dev/md0 --raid-devices=2 --add /dev/vdb
24.4.3 迁移之后的示例设置 #
如果现在就运行 lsblk
,您将会看到:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk ├─vda1 253:1 0 4G 0 part [SWAP] └─vda2 253:2 0 36G 0 part / vdb 253:16 0 20G 0 disk └─md0 9:0 0 20G 0 raid1 └─cluster--vg2-test--lv 254:5 0 12G 0 lvm vdc 253:32 0 20G 0 disk └─md0 9:0 0 20G 0 raid1 └─cluster--vg2-test--lv 254:5 0 12G 0 lvm
25 群集多设备(群集 MD) #
群集多设备(群集 MD)是一项基于软件的群集 RAID 存储解决方案。目前,群集 MD 为群集提供了 RAID1 镜像冗余。在 SUSE Linux Enterprise High Availability 15 SP6 中,随附了 RAID10 技术预览版。如果您要尝试 RAID,请在相关 mirror
命令中用 10
10 替换 mdadm
。本章介绍如何创建和使用群集 MD。
25.1 概念概述 #
群集 MD 提供在群集环境中使用 RAID1 的支持。每个节点都会访问群集 MD 使用的磁盘或设备。如果群集 MD 的一个设备发生故障,则在运行时可以由另一个设备代替它,并且系统会对其进行重新同步以提供相同数量的冗余。群集 MD 需要使用 Corosync 和分布式锁管理器 (DLM) 进行协调和讯息交换。
群集 MD 设备不会像其他常规 MD 设备一样在引导时自动启动。为确保 DLM 资源已启动,需要使用资源代理来启动群集设备。
25.2 创建群集 MD RAID 设备 #
一个安装了 Pacemaker 的正在运行的群集。
DLM 的资源代理(请参见第 20.2 节 “配置 DLM 群集资源”)。
至少两个共享磁盘设备。您可以使用另外一个设备作为备用设备,以便在设备发生故障时自动进行故障转移。
安装的软件包 cluster-md-kmp-default。
为了提高稳定性,请使用永久设备名称(例如 /dev/disk/by-id/DEVICE_ID
),而不是 /dev/sdX
名称。
请确保 DLM 资源在群集的每个节点上都正常运行,并使用以下命令检查资源状态:
#
crm_resource -r dlm -W
创建群集 MD 设备:
如果您没有现有的常规 RAID 设备,请使用以下命令在运行 DLM 资源的节点上创建群集 MD 设备:
#
mdadm --create /dev/md0 --bitmap=clustered \ --metadata=1.2 --raid-devices=2 --level=mirror \ /dev/disk/by-id/DEVICE_ID1 /dev/disk/by-id/DEVICE_ID2
由于群集 MD 只能与 1.2 版的元数据配合使用,因此建议使用
--metadata
选项来指定版本。有关其他有用选项,请参见mdadm
手册页。在/proc/mdstat
中监控重新同步进度。如果您有现有的常规 RAID,请先清除现有位图,然后再创建群集位图:
#
mdadm --grow /dev/mdX --bitmap=none
#
mdadm --grow /dev/mdX --bitmap=clustered
(可选)要创建带有用于自动故障转移的备用设备的群集 MD 设备,请在一个群集节点上运行以下命令:
#
mdadm --create /dev/md0 --bitmap=clustered --raid-devices=2 \ --level=mirror --spare-devices=1 --metadata=1.2 \ /dev/disk/by-id/DEVICE_ID1 /dev/disk/by-id/DEVICE_ID2 /dev/disk/by-id/DEVICE_ID3
获取 UUID 以及相关的 MD 路径:
#
mdadm --detail --scan
该 UUID 必须与超级块中存储的 UUID 匹配。有关 UUID 的细节,请参见
mdadm.conf
手册页。打开
/etc/mdadm.conf
,然后添加 MD 设备名称及与其关联的设备。使用上一步中获得的 UUID:DEVICE /dev/disk/by-id/DEVICE_ID1 /dev/disk/by-id/DEVICE_ID2 ARRAY /dev/md0 UUID=1d70f103:49740ef1:af2afce5:fcf6a489
打开 Csync2 的配置文件
/etc/csync2/csync2.cfg
,并添加/etc/mdadm.conf
:group ha_group { # ... list of files pruned ... include /etc/mdadm.conf }
25.3 配置资源代理 #
按如下所示配置 CRM 资源:
创建
Raid1
原始资源:crm(live)configure#
primitive raider Raid1 \ params raidconf="/etc/mdadm.conf" raiddev=/dev/md0 \ force_clones=true \ op monitor timeout=20s interval=10 \ op start timeout=20s interval=0 \ op stop timeout=20s interval=0
将
raider
资源添加到您已为 DLM 创建的存储基础组:crm(live)configure#
modgroup g-storage add raider
add
子命令默认会追加新的组成员。如果尚未克隆
g-storage
组,请执行该操作,以使其在所有节点上运行:crm(live)configure#
clone cl-storage g-storage \ meta interleave=true target-role=Started
使用
show
查看更改。如果所有设置均正确无误,请使用
commit
提交您的更改。
25.4 添加设备 #
要将某个设备添加到现有的活动群集 MD 设备,请先使用命令 “ 确保该设备在每个节点上均”可见cat /proc/mdstat
。如果设备不可见,命令将会失败。
在一个群集节点上使用以下命令:
#
mdadm --manage /dev/md0 --add /dev/disk/by-id/DEVICE_ID
所添加的新设备的行为取决于群集 MD 设备的状态:
如果只有一个镜像设备处于活动状态,则新设备将会成为镜像设备中的第二个设备,并且会启动恢复进程。
如果群集 MD 设备的两个设备都处于活动状态,则新添加的设备将会成为备用设备。
25.5 重新添加暂时发生故障的设备 #
故障往往只发生于一时,并且仅限于一个节点。如果在执行 I/O 操作期间有任何节点发生了故障,则会在整个群集中将相应设备标记为失败。
例如,其中一个节点发生电缆故障,可能就会导致发生这种情况。更正此问题后,您可以重新添加设备。与添加新设备会同步整个设备不同,这样只会同步过时的部件。
要重新添加设备,请在一个群集节点上运行以下命令:
#
mdadm --manage /dev/md0 --re-add /dev/disk/by-id/DEVICE_ID
25.6 去除设备 #
在运行时去除设备以进行替换之前,请执行以下操作:
检查
/proc/mdstat
以确保设备处于失败状态。查看设备前面有无(F)
。在一个群集节点上运行以下命令,以使设备失败:
#
mdadm --manage /dev/md0 --fail /dev/disk/by-id/DEVICE_ID
在一个群集节点上使用以下命令去除失败的设备:
#
mdadm --manage /dev/md0 --remove /dev/disk/by-id/DEVICE_ID
25.7 在灾难恢复站点将群集 MD 组合成常规 RAID #
进行灾难恢复时,您可能会遇到下面的情况:灾难恢复站点的基础架构中没有 Pacemaker 群集堆栈,但应用程序仍需访问现有群集 MD 磁盘上或备份中的数据。
您可以将群集 MD RAID 转换为常规 RAID,方法是使用 --assemble
操作和 -U no-bitmap
选项相应地更改 RAID 磁盘的元数据。
下面的示例介绍了如何组合数据恢复站点上的所有阵列:
while read i; do NAME=`echo $i | sed 's/.*name=//'|awk '{print $1}'|sed 's/.*://'` UUID=`echo $i | sed 's/.*UUID=//'|awk '{print $1}'` mdadm -AR "/dev/md/$NAME" -u $UUID -U no-bitmap echo "NAME =" $NAME ", UUID =" $UUID ", assembled." done < <(mdadm -Es)
26 Samba 群集 #
群集 Samba 服务器提供异构网络的高可用性解决方案。本章说明了一些背景信息以及如何设置群集 Samba 服务器。
26.1 概念概述 #
Samba 使用 Trivial Database (TDB) 已经许多年了。它允许多个应用程序同时写入。为确保所有写操作都成功执行而不会彼此冲突,TDB 使用内部锁定机制。
Cluster Trivial Database (CTDB) 是现有的 TDB 的小扩展。项目对 CTDB 的描述是:“Samba 和其他项目用于存储临时数据的 TDB 数据库的群集实现”。
每个群集节点都运行本地 CTDB 守护程序。Samba 与其本地 CTDB 守护程序通讯,而非直接写入其 TDB。守护程序通过网络交换元数据,但实际的读写操作是在快速存储设备的本地副本上进行的。CTDB 的概念如图 26.1 “CTDB 群集的结构”中所示。
CTDB 资源代理的当前实现将 CTDB 配置为只管理 Samba。任何其他功能,包括 IP 故障转移,都应使用 Pacemaker 进行配置。
只有同质群集支持 CTDB。例如,群集中的所有节点都需要具有相同的体系结构。不能混用 x86 与 AMD64。
群集 Samba 服务器必须共享某些数据:
将 Unix 用户和组 ID 与 Windows 用户和组关联的映射表。
用户数据库必须在所有节点间同步。
Windows 域中的成员服务器的连接信息必须在所有节点上都可用。
元数据(如活动 SMB 会话、共享连接和锁定)需在所有节点上都可用。
目标是:具有 N+1 个节点的群集 Samba 服务器比只有 N 个节点的快。一个节点不会比非群集 Samba 服务器慢。
26.2 基本配置 #
CTDB 资源代理会自动更改 /etc/sysconfig/ctdb
。使用 crm
ra
info CTDB
可列出可为 CTDB 资源指定的所有参数。
要设置群集 Samba 服务器,请按如下操作:
准备群集:
继续操作之前,请确保以下软件包均已安装:tdb-tools、ctdb 和 samba(
smb
和nmb
资源需要这些软件包)。根据本指南的第 II 部分 “配置和管理”中所述配置您的群集(Pacemaker、OCFS2)。
配置并挂载共享文件系统(如 OCFS2),例如挂载到
/srv/clusterfs
上。有关更多信息,请参见第 21 章 “OCFS2”。如果需要开启 POSIX ACL,请将其启用:
对新的 OCFS2 文件系统,使用:
#
mkfs.ocfs2 --fs-features=xattr ...
对现有 OCFS2 文件系统,使用:
#
tunefs.ocfs2 --fs-feature=xattr DEVICE
确保在文件系统资源中指定了
acl
选项。按如下方式使用crm
外壳:crm(live)configure#
primitive ocfs2-3 ocf:heartbeat:Filesystem params options="acl" ...
确保
smb
、ctdb
和nmb
服务已禁用:#
systemctl disable ctdb
#
systemctl disable smb
#
systemctl disable nmb
在所有节点上打开防火墙的端口
4379
。这是为了使 CTDB 能够与其他群集节点通讯。
在共享文件系统上为 CTDB 锁定创建一个目录:
#
mkdir -p /srv/clusterfs/samba/
在
/etc/ctdb/nodes
中插入包含群集中每个节点的所有私用 IP 地址的所有节点:192.168.1.10 192.168.1.11
配置 Samba。在
/etc/samba/smb.conf
的[global]
部分中添加下面几行。使用所选的主机名取代CTDB-SERVER
(集群中的所有节点将显示为一个使用此名称的大节点,以方便操作):[global] # ... # settings applicable for all CTDB deployments netbios name = CTDB-SERVER clustering = yes idmap config * : backend = tdb2 passdb backend = tdbsam ctdbd socket = /var/lib/ctdb/ctdb.socket # settings necessary for CTDB on OCFS2 fileid:algorithm = fsid vfs objects = fileid # ...
使用
csync2
将配置文件复制到所有节点:#
csync2 -xv
有关详细信息,请参见过程 4.9 “使用 Csync2 同步配置文件”。
将 CTDB 资源添加到群集:
#
crm configure
crm(live)configure#
primitive ctdb CTDB params \ ctdb_manages_winbind="false" \ ctdb_manages_samba="false" \ ctdb_recovery_lock="/srv/clusterfs/samba/ctdb.lock" \ ctdb_socket="/var/lib/ctdb/ctdb.socket" \ op monitor interval="10" timeout="20" \ op start interval="0" timeout="90" \ op stop interval="0" timeout="100"
crm(live)configure#
primitive nmb systemd:nmb \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"
crm(live)configure#
primitive smb systemd:smb \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"
crm(live)configure#
group g-ctdb ctdb nmb smb
crm(live)configure#
clone cl-ctdb g-ctdb meta interleave="true"
crm(live)configure#
colocation col-ctdb-with-clusterfs inf: cl-ctdb cl-clusterfs
crm(live)configure#
order o-clusterfs-then-ctdb Mandatory: cl-clusterfs cl-ctdb
crm(live)configure#
commit
添加群集 IP 地址:
crm(live)configure#
primitive ip IPaddr2 params ip=192.168.2.222 \ unique_clone_address="true" \ op monitor interval="60" \ meta resource-stickiness="0"
crm(live)configure#
clone cl-ip ip \ meta interleave="true" clone-node-max="2" globally-unique="true"
crm(live)configure#
colocation col-ip-with-ctdb 0: cl-ip cl-ctdb
crm(live)configure#
order o-ip-then-ctdb 0: cl-ip cl-ctdb
crm(live)configure#
commit
如果
unique_clone_address
设置为true
,IPaddr2 资源代理将向指定的地址添加一个克隆 ID,从而导致出现三个不同的 IP 地址。这些地址通常是不需要的,但有助于实现负载平衡。有关此主题的更多信息,请参见第 17.2 节 “使用 Linux 虚拟服务器配置负载平衡”。提交更改:
crm(live)configure#
commit
检查结果:
#
crm status
Clone Set: cl-storage [dlm] Started: [ factory-1 ] Stopped: [ factory-0 ] Clone Set: cl-clusterfs [clusterfs] Started: [ factory-1 ] Stopped: [ factory-0 ] Clone Set: cl-ctdb [g-ctdb] Started: [ factory-1 ] Started: [ factory-0 ] Clone Set: cl-ip [ip] (unique) ip:0 (ocf:heartbeat:IPaddr2): Started factory-0 ip:1 (ocf:heartbeat:IPaddr2): Started factory-1从客户端计算机进行测试。在 Linux 客户端上运行以下命令,以检查能否从系统复制文件以及将文件复制到系统:
#
smbclient //192.168.2.222/myshare
26.3 加入 Active Directory 域 #
Active Directory (AD) 是 Windows Server 系统的一项目录服务。
下列说明概述了如何将 CTDB 群集加入到 Active Directory 域:
按照过程 26.1 “设置基本的群集 Samba 服务器”中所述创建 CTDB 资源。
安装 samba-winbind 软件包。
禁用
winbind
服务:#
systemctl disable winbind
定义 winbind 群集资源:
#
crm configure
crm(live)configure#
primitive winbind systemd:winbind \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"
crm(live)configure#
commit
编辑
g-ctdb
组,并在winbind
与·nmb
资源之间插入smb
:crm(live)configure#
edit g-ctdb
输入 :–w (
vim
) 保存更改并关闭编辑器。有关如何设置 Active Directory 域的说明,请参见 Windows Server 文档。在此示例中,使用以下参数:
AD 和 DNS 服务器
win2k3.2k3test.example.com
AD 域
2k3test.example.com
群集 AD 成员 NETBIOS 名称
CTDB-SERVER
最后,将群集加入 Active Directory 服务器:
请确保 Csync2 的配置中包含下列文件,才可在所有群集主机上进行安装:
/etc/samba/smb.conf /etc/security/pam_winbind.conf /etc/krb5.conf /etc/nsswitch.conf /etc/security/pam_mount.conf.xml /etc/pam.d/common-session
您也可以为此任务使用 YaST 的第 4.7 节 “将配置传输到所有节点”。
模块,请参见运行 YaST 并从
项中打开 模块。输入域或工作组设置然后单击
完成设置。
26.4 调试和测试群集 Samba #
要调试群集 Samba 服务器,可使用以下作用于不同级别的工具:
ctdb_diagnostics
运行此工具可诊断群集 Samba 服务器。详细的调试消息有助于您跟踪任何问题。
ctdb_diagnostics
命令可搜索以下文件,这些文件必须在所有节点上都可用:/etc/krb5.conf /etc/hosts /etc/ctdb/nodes /etc/sysconfig/ctdb /etc/resolv.conf /etc/nsswitch.conf /etc/sysctl.conf /etc/samba/smb.conf /etc/fstab /etc/multipath.conf /etc/pam.d/system-auth /etc/sysconfig/nfs /etc/exports /etc/vsftpd/vsftpd.conf
如果存在
/etc/ctdb/public_addresses
和/etc/ctdb/static-routes
文件,也会检查它们是否可用。ping_pong
检查文件系统是否支持 CTDB 使用
ping_pong
。它会对群集文件系统执行连贯性和性能之类的特定测试(请参见 https://wiki.samba.org/index.php/Ping_pong),并指出群集在高负载下的表现。send_arp
工具和SendArp
资源代理SendArp
资源代理位于/usr/lib/heartbeat/send_arp
(或/usr/lib64/heartbeat/send_arp
)中。send_arp
工具会发出自发的 ARP(Address Resolution Protocol,地址解析协议)包,可用于更新其他计算机的 ARP 表。它可以帮助确定故障转移过程之后的通讯问题。如果节点对 Samba 显示了群集 IP 地址,但您却无法连接到节点或 ping 到它,请使用send_arp
命令测试节点是否只需要 ARP 表更新。有关详细信息,请参见https://gitlab.com/wireshark/wireshark/-/wikis/home。
要测试群集文件系统的某些方面,请如下继续操作:
在一个节点上启动命令
ping_pong
,并将占位符 N 替换为节点数 + 1。文件ABSPATH/data.txt
存放在共享存储区中,因此在所有节点上都可以访问该文件(ABSPATH 表示绝对路径):#
ping_pong ABSPATH/data.txt N
应该会得到很高的锁定率,因为只运行一个节点。如果程序不打印锁定率,请替换群集文件系统。
使用相同的参数在另一个节点上启动第二个
ping_pong
。应该会看到锁定率急剧下降。如果以下任意情况适用于群集文件系统,请替换它:
ping_pong
不打印每秒锁定率,两个实例中的锁定率并非几乎相等,
启动第二个实例后锁定率未下降。
启动第三个
ping_pong
。添加另一个节点,注意锁定率的变化。逐个取消
ping_pong
命令。应该观察到锁定率上升,直到回到单一节点的情况。如果没有看到预期行为,请参见第 21 章 “OCFS2” 中的详细信息。
26.5 更多信息 #
27 使用 ReaR (Relax-and-Recover) 实现灾难恢复 #
Relax-and-Recover(“ReaR”)是供系统管理员使用的灾难恢复框架。它是一个 Bash 脚本集合,您需要根据要在发生灾难时加以保护的特定生产环境调整这些脚本。
没有任何灾难恢复解决方案能够现成地解决问题。因此,必须在灾难发生前做好准备。
27.1 概念概述 #
以下几节介绍了灾难恢复的总体概念,以及使用 ReaR 成功实现灾难恢复所需执行的基本步骤。另外还提供了有关 ReaR 要求、要注意的一些限制、各种方案和备份工具的指南。
27.1.1 创建灾难恢复计划 #
在最坏的情况发生之前采取措施:分析 IT 基础架构是否存在任何重大风险,评估您的预算,并创建灾难恢复计划。如果您还没有现行的灾难恢复计划,请先了解有关以下每个步骤的信息:
风险分析: 对基础设施进行可靠的风险分析。列出所有可能的威胁并评估它们的严重性。确定这些威胁的相似程度并划分优先级。建议使用简单的分类:可能性和影响。
预算计划: 分析结果是一个概述,指出哪些风险可以忍受,哪些风险对业务非常关键。问问自己,怎样才能将风险将至最低,而这需要付出多大的代价。根据公司的规模,在灾难恢复方面的花费占总体 IT 预算的 2% 到 15%。
制定灾难恢复计划: 制作核对清单、测试过程、建立并指派优先级以及列出 IT 基础设施库存。定义当基础设施中的一些服务失败时,如何处理问题。
测试: 定义详细的计划后,测试该计划。每年至少测试一次。使用与主要 IT 基础设施相同的测试硬件。
27.1.2 灾难恢复意味着什么? #
如果生产环境中的某个系统已毁坏(可能出于任何原因 - 例如,硬件损坏、配置不当或软件问题),您需要重创建该系统。可以在相同的硬件或者兼容的替代硬件上重创建。重创建系统并不只是意味着从备份中恢复文件,还包括准备系统的存储空间(与分区、文件系统和安装点相关),以及重新安装引导加载程序。
27.1.3 灾难恢复如何与 ReaR 配合工作? #
在系统正常运行期间,创建文件的备份并在恢复媒体上创建恢复系统。该恢复系统包含一个恢复安装程序。
如果系统已损坏,您可以更换受损的硬件(如果需要),从恢复媒体引导恢复系统,然后起动恢复安装程序。恢复安装程序会重创建系统:首先,它会准备存储(分区、文件系统、挂载点),然后从备份中恢复文件。最后,它会重新安装引导加载程序。
27.1.4 ReaR 要求 #
要使用 ReaR,您至少需要两个相同的系统:用来运行生产环境的计算机,以及相同的测试计算机。举例来说,这里所说的“相同”是指您可以将一块网卡替换为使用相同内核驱动程序的另一块网卡。
如果某个硬件组件使用的驱动程序与生产环境中所用的驱动程序不同,ReaR 不会将该组件视为相同。
27.1.5 ReaR 版本更新 #
SUSE Linux Enterprise High Availability 15 SP6 随附 ReaR 版本 2.3,由 rear23a 软件包提供。
有关 Bug 修复、不兼容性及其他问题的任何信息都可在包的更改日志中找到。如果需要重新验证灾难恢复过程,建议您另外也要审阅 ReaR 的较新软件包版本。
您需要了解 ReaR 的以下问题:
您至少需要有 ReaR 1.18.a 版本和 ebiso 软件包,才能在 UEFI 系统上实现灾难恢复。只有此版本支持新助手工具
/usr/bin/ebiso
。此助手工具用于创建 UEFI 可引导 ReaR 系统 ISO 映像。如果您使用某个 ReaR 版本实现的灾难恢复过程已通过测试并且功能完好,请不要更新 ReaR。请保留该 ReaR 软件包,并且不要更改您的灾难恢复方法。
ReaR 的版本更新是以独立软件包的形式提供的,这些软件包在设计上有意彼此冲突,目的是防止所安装的版本意外地被另一个版本替换。
在以下情况下,您需要重新验证现有的灾难恢复过程:
针对每个 ReaR 版本更新。
手动更新 ReaR 时。
针对 ReaR 使用的每个软件。
如果更新了底层系统组件(例如
btrfs
、parted
及类似组件)。
27.1.6 针对 Btrfs 的限制 #
如果您使用 Btrfs,请注意以下限制。
- 您的系统包括子卷,但不包括快照子卷
至少需要 ReaR 版本 1.17.2.a。此版本支持重创建“正常的”Btrfs 子卷结构(不包括快照子卷)。
- 您的系统包括快照子卷
- 警告
无法照常使用基于文件的备份软件备份和恢复 Btrfs 快照子卷。
尽管 Btrfs 文件系统上的最新快照子卷几乎不占用任何磁盘空间(因为 Btrfs 具有写入时复制功能),但在使用基于文件的备份软件时,这些文件将作为完整文件进行备份。在备份中,这些文件的大小是其原始文件大小的两倍。因此,也就无法将快照恢复到它们以前在原始系统上的状态。
- 您的 SLE 系统需要匹配的 ReaR 配置
例如,SLE12 GA、SLE12 SP1 和 SLE12 SP2 中的设置具有数个不兼容的 Btrfs 默认结构。因此,使用匹配的 ReaR 配置文件至关重要。请参见示例文件
/usr/share/rear/conf/examples/SLE12*-btrfs-example.conf
。
27.1.7 方案和备份工具 #
ReaR 能够创建可从本地媒体(例如硬盘、闪存盘、DVD/CD-R)或通过 PXE 引导的灾难恢复系统(包括系统特定的恢复安装程序)。可以根据例 27.1所述,将备份数据存储在网络文件系统中,如 NFS。
ReaR 不会替换文件备份,而是对它进行补充。默认情况下,ReaR 支持常规 tar
命令和若干第三方备份工具(例如 Tivoli Storage Manager、QNetix Galaxy、Symantec NetBackup、EMC NetWorker 或 HP DataProtector)。有关将 ReaR 与用作备份工具的 EMC NetWorker 配合使用的示例配置,请参见例 27.2。
27.1.8 基本步骤 #
要在发生灾难时使用 ReaR 成功进行恢复,需要执行以下基本步骤:
- 设置 ReaR 和备份解决方案
这会涉及到一些任务,例如,编辑 ReaR 配置文件、调整 Bash 脚本,以及配置您要使用的备份解决方案。
- 创建恢复安装系统
在要保护的系统处于正常运行状态时,使用
rear mkbackup
命令创建文件备份,并生成包含特定于系统的 ReaR 恢复安装程序的恢复系统。- 测试恢复过程
每次使用 ReaR 创建灾难恢复媒体时,都要全面测试灾难恢复过程。所用测试计算机上的硬件必须与生产环境中的硬件相同。有关细节,请参见第 27.1.4 节 “ReaR 要求”。
- 从灾难中恢复
灾难发生后,更换任何受损的硬件(如果需要)。然后,引导 ReaR 恢复系统,并使用
rear recover
命令启动恢复安装程序。
27.2 设置 ReaR 和备份解决方案 #
要设置 ReaR,您至少需要编辑 ReaR 配置文件 /etc/rear/local.conf
,此外可以根据需要编辑属于 ReaR 框架一部分的 Bash 脚本。
具体而言,您需要定义 ReaR 应该执行的以下任务:
当您的系统是通过 UEFI 引导时: 如果您的系统使用 UEFI 引导加载程序进行引导,请安装 ebiso 软件包并在
/etc/rear/local.conf
中添加如下一行内容:ISO_MKISOFS_BIN="/usr/bin/ebiso"
如果您的系统使用 UEFI 安全引导功能引导,还必须添加下行内容:
SECURE_BOOT_BOOTLOADER="/boot/efi/EFI/BOOT/shim.efi"
有关用于 UEFI 的 ReaR 配置变量的详细信息,请参见
/usr/share/rear/conf/default.conf
文件。如何备份文件以及如何创建和存储灾难恢复系统: 这需要在
/etc/rear/local.conf
中配置。需要重新创建的确切对象(分区、文件系统、挂载点,等等): 这可以在
/etc/rear/local.conf
中定义(例如,要排除哪些对象)。要重创建非标准系统,您可能需要增强 Bash 脚本。恢复过程的工作方式: 要更改 ReaR 生成恢复安装程序的方式,或者要调整 ReaR 恢复安装程序执行的操作,您需要编辑 Bash 脚本。
要配置 ReaR,请将您的选项添加到 /etc/rear/local.conf
配置文件中。(以前的配置文件 /etc/rear/sites.conf
已从软件包中去除。但是,如果您有来自以前环境中的此文件,ReaR 会继续使用该文件。)
所有 ReaR 配置变量及其默认值都在 /usr/share/rear/conf/default.conf
中设置。examples
子目录中提供了一些用户配置(例如,/etc/rear/local.conf
中设置的内容)的示例文件 (*example.conf
)。有关详细信息,请参见 Rea 手册页。
您应该使用一个匹配的示例配置文件作为模板,然后根据需要对其进行调整,以此创建您的特定配置文件。从数个示例配置文件中复制选项,然后将其粘贴到与特定系统匹配的特定 /etc/rear/local.conf
文件中。请不要使用原始的示例配置文件,因为这些文件提供了可能用于特定设置的变量的概述。
ReaR 可以用于不同的情境中。以下示例使用 NFS 服务器作为文件备份的存储。
按 Administration Guide for SUSE Linux Enterprise Server 15 SP6 所述使用 YaST 设置 NFS 服务器。
在
/etc/exports
文件中定义 NFS 服务器的配置。确保 NFS 服务器上的目录(要存储备份数据的位置)具有适当的挂载选项。例如:/srv/nfs *([...],rw,no_root_squash,[...])
将
/srv/nfs
替换为 NFS 服务器上备份数据的路径,并调整挂载选项。您可能需要no_root_squash
,因为rear mkbackup
命令以root
身份运行。调整配置文件
/etc/rear/local.conf
中的各个BACKUP
参数,让 ReaR 将文件备份存储在相应的 NFS 服务器上。已安装系统中的/usr/share/rear/conf/examples/SLE*-example.conf
下提供了示例。
要使用第三方备份工具代替 tar
,您需要在 ReaR 配置文件中进行相应的设置。
以下是 EMC NetWorker 的示例配置。将此配置代码段添加到 /etc/rear/local.conf
中,并根据您的设置进行调整:
BACKUP=NSR OUTPUT=ISO BACKUP_URL=nfs://host.example.com/path/to/rear/backup OUTPUT_URL=nfs://host.example.com/path/to/rear/backup NSRSERVER=backupserver.example.com RETENTION_TIME="Month"
27.3 创建恢复安装系统 #
根据第 27.2 节所述配置 ReaR 后,使用以下命令创建恢复安装系统(包括 ReaR 恢复安装程序)和文件备份:
rear -d -D mkbackup
该命令将执行以下步骤:
分析目标系统并收集信息,尤其是有关磁盘布局(分区、文件系统、安装点)和引导加载程序的信息。
使用第一步收集的信息创建一个可引导恢复系统。生成的 ReaR 恢复安装程序专用于在发生灾难时要保护的系统。使用该安装程序只能重创建这个特定的系统。
调用配置的备份工具来备份系统和用户文件。
27.4 测试恢复过程 #
创建恢复系统之后,在具有相同硬件的测试计算机上测试恢复过程。另请参见第 27.1.4 节 “ReaR 要求”。确保测试计算机已正确设置,并可替代主计算机。
必须在计算机上全面测试灾难恢复过程。请定期测试恢复过程,确保一切按预期运行。
27.5 从灾难中恢复 #
如果灾难已发生,请根据需要更换任何受损的硬件。然后按照过程 27.1所述,使用已修复的计算机(或使用已经过测试可替代原始系统运作的相同计算机)继续操作。
rear recover
命令会执行以下步骤:
恢复磁盘布局(分区、文件系统和安装点)。
从备份中恢复系统和用户文件。
恢复引导加载程序。
27.6 更多信息 #
rear
手册页/usr/share/doc/packages/rear/
第 IV 部分 维护和升级 #
- 28 执行维护任务
要在群集节点上执行维护任务,可能需要停止该节点上运行的资源、移动这些资源,或者关闭或重引导该节点。此外,可能还需要暂时接管群集中资源的控制权,甚至需要在资源仍在运行时停止群集服务。
本章介绍如何在不产生负面影响的情况下手动关闭群集节点。此外,本章将会概述群集堆栈提供的用于执行维护任务的不同选项。
- 29 升级群集和更新软件包
本章介绍两种不同方案:将群集升级到 SUSE Linux Enterprise High Availability 另一个版本(主要版本或服务包),以及更新群集节点上的单个软件包。请参见第 29.2 节 “将群集升级到产品的最新版本”与第 29.3 节 “更新群集节点上的软件包”。
如果您要升级群集,请在开始升级之前查看第 29.2.1 节 “SLE HA 和 SLE HA Geo 支持的升级路径”和第 29.2.2 节 “升级前的必要准备”。
28 执行维护任务 #
要在群集节点上执行维护任务,可能需要停止该节点上运行的资源、移动这些资源,或者关闭或重引导该节点。此外,可能还需要暂时接管群集中资源的控制权,甚至需要在资源仍在运行时停止群集服务。
本章介绍如何在不产生负面影响的情况下手动关闭群集节点。此外,本章将会概述群集堆栈提供的用于执行维护任务的不同选项。
28.1 准备和完成维护工作 #
使用以下命令可启动、停止群集或查看群集状态:
crm cluster start [--all]
在一个或所有节点上启动群集服务
crm cluster stop [--all]
在一个或所有节点上停止群集服务
crm cluster restart [--all]
在一个或所有节点上重启动群集服务
crm cluster status
查看群集堆栈的状态
请以 root
用户身份或拥有所需特权的用户身份执行上述命令。
关闭或重引导某个群集节点(或停止节点上的群集服务)时,会触发以下过程:
该节点上运行的资源会停止,或被移出该节点。
如果停止资源的操作失败或超时,STONITH 机制会屏蔽该节点并将其关闭。
如果您需要执行测试或维护工作,请执行下面的一般步骤。
如果不执行,有可能会产生意外的负面影响,例如,资源不按顺序启动、CIB 在群集节点之间不同步,甚至丢失数据。
开始前,请选择第 28.2 节 “用于维护任务的不同选项”中所述的适当选项。
请使用 Hawk2 或 crmsh 应用此选项。
执行维护任务或测试。
完成后,请将资源、节点或群集恢复“正常”工作状态。
28.2 用于维护任务的不同选项 #
Pacemaker 提供了以下用于执行系统维护的选项:
- 将群集置于维护模式
使用全局群集属性
maintenance-mode
可以一次性将所有资源置于维护状态。群集会停止监控这些资源,因而不知道它们的状态。只有 Pacemaker 的资源管理功能会处于禁用状态。Corosync 和 SBD 仍会正常运行。请对涉及群集资源的所有任务都使用维护模式。对于涉及基础架构(例如存储或网络)的任何任务,最安全的方法是完全停止群集服务。请参见 停止整个群集的群集服务。- 停止整个群集的群集服务
一次性停止所有节点上的群集服务可以关闭群集,同时避免逐个关闭各个节点将会发生的大量资源迁移。由于不存在需要将资源迁移到的目标节点,因此所有资源都会停止。
- 将节点置于维护模式
此选项可以一次性将特定节点上运行的所有资源置于维护状态。群集会停止监控这些资源,因而不知道它们的状态。
- 将节点置于待机模式
处于待机模式的节点不再能够运行资源。该节点上运行的所有资源都会被移出或停止(如果没有其他节点可用于运行资源)。另外,该节点上的所有监控操作都会停止(设置了
role="Stopped"
的操作除外)。如果您需要停止群集中的某个节点,同时继续提供另一个节点上运行的服务,则可以使用此选项。
- 停止节点上的群集服务
此选项可停止单个节点上的所有群集服务。该节点上运行的所有资源都会被移出或停止(如果没有其他节点可用于运行资源)。如果停止资源的操作失败或超时,将会屏蔽该节点。
- 将资源置于维护模式
为某个资源启用此模式后,便不会针对该资源触发监控操作。
如果您需要手动调整此资源所管理的服务,并且不希望群集在此期间对该资源运行任何监控操作,则可以使用此选项。
- 将资源置于不受管理模式
使用
is-managed
元属性可以暂时“释放”某个资源,使其不受群集堆栈的管理。这意味着,您可以手动调整此资源管理的服务(例如,调整任何组件)。不过,群集会继续监控该资源,并继续报告任何故障。如果您希望群集同时停止监控该资源,请改为使用按资源维护模式(请参见将资源置于维护模式)。
28.3 将群集置于维护模式 #
将群集置于维护模式时,只有 Pacemaker 的资源管理功能会被禁用。Corosync 和 SBD 仍会正常运行。这可能会引发屏蔽操作,具体取决于您的维护任务。
请对涉及群集资源的所有任务都使用维护模式。对于涉及基础架构(例如存储或网络)的任何任务,最安全的方法是完全停止群集服务。请参见 第 28.4 节 “停止整个群集的群集服务”。
要在 crm shell 中将群集置于维护模式,请使用以下命令:
#
crm maintenance on
要在完成维护工作后将群集恢复正常模式,请使用以下命令:
#
crm maintenance off
按第 5.4.2 节 “登录”中所述,启动 Web 浏览器并登录到群集。
从左侧导航栏中,选择
› 。从空下拉框中选择
属性。从
maintenance-mode
下拉框中选择 。单击
。完成整个群集的维护任务后,从
maintenance-mode
下拉框中选择 ,然后单击 。从此刻起,High Availability 会再次接管群集管理工作。
28.4 停止整个群集的群集服务 #
要一次性停止所有节点上的群集服务,请使用以下命令:
#
crm cluster stop --all
要在完成维护工作后再次启动群集服务,请使用以下命令:
#
crm cluster start --all
单独使用 --all
选项不能保证可将群集正常关闭,因为应用程序级别的资源停止失败可能会触发意外的屏蔽。如果应用程序是关键型应用程序,请考虑先停止这些应用程序,再停止整个群集的群集服务。
28.5 将节点置于维护模式 #
要在 crm shell 中将节点置于维护模式,请使用以下命令:
#
crm node maintenance NODENAME
要在完成维护工作后将节点恢复正常模式,请使用以下命令:
#
crm node ready NODENAME
按第 5.4.2 节 “登录”中所述,启动 Web 浏览器并登录到群集。
在左侧导航栏中,选择
。在其中某个节点视图中,单击节点旁边的扳手图标,然后选择
。完成维护任务后,单击节点旁边的扳手图标,然后选择
。
28.6 将节点置于待机模式 #
要在 crm shell 中将节点置于待机模式,请使用以下命令:
#
crm node standby NODENAME
要在完成维护工作后将节点恢复上线状态,请使用以下命令:
#
crm node online NODENAME
按第 5.4.2 节 “登录”中所述,启动 Web 浏览器并登录到群集。
在左侧导航栏中,选择
。在其中某个节点的视图中,单击节点旁边的扳手图标,然后选择
。完成节点的维护任务。
要停用待机模式,请单击节点旁边的扳手图标,然后选择
。
28.7 停止节点上的群集服务 #
您可以按顺序将服务移出节点后再关闭或重引导该节点。这样可将服务迁移出节点,而不会受限于群集服务的关闭超时时长。
在要重引导或关闭的节点上,以
root
或同等身份登录。将节点置于
standby
模式:#
crm node standby
默认情况下,节点在重引导后将保持
standby
模式。您也可以使用crm node standby reboot
将节点设置为自动重新上线。检查群集状态:
#
crm status
此命令显示相关节点处于
standby
模式:[...] Node bob: standby [...]
停止该节点上的群集服务:
#
crm cluster stop
重引导该节点。
要再次检查节点是否已加入群集,请执行以下操作:
节点重引导后,请再次登录该节点。
检查群集服务是否已启动:
#
crm cluster status
这可能要花一些时间。如果群集服务无法自行重新启动,请手动启动它们:
#
crm cluster start
检查群集状态:
#
crm status
如果节点仍处于
standby
模式,请将其重新上线:#
crm node online
28.8 将资源置于维护模式 #
要在 crm shell 中将资源置于维护模式,请使用以下命令:
#
crm resource maintenance RESOURCE_ID true
要在完成维护工作后将资源恢复正常模式,请使用以下命令:
#
crm resource maintenance RESOURCE_ID false
按第 5.4.2 节 “登录”中所述,启动 Web 浏览器并登录到群集。
在左侧导航栏中,选择
。选择要置于维护模式或不受管理模式的资源,单击该资源旁边的扳手图标,然后选择
。打开
类别。从空下拉列表中,选择
属性,然后单击加号图标添加该属性。选中
maintenance
旁边的复选框,以将 maintenance 属性设置为yes
。确认更改。
完成该资源的维护任务之后,取消选中该资源的
maintenance
属性旁边的复选框。从此刻起,资源再次由 High Availability 软件管理。
28.9 将资源置于不受管理模式 #
要在 crm shell 中将资源置于不受管理模式,请使用以下命令:
#
crm resource unmanage RESOURCE_ID
要在完成维护工作后再次将资源置于受管模式,请使用以下命令:
#
crm resource manage RESOURCE_ID
按第 5.4.2 节 “登录”中所述,启动 Web 浏览器并登录到群集。
在左侧导航栏中选择
,然后转到 列表。在
列中,单击要修改的资源旁边的向下箭头图标,然后选择 。资源配置屏幕即会打开。
在
下面,从空下拉框中选择 项。将其值设置为
No
,然后单击 。完成维护任务后,将
设置为Yes
(即默认值)并应用更改。从此刻起,资源再次由 High Availability 软件管理。
28.10 在维护模式下重引导群集节点 #
如果群集或某个节点处于维护模式,您可以使用群集堆栈外部的工具(例如 systemctl
)手动将群集管理的组件作为资源进行操作。High Availability 软件不会监控这些组件或尝试重启动它们。
如果您停止节点上的群集服务,所有守护程序和进程(最初作为 Pacemaker 管理的群集资源启动)都会继续运行。
如果您在群集或某个节点处于维护模式时尝试启动该节点上的群集服务,Pacemaker 会针对每个资源启动一次性的监控操作(“探测”),以确定哪些资源当前正在该节点上运行。不过,它只会确定资源的状态,而不执行其他操作。
在要重引导或关闭的节点上,以
root
或同等身份登录。如果您使用 DLM 资源(或依赖于 DLM 的其他资源),请确保在停止群集服务之前明确停止这些资源:
crm(live)resource#
stop RESOURCE_ID
这是因为停止 Pacemaker 也会停止 Corosync 服务,而 DLM 依赖于后者的成员资格和消息交换服务。如果 Corosync 停止,DLM 资源会表现为某种节点分裂情况并触发屏蔽操作。
停止该节点上的群集服务:
#
crm cluster stop
关闭或重引导节点。
29 升级群集和更新软件包 #
本章介绍两种不同方案:将群集升级到 SUSE Linux Enterprise High Availability 另一个版本(主要版本或服务包),以及更新群集节点上的单个软件包。请参见第 29.2 节 “将群集升级到产品的最新版本”与第 29.3 节 “更新群集节点上的软件包”。
如果您要升级群集,请在开始升级之前查看第 29.2.1 节 “SLE HA 和 SLE HA Geo 支持的升级路径”和第 29.2.2 节 “升级前的必要准备”。
29.1 术语 #
下面介绍本章中使用的最重要术语的定义:
- 主要版本, 正式发布 (GA) 版本
主要版本是一个新的产品版本,增加了新功能和工具并停用了先前弃用的组件。其含有不向后兼容的更改。
- 群集脱机升级
如果新产品版本包含不可向后兼容的重大更改,则需要通过群集脱机升级来升级群集。需要先使所有节点下线并将群集作为一个整体进行升级,然后才能使所有节点重新上线。
- 群集滚动升级
执行群集滚动升级时,每次会升级一个群集节点,此时,群集的其他节点仍在运行中。需将第一个节点下线,进行升级,然后再使其重新上线以加入群集。然后,需要逐个对其余节点重复上述过程,直到所有群集节点都升级为主要版本。
- 服务包 (SP)
将几个补丁合并到便于安装或部署的一个组织体中。服务包都有编号,通常包含程序的安全性修复、更新、升级或增强功能。
- 更新
安装某个包的较新次要版本,其中通常包含安全修复和其他重要修复。
- 升级
29.2 将群集升级到产品的最新版本 #
支持哪种升级路径以及如何执行升级,取决于当前的产品版本以及您要迁移到的目标版本。
SUSE Linux Enterprise High Availability 支持的升级路径与底层基础系统支持的升级路径相同。要了解完整信息,请参见 SUSE Linux Enterprise Server《升级指南》中的Supported Upgrade Paths to SUSE Linux Enterprise Server 15 SP6。
此外,由于 High Availability 群集堆栈提供了两种升级群集的方法,以下规则也适用:
第 29.2.1 节 列出了 SLE HA (Geo) 支持的从一个版本升级到下一个版本的升级路径和方法。For Details列中显示您应参考的特定升级文档(还包括基础系统和 Geo Clustering for SUSE Linux Enterprise High Availability)。此文档可从以下位置获得:
不支持在 SUSE Linux Enterprise High Availability 12/SUSE Linux Enterprise High Availability 15 上运行混合群集。
完成到产品版本 15 的升级过程后,不支持再还原到产品版本 12。
29.2.1 SLE HA 和 SLE HA Geo 支持的升级路径 #
升级前版本和目标版本 |
升级路径 |
相关细节 |
---|---|---|
SLE HA 11 SP3 到 SLE HA (Geo) 12 |
群集脱机升级 |
|
从 SLE HA (Geo) 11 SP4 升级到 SLE HA (Geo) 12 SP1 |
群集脱机升级 |
|
从 SLE HA (Geo) 12 升级到 SLE HA (Geo) 12 SP1 |
群集滚动升级 |
|
从 SLE HA (Geo) 12 SP1 升级到 SLE HA (Geo) 12 SP2 |
群集滚动升级 |
|
从 SLE HA (Geo) 12 SP2 升级到 SLE HA (Geo) 12 SP3 |
群集滚动升级 |
|
从 SLE HA (Geo) 12 SP3 升级到 SLE HA (Geo) 12 SP4 |
群集滚动升级 |
|
从 SLE HA (Geo) 12 SP3 升级到 SLE HA 15 |
群集脱机升级 |
|
从 SLE HA (Geo) 12 SP4 升级到 SLE HA (Geo) 12 SP5 |
群集滚动升级 |
|
从 HA (Geo) 12 SP4 升级到 SLE HA 15 SP1 |
群集脱机升级 |
|
从 HA (Geo) 12 SP5 升级到 SLE HA 15 SP2 |
群集脱机升级 |
|
从 SLE HA 15 升级到 SLE HA 15 SP1 |
群集滚动升级 |
|
从 SLE HA 15 SP1 升级到 SLE HA 15 SP2 |
群集滚动升级 |
|
从 SLE HA 15 SP2 升级到 SLE HA 15 SP3 |
群集滚动升级 |
|
从 SLE HA 15 SP3 升级到 SLE HA 15 SP4 |
群集滚动升级 |
|
从 SLE HA 15 SP4 升级到 SLE HA 15 SP5 |
群集滚动升级 |
|
最简单的升级路径是按顺序安装所有服务包。对于 SUSE Linux Enterprise 15 产品系列(GA 和后续服务包),还支持在升级时跳过某个服务包。例如,支持从 SLE 15 GA 升级到 15 SP2,或从 SLE 15 SP1 升级到 15 SP3。
29.2.2 升级前的必要准备 #
- 备份
确保系统备份为最新的且可恢复。
- 测试
请先在群集设置的临时实例上测试升级过程,然后再在生产环境中执行该过程。这样,您便可以估算出维护期所需的时间段。这还有助于检测和解决任何意外问题。
29.2.3 群集脱机升级 #
本节内容适用于以下场合:
从 SLE HA 11 SP3 升级到 SLE HA 12 — 有关细节,请参见过程 29.1 “从产品版本 11 升级到 12:群集脱机升级”。
从 SLE HA 11 SP4 升级到 SLE HA 12 SP1 - 有关细节,请参见过程 29.1 “从产品版本 11 升级到 12:群集脱机升级”。
从 SLE HA 12 SP3 升级到 SLE HA 15 - 有关细节,请参见过程 29.2 “从产品版本 12 升级到 15:群集脱机升级”。
从 SLE HA 12 SP4 升级到 SLE HA 15 SP1 - 有关细节,请参见过程 29.2 “从产品版本 12 升级到 15:群集脱机升级”。
从 SLE HA 12 SP5 升级到 SLE HA 15 SP2 - 有关细节,请参见过程 29.2 “从产品版本 12 升级到 15:群集脱机升级”。
如果您的群集仍旧基于早期的产品版本而不是上面所列的版本,请先将它升级到 SLES 和 SLE HA 的某个版本,而该版本可用作升级到所需目标版本的源。
SUSE Linux Enterprise High Availability 12 群集堆栈的各个组件都包含重大更改(例如 /etc/corosync/corosync.conf
、OCFS2 的磁盘格式)。因此,不支持从任何 SUSE Linux Enterprise High Availability 11 版本进行 cluster rolling upgrade
。必须将所有群集节点下线,并根据下面所述将群集作为一个整体升级。
登录到每个群集节点,并使用以下命令停止群集堆栈:
#
rcopenais stop
将每个群集节点都升级到 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability 的所需目标版本 - 请参见第 29.2.1 节 “SLE HA 和 SLE HA Geo 支持的升级路径”。
完成升级过程后,请重引导装有升级版 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability 的每个节点。
如果在群集设置中使用了 OCFS2,请执行以下命令以更新设备上的结构:
#
o2cluster --update PATH_TO_DEVICE
它会为磁盘添加额外参数。SUSE Linux Enterprise High Availability 12 和 12 SPx 随附的 OCFS2 更新版本需要这些参数。
要更新 Corosync 2 的
/etc/corosync/corosync.conf
,请执行以下操作:登录到某个节点,然后启动 YaST 群集模块。
切换到过程 4.1 “定义第一个通讯通道(多播)”或过程 4.2 “定义第一个通讯通道(单播)”。
类别并输入以下新参数的值: 和 。有关细节,请分别参见如果 YaST 检测到对 Corosync 2 无效或缺失的任何其他选项,会提示您进行更改。
确认在 YaST 中所做的更改。YaST 会将其写入
/etc/corosync/corosync.conf
。如果为群集配置了 Csync2,请使用以下命令将更新的 Corosync 配置推送到其他群集节点:
#
csync2 -xv
有关 Csync2 的细节,请参见第 4.7 节 “将配置传输到所有节点”。
或者,也可以手动将
/etc/corosync/corosync.conf
复制到所有群集节点,来同步更新的 Corosync 配置。
登录到每个节点,并使用以下命令启动群集堆栈:
#
crm cluster start
使用
crm status
或 Hawk2 检查群集状态。将以下服务配置为在引导时启动:
#
systemctl enable pacemaker
#
systemctl enable hawk
#
systemctl enable sbd
有时,新功能只能在最新的 CIB 语法版本中使用。升级到新的产品版本时,默认不会升级 CIB 语法版本。
使用以下命令检查版本:
cibadmin -Q | grep validate-with
使用以下命令升级到最新的 CIB 语法版本:
#
cibadmin --upgrade --force
如果您决定从头开始安装(而不是升级)群集节点,请参见第 2.2 节 “软件需求”了解 SUSE Linux Enterprise High Availability 15 SP5 所需的模块列表。有关模块、扩展及相关产品的详细信息,请参见 SUSE Linux Enterprise Server 15 的发行说明。可从 https://www.suse.com/releasenotes/ 访问这些文档。
在开始脱机升级到 SUSE Linux Enterprise High Availability 15 之前,请按注意:升级 CIB 语法版本中所述手动升级当前群集中的 CIB 语法。
登录到每个群集节点,并使用以下命令停止群集堆栈:
#
crm cluster stop
将每个群集节点都升级到 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability 的所需目标版本 - 请参见第 29.2.1 节 “SLE HA 和 SLE HA Geo 支持的升级路径”。
完成升级过程后,请登录每个节点,并引导装有升级版 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability 的每个节点。
如果您使用群集 LVM,则需要从 clvmd 迁移到 lvmlockd。请参见
lvmlockd
手册页的 changing a clvm VG to a lockd VG 部分以及第 24.4 节 “从镜像 LV 联机迁移到群集 MD”。登录某个群集节点,并启动所有节点上的群集堆栈:
#
crm cluster start --all
注意:--all
选项仅在 15 SP4 版本中可用SUSE Linux Enterprise High Availability 15 SP4 中添加了
--all
选项。在早期版本中,您必须逐一在每个节点上运行crm cluster start
命令。使用
crm status
或 Hawk2 检查群集状态。
29.2.4 群集滚动升级 #
本节内容适用于以下场合:
从 SLE HA 12 升级到 SLE HA 12 SP1
从 SLE HA 12 SP1 升级到 SLE HA 12 SP2
从 SLE HA 12 SP2 升级到 SLE HA 12 SP3
从 SLE HA 12 SP3 升级到 SLE HA 12 SP4
从 SLE HA 12 SP4 升级到 SLE HA 12 SP5
从 SLE HA 15 升级到 SLE HA 15 SP1
从 SLE HA 15 SP1 升级到 SLE HA 15 SP2
从 SLE HA 15 SP2 升级到 SLE HA 15 SP3
从 SLE HA 15 SP3 升级到 SLE HA 15 SP4
从 SLE HA 15 SP4 升级到 SLE HA 15 SP5
根据情况使用以下其中一个过程:
在开始升级某个节点之前,请停止该节点上的群集堆栈。
如果节点上的群集资源管理器在软件更新期间处于活动状态,可能会导致活动的节点被屏蔽等结果。
只有在将所有群集节点都升级到最新产品版本之后,才可使用该版本提供的新功能。在群集滚动升级期间,只有较短的一段时间支持混合版本群集升级。请在一周内完成群集滚动升级。
当所有上线节点运行的都是升级的版本后,其他使用旧版本的节点不升级就无法(重新)加入群集。
以
root
用户身份登录要升级的节点,并停止群集堆栈:#
crm cluster stop
升级到 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability 的所需目标版本。要了解各个升级过程的细节,请参见第 29.2.1 节 “SLE HA 和 SLE HA Geo 支持的升级路径”。
在升级后的节点上启动群集堆栈,使该节点重新加入群集:
#
crm cluster start
使下一个节点处于脱机状态,并对此节点重复上述过程。
使用
crm status
或 Hawk2 检查群集状态。如果检测到您的群集节点有不同的 CRM 版本,Hawk2
屏幕还会显示一条警告。
只有在将所有群集节点都升级到最新产品版本之后,才可使用该版本提供的新功能。对于采用混合版本的群集,其在滚动升级期间受支持的时间非常短暂。请在一周内完成滚动升级。
如果检测到您的群集节点有不同的 CRM 版本,Hawk2
屏幕还会显示一条警告。除了就地升级之外,许多客户更喜欢进行全新安装,即使是要升级到下一个服务包时也是如此。下面的过程说明将双节点群集(包含节点 alice 和 bob)升级到下一个服务包 (SP) 的情况:
备份群集配置。下面的列表中显示了至少应备份的文件:
/etc/corosync/corosync.conf /etc/corosync/authkey /etc/sysconfig/sbd /etc/modules-load.d/watchdog.conf /etc/hosts /etc/ntp.conf
根据您的资源,您可能还需要备份以下文件:
/etc/services /etc/passwd /etc/shadow /etc/groups /etc/drbd/* /etc/lvm/lvm.conf /etc/mdadm.conf /etc/mdadm.SID.conf
先从节点 alice 开始。
将节点置于待机模式。这样便能将资源移出节点:
#
crm --wait node standby alice reboot
如果使用
--wait
选项,该命令仅会在群集完成转换并变为空闲状态时返回。reboot
选项可使节点一旦重新上线就已脱离待机模式。尽管reboot
选项的名称是重引导,但只要节点下线后又上线,该选项就会起作用。停止节点 alice 上的群集服务:
#
crm cluster stop
此时,alice 不再有任何资源处于运行状态。升级节点 alice,完成后将其重引导。假定群集服务不会在系统引导时启动。
将步骤 1 中的备份文件复制到原始位置。
将节点 alice 重新加入群集:
#
crm cluster start
检查资源是否正常。
对节点 bob 重复步骤 2。
29.3 更新群集节点上的软件包 #
启动某节点的软件包更新之前,请停止该节点上的群集堆栈,或将该节点置于维护模式,具体取决于群集堆栈是否受影响。有关详细信息,请参见 步骤 1。
如果节点上的群集资源管理器在软件更新期间处于活动状态,可能会导致活动的节点被屏蔽等结果。
在节点上安装任何软件包更新之前,请先确认以下问题:
该更新是否会影响属于 SUSE Linux Enterprise High Availability 的任何软件包?如果
yes
,请先在节点上停止群集堆栈,然后再开始软件更新:#
crm cluster stop
软件包更新操作是否需要重引导计算机?如果
yes
,请先在节点上停止群集堆栈,然后再开始软件更新:#
crm cluster stop
如果不属于上述任何一种情况,则不需要停止群集堆栈。在这种情况下,请先将节点置于维护模式,然后再开始软件更新:
#
crm node maintenance NODE_NAME
有关维护模式的更多细节,请参见第 28.2 节 “用于维护任务的不同选项”。
使用 YaST 或 Zypper 来安装软件包更新。
在成功安装更新后:
启动相应节点上的群集堆栈(如果在执行步骤 1 时已将它停止):
#
crm cluster start
或者去除维护标志,使节点恢复正常模式:
#
crm node ready NODE_NAME
使用
crm status
或 Hawk2 检查群集状态。
29.4 更多信息 #
有关您要升级到的产品的任何更改和新功能的详细信息,请参见其发行说明,所在网址为 https://www.suse.com/releasenotes/。
第 V 部分 附录 #
- A 查错
用户可能会遇到奇怪而不易理解的问题,特别是刚开始尝试使用 High Availability 时。不过,有一些实用程序可用来仔细地观察 High Availability 的内部进程。本章推荐了一些解决方案。
- B 命名约定
本指南针对群集节点和名称、群集资源与约束使用以下命名约定。
- C 群集管理工具(命令行)
SUSE Linux Enterprise High Availability 随附了一套全面的工具,可帮助您通过命令行管理群集。本章主要介绍管理 CIB 中的群集配置和群集资源所需的工具。用于管理资源代理的其他命令行工具或用于调试设置(和查错)的工具在附录 A “查错”中有所介绍。
- D 在没有
root
访问权限的情况下运行群集报告 所有群集节点都必须能通过 SSH 相互访问。
crm report
(用于查错)等工具和 Hawk2 的 要求节点之间通过无口令 SSH 方式来访问,否则它们只能从当前节点收集数据。
A 查错 #
用户可能会遇到奇怪而不易理解的问题,特别是刚开始尝试使用 High Availability 时。不过,有一些实用程序可用来仔细地观察 High Availability 的内部进程。本章推荐了一些解决方案。
A.1 安装和前期阶段的步骤 #
对安装软件包或使群集上线的过程中遇到的问题查错。
- 是否安装了 HA 软件包?
配置和管理群集所需的软件包包含在 SUSE Linux Enterprise High Availability 提供的
High Availability
安装软件集中。按《安装和设置快速入门》中所述,检查每个群集节点上是否安装了 SUSE Linux Enterprise High Availability,并且每台计算机上是否安装了
软件集。- 所有群集节点的初始配置是否相同?
如第 4 章 “使用 YaST 群集模块”中所述,为了能够相互通讯,属于同一个群集的所有节点都需要使用相同的
bindnetaddr
、mcastaddr
和mcastport
。检查所有群集节点的
/etc/corosync/corosync.conf
中配置的通讯通道和选项是否都相同。如果使用加密通讯,请检查是否所有群集节点上都存在
/etc/corosync/authkey
文件。除
corosync.conf
以外的所有nodeid
设置都必须相同;所有节点上的authkey
文件都必须相同。- 防火墙是否允许通过
mcastport
进行通讯? 如果用于群集节点之间通讯的 mcastport 由防火墙阻止,这些节点将无法相互可见。在分别按第 4 章 “使用 YaST 群集模块”或Article “安装和设置快速入门”中所述使用 YaST 或引导脚本执行初始设置时,防火墙设置通常会自动调整。
要确保 mcastport 不被防火墙阻止,请检查每个节点上的防火墙设置。
- 每个群集节点上是否都启动了 Pacemaker 和 Corosync?
通常,启动 Pacemaker 也会启动 Corosync 服务。要检查这两个服务是否在运行,请使用以下命令:
#
crm cluster status
如果它们未运行,请执行以下命令将其启动:
#
crm cluster start
A.2 日志记录 #
- 可以在哪里找到日志文件?
Pacemaker 会将其日志文件写入
/var/log/pacemaker
目录。Pacemaker 的主日志文件是/var/log/pacemaker/pacemaker.log
。如果您找不到日志文件,请检查/etc/sysconfig/pacemaker
(Pacemaker 自己的配置文件)中的日志记录设置。如果该文件中配置了PCMK_logfile
,Pacemaker 会使用此参数定义的路径。如果您需要获得一份显示所有相关日志文件的群集级报告,请参见如何创建包含所有群集节点分析的报告?以了解更多信息。
- 我启用了监控,但为什么日志文件中没有监控操作的任何跟踪信息?
除非发生错误,否则
pacemaker-execd
守护程序不会记录重复的监控操作。记录所有重现的操作会产生太多噪音。因此,只会每小时记录一次重现的监控操作。- 我只收到一条
failed
消息。有可能收到更多信息吗? 在命令中添加
--verbose
参数。如果多次执行该操作,调试输出就会变得更详细。请参见日志记录数据 (sudo journalctl -n
) 以获得有用的提示。- 如何获取所有节点和资源的概述?
使用
crm_mon
命令。下面显示了资源操作的历史记录(选项-o
)和处于不活动状态的资源 (-r
):#
crm_mon -o -r
状态改变时,显示内容会刷新(要取消,请按 Ctrl–C)。示例可能显示如下:
例 A.1︰ 停止的资源 #Last updated: Fri Aug 15 10:42:08 2014 Last change: Fri Aug 15 10:32:19 2014 Stack: corosync Current DC: bob (175704619) - partition with quorum Version: 1.1.12-ad083a8 2 Nodes configured 3 Resources configured Online: [ alice bob ] Full list of resources: my_ipaddress (ocf:heartbeat:Dummy): Started bob my_filesystem (ocf:heartbeat:Dummy): Stopped my_webserver (ocf:heartbeat:Dummy): Stopped Operations: * Node bob: my_ipaddress: migration-threshold=3 + (14) start: rc=0 (ok) + (15) monitor: interval=10000ms rc=0 (ok) * Node alice:
Pacemaker Explained PDF(在 https://www.clusterlabs.org/pacemaker/doc/ 上提供)的 How are OCF Return Codes Interpreted? 部分介绍了三种不同的恢复类型。
- 如何查看日志?
要详细查看群集中的当前活动,请使用以下命令:
#
crm history log [NODE]
将 NODE 替换为您要检查的节点,或将它保留空白。有关更多信息,请参见第 A.5 节 “历史记录”。
A.3 资源 #
- 如何清理我的资源?
使用以下命令:
#
crm resource list
#
crm resource cleanup rscid [node]
如果遗漏此节点,则资源将在所有节点上清除。更多信息可以在第 8.5.2 节 “使用 crmsh 清理群集资源”中找到。
- 如何列出当前已知的资源?
使用命令
crm resource list
可以显示当前资源。- 我配置了一个资源,但是它总是失败。为什么?
要检查 OCF 脚本,请使用
ocf-tester
,例如:ocf-tester -n ip1 -o ip=YOUR_IP_ADDRESS \ /usr/lib/ocf/resource.d/heartbeat/IPaddr
如果有多个参数,请使用
-o
多次。运行crm ra info AGENT
可获取必需参数和可选参数的列表,例如:#
crm ra info ocf:heartbeat:IPaddr
运行 ocf-tester 之前,请确保资源不受群集管理。
- 资源为什么不故障转移,为什么没有错误?
已终止的节点可能会被视为不干净。这样就必须屏蔽它。如果 STONITH 资源无法正常运行或不存在,另一个节点便会等待屏蔽发生。屏蔽超时值通常比较大,因此可能需要一段时间才能看到问题的明显迹象(如果最终出现问题)。
另一种可能的解释是仅仅是不允许资源在此节点上运行。这可能是由于未“清理”过去发生的失败所致。或者可能是先前的管理操作(即,添加了分数为负值的位置约束)所致。例如,使用
crm resource move
命令插入了这样的位置约束。- 我为什么从不知道资源将在何处运行?
如果资源没有位置约束,则其放置取决于(几乎)随机节点选择。建议您始终明确表示资源的首选节点。这并不意味着您需要指定所有资源的位置自选设置。一个自选设置就能满足一组相关(共置)资源的需要。节点自选设置类似如下:
location rsc-prefers-alice rsc 100: alice
A.4 STONITH 和屏蔽 #
- 我的 STONITH 资源为什么不启动?
启动(或启用)操作执行时会检查设备的状态。如果设备未就绪,STONITH 资源便无法启动。
同时,系统会要求 STONITH 插件生成主机列表。如果此列表为空,则运行无法关闭任何节点的 STONITH 资源将毫无意义。运行 STONITH 的主机的名称是从列表中滤除的,因为节点不能自我关闭。
要使用单主机管理设备(如无人值守设备),请务必不要允许 STONITH 资源在应当屏蔽的节点上运行。使用无限负位置节点自选设置(约束)。群集会将 STONITH 资源移到其他可以启动的位置,但不会未通知您就移动。
- 为什么尽管我有 STONITH 资源,却没有发生屏蔽?
每个 STONITH 资源都必须提供主机列表。您可以手动将此列表插入 STONITH 资源配置,也可以从设备自身(例如,从输出名称)检索。这取决于 STONITH 插件的性质。
pacemaker-fenced
使用该列表来查找可以屏蔽目标节点的 STONITH 资源。只有出现在该列表中的节点 STONITH 资源才能关闭(屏蔽)。如果
pacemaker-fenced
在正在运行的 STONITH 资源所提供的任何主机列表中都找不到该节点,它将询问其他节点上的pacemaker-fenced
实例。如果目标节点未显示在其他pacemaker-fenced
实例的主机列表中,则屏蔽请求将以超时在源节点上结束。- 我的 STONITH 资源为什么会偶尔失败?
如果广播流量过大,电源管理设备可能会停止运行。隔开监控操作。如果只是偶尔(希望从不)需要屏蔽,则每隔几小时检查一次设备状态就已足够。
另外,其中的一些设备可能会拒绝同时与多方通讯。如果在群集尝试测试状态时将终端或浏览器会话保持打开状态,则这可能会产生问题。
A.5 历史记录 #
- 如何从发生故障的资源中检索状态信息或日志?
使用
history
命令及其子命令resource
:#
crm history resource NAME1
这只会返回给定资源的完整转换日志。不过,您也可以调查多个资源,在第一个资源名称的后面追加更多的资源名称即可。
如果您遵循了命名约定(请参见附录 B “命名约定”),使用
resource
命令可以更轻松地调查一组资源。例如,以下命令将调查以db
开头的所有原始资源:#
crm history resource db*
查看
/var/cache/crm/history/live/alice/ha-log.txt
中的日志文件。- 如何减少历史输出?
history
命令有两个选项:使用
exclude
使用
timeframe
exclude
命令可让您设置附加的正则表达式用于从日志中排除特定的模式。例如,以下命令会排除所有 SSH、systemd
和内核消息:#
crm history exclude ssh|systemd|kernel.
使用
timeframe
命令可将输出限制为特定的范围。例如,以下命令会显示 8 月 23 日 12:00 到 12:30 的所有事件:#
crm history timeframe "Aug 23 12:00" "Aug 23 12:30"
- 如何存储“会话”以便日后检查?
当您遇到 bug 或者需要进一步检查的事件时,存储所有当前设置的做法非常有用。您可以将存储的文件发送给支持人员,或者使用
bzless
进行查看。例如:crm(live)history#
timeframe "Oct 13 15:00" "Oct 13 16:00"
crm(live)history#
session save tux-test
crm(live)history#
session pack
Report saved in '/root/tux-test.tar.bz2'
A.6 Hawk2 #
- 替换自我签名证书
要避免在首次启动 Hawk2 时收到有关自我签名证书的警告,请将自动创建的证书替换为您自己的证书或官方证书颁发机构 (CA) 签名的证书:
将
/etc/hawk/hawk.key
替换为私用密钥。将
/etc/hawk/hawk.pem
替换为 Hawk2 应当提供的证书。重启动 Hawk2 服务以重新加载新证书:
#
systemctl restart hawk-backend hawk
将文件的所有权更改为
root:haclient
并使文件可被组访问:#
chown root:haclient /etc/hawk/hawk.key /etc/hawk/hawk.pem
#
chmod 640 /etc/hawk/hawk.key /etc/hawk/hawk.pem
A.7 杂项 #
- 如何在所有群集节点上运行命令?
使用
crm cluster run
命令可完成此任务。例如:#
crm cluster run "ls -l /etc/corosync/*.conf"
INFO: [alice] -rw-r--r-- 1 root root 812 Oct 27 15:42 /etc/corosync/corosync.conf INFO: [bob] -rw-r--r-- 1 root root 812 Oct 27 15:42 /etc/corosync/corosync.conf INFO: [charlie] -rw-r--r-- 1 root root 812 Oct 27 15:42 /etc/corosync/corosync.conf默认情况下,指定命令会在群集中的所有节点上运行。或者,您也可以在某个特定节点或特定的一组节点上运行命令:
#
crm cluster run "ls -l /etc/corosync/*.conf" alice bob
- 我的群集状态是什么?
要检查群集的当前状态,请使用程序
crm_mon
或crm
status
。这将显示当前的 DC 以及当前节点已知的所有节点和资源。- 为什么群集的多个节点看不到彼此?
这可能有几个原因:
先查看配置文件
/etc/corosync/corosync.conf
。检查群集中每个节点的多播或单播地址是否相同(在包含interface
键的mcastaddr
部分中查看)。检查您的防火墙设置。
检查您的交换机是否支持多播或单播地址。
检查节点间的连接是否已断开。这通常是错误配置防火墙的结果。这也可能是发生节点分裂情况(此情况下群集会被分割)的原因。
- 为什么不能挂载 OCFS2 设备?
检查日志消息 (
sudo journalctl -n
) 中是否包含下面一行:Jan 12 09:58:55 alice pacemaker-execd: [3487]: info: RA output: [...] ERROR: Could not load ocfs2_stackglue Jan 12 16:04:22 alice modprobe: FATAL: Module ocfs2_stackglue not found.
此例中缺少了内核模块
ocfs2_stackglue.ko
。请根据安装的内核安装软件包ocfs2-kmp-pae
、ocfs2-kmp-default
或ocfs2-kmp-xen
。
A.8 群集报告 #
- 如何创建包含所有群集节点分析的报告?
在 crm 外壳中,可以使用
crm report
创建报告。此工具将会编译:群集范围内的日志文件,
软件包状态,
DLM/OCFS2 状态,
系统信息,
CIB 历史记录,
内核转储报告的分析(如果安装了 debuginfo 软件包)。
通常需要结合以下命令运行
crm report
:#
crm report -f 0:00 -n alice -n bob
该命令会提取主机 alice 和 bob 上从午夜 0 点开始的所有信息,并在当前目录中创建名为
crm_report-DATE.tar.bz2
的*.tar.bz2
存档,例如crm_report-Wed-03-Mar-2012
。如果您只需要特定时间段的信息,请使用-t
选项添加结束时间。警告:去除敏感信息crm report
工具会尝试从 CIB 和 PE 输入文件中去除所有敏感信息,但它并不是万能的。如果您还有更多敏感信息,请通过-p
选项提供其他模式(请参见手册页)。系统不会清理日志文件以及crm_mon
、ccm_tool
和crm_verify
输出。以任何方式共享数据之前,请检查存档并删除不想泄露的所有信息。
使用其他选项自定义命令执行。例如,如果除了
root
和hacluster
之外,另一个用户也拥有访问群集的权限,请使用-u
选项并指定此用户。如果存在非标准 SSH 端口,请使用-X
选项添加该端口。如果需要简化参数,请在配置文件/etc/crm/crm.conf
的report
部分设置默认值。有关详细信息,请参见crm report
的手册页。过程 A.1︰ 使用自定义 SSH 端口生成群集报告 #使用自定义 SSH 端口时,请结合使用
-X
和crm report
来修改客户端的 SSH 端口。例如,如果自定义 SSH 端口为5022
,则使用以下命令:#
crm report -X "-p 5022" [...]
要为
crm report
永久设置自定义 SSH 端口,请启动交互式 crm 外壳:#
crm options
输入以下内容:
crm(live)options#
set core.report_tool_options "-X -oPort=5022"
在
crm report
分析完所有相关日志文件并创建目录(或存档)后,请检查日志文件中有无大写的ERROR
字符串。位于报告顶层目录中的最重要的文件有:analysis.txt
比较在所有节点上都应保持一致的文件。
corosync.txt
包含 Corosync 配置文件的副本。
crm_mon.txt
包含
crm_mon
命令的输出。description.txt
包含您节点上的所有群集软件包版本。另有节点特定的
sysinfo.txt
文件。它会链接到顶层目录。可以使用此文件作为模板来描述您遇到的问题,然后将其发布到 https://github.com/ClusterLabs/crmsh/issues。
members.txt
所有节点的列表
sysinfo.txt
包含所有相关包名称及其版本的列表。此外,还有一个不同于原始 RPM 软件包的配置文件列表。
节点特定的文件将存储在以节点名称命名的子目录中。其中包含相应节点的
/etc
目录副本。
A.9 更多信息 #
有关 Linux 上的高可用性的更多信息(包括配置群集资源以及管理和自定义 High Availability 群集),请参见 https://clusterlabs.org/wiki/Documentation。
B 命名约定 #
本指南针对群集节点和名称、群集资源与约束使用以下命名约定。
- 群集节点
群集节点使用人名:
alice、bob、charlie、doro 和 eris
- 群集站点名称
群集站点按城市命名:
amsterdam、berlin、canberra、dublin、fukuoka、gizeh、hanoi 和 istanbul
- 群集资源
原始资源
无前缀
组
前缀
g-
克隆资源
前缀
cl-
可升级克隆
(以前称为多状态资源)
前缀
ms-
- 限制
顺序约束
前缀
o-
位置约束
前缀
loc-
共置约束
前缀
col-
C 群集管理工具(命令行) #
SUSE Linux Enterprise High Availability 随附了一套全面的工具,可帮助您通过命令行管理群集。本章主要介绍管理 CIB 中的群集配置和群集资源所需的工具。用于管理资源代理的其他命令行工具或用于调试设置(和查错)的工具在附录 A “查错”中有所介绍。
此工具仅供专家使用。通常,crm 外壳 (crmsh) 是推荐的群集管理工具。
以下列表提供了一些与群集管理相关的任务,并简要介绍了完成这些任务所使用的工具:
- 监控群集状态
crm_mon
命令用于监控群集的状态和配置。其输出包括节点数、uname、UUID、状态、群集中配置的资源及其各自的当前状态。crm_mon
的输出可以显示在控制台上或打印到 HTML 文件。如果用户提供了不含状态部分的群集配置文件,crm_mon
会按文件中所指定的方式创建节点和资源概览。有关此工具的用途及命令语法的详细介绍,请参见crm_mon
手册页。- 管理 CIB
cibadmin
命令是用于操作 CIB 的低级管理命令。它可用于转储、更新和修改全部或部分 CIB,删除整个 CIB 或执行其他 CIB 管理操作。有关此工具的用途及命令语法的详细介绍,请参见cibadmin
手册页。- 管理配置更改
crm_diff
命令可帮助您创建和应用 XML 补丁。它对于观察群集配置的两个版本之间的更改或保存这些更改供日后使用cibadmin
来应用它们非常有用。有关此工具的用途及命令语法的详细介绍,请参见crm_diff
手册页。- 操作 CIB 属性
您可以使用
crm_attribute
命令来查询和操作节点属性及 CIB 中使用的群集配置选项。有关此工具的用途及命令语法的详细介绍,请参见crm_attribute
手册页。- 验证群集配置
crm_verify
命令可检查配置数据库 (CIB) 的一致性和其他问题。它可检查包含配置的文件或连接到运行中的群集。它可报告两类问题。错误必须要加以修复,High Availability 软件才能正常工作;而对于警告,则由管理员决定是否要解决。crm_verify
可帮助创建新的或已修改的配置。您可以本地复制运行的群集中的 CIB,编辑它,使用crm_verify
验证它,然后使用cibadmin
使新配置生效。有关此工具的用途及命令语法的详细介绍,请参见crm_verify
手册页。- 管理资源配置
crm_resource
命令可在群集上执行与资源相关的操作。它可以修改已配置资源的定义,启动和停止资源,删除资源或在节点间迁移资源。有关此工具的用途及命令语法的详细介绍,请参见crm_resource
手册页。- 管理资源失败计数
crm_failcount
命令可查询指定节点上每个资源的失败计数。此工具还可用于重置失败计数,以便让资源在它失败次数过多的节点上重新运行。有关此工具的用途及命令语法的详细介绍,请参见crm_failcount
手册页。- 管理节点的待机状态
crm_standby
命令可操作节点的待机属性。备用模式中的所有节点都不再具备主管资源的资格,并且必须移动那里的所有资源。执行维护任务(如内核更新)时,可以使用待机模式。从节点删除待机属性,使之再次成为群集中完全处于活动状态的成员。有关此工具的用途及命令语法的详细介绍,请参见crm_standby
手册页。
D 在没有 root
访问权限的情况下运行群集报告 #
所有群集节点都必须能通过 SSH 相互访问。crm report
(用于查错)等工具和 Hawk2 的 要求节点之间通过无口令 SSH 方式来访问,否则它们只能从当前节点收集数据。
如果您的安全策略不允许进行无口令 root
SSH 登录,则在所有远程节点上以 root
身份运行 crm report
时都会失败。在这种情况下,您仍可以采用以下其中一种方式运行群集报告:
如果群集是由具有
sudo
特权的非 root 用户初始化的,则此用户可以运行群集报告。如果群集是由
root
用户初始化的,您可以创建专用的非 root 用户来运行群集报告。
以下过程说明如何为非 root 用户授予受限权限,让该用户可以使用 sudo
来运行 crm report
,但没有其他 sudo
访问权限。
D.1 为非 root 用户配置受限的 sudo
权限 #
sudo
命令可让普通用户快速变成 root
并发出命令,而无论其是否提供了口令。可向所有 root 级命令或者特定的命令授予 sudo 访问权限。此过程说明如何仅为运行群集报告所需的特定命令配置 sudo
权限。Sudo 通常使用别名来定义整个命令字符串。
要配置 sudo,请使用 visudo
(不是 vi)或 YaST。
要从命令行配置 sudo,必须以 root
身份使用 visudo
编辑 sudoers 文件。使用任何其他编辑器可能会导致语法或文件权限错误,进而阻止 sudo 运行。
没有
sudo
权限的非 root 用户。以下过程使用名为hareport
的示例用户。群集中的所有节点上都存在用户
hareport
。用户
hareport
可以通过无口令 SSH 访问群集中的所有其他节点。
sudo
权限 #以
root
身份登录。要打开
/etc/sudoers
文件,请输入visudo
。查找以下类别:
Host alias specification
、User alias specification
、Cmnd alias specification
和Runas alias specification
。在
/etc/sudoers
中的相应类别中添加以下几项:Host_Alias CLUSTER = alice,bob,charlie 1 User_Alias HA = hareport 2 Cmnd_Alias HA_ALLOWED = /bin/su, /usr/sbin/crm report*3 Runas_Alias R = root 4
主机别名定义 sudo 用户有权在哪个服务器(或特定范围内的服务器)上发出命令。在主机别名中,可以使用 DNS 名称或 IP 地址,或者指定整个网络范围(例如
172.17.12.0/24
)。要限制访问范围,应该仅指定群集节点的主机名。使用用户别名可将多个本地用户帐户添加到单个别名。不过,在此情况下,系统只会使用一个帐户。
命令别名定义该用户可执行的命令。如果您要限制非 root 用户在使用
sudo
时可以访问的数据,命令别名将十分有用。在此情况下,hareport
用户帐户需要访问命令crm report
和su
。runas
别名指定用于运行命令的帐户(在本例中为root
)。搜索以下两行:
Defaults targetpw ALL ALL=(ALL) ALL
由于这两行与我们要创建的设置相冲突,因此请将其禁用:
#Defaults targetpw #ALL ALL=(ALL) ALL
查找
User privilege specification
类别。定义上述别名后,现在可以添加以下规则:HA CLUSTER = (R) NOPASSWD:HA_ALLOWED
NOPASSWORD
选项确保用户hareport
无需提供口令就能执行群集报告。(可选) 如果要允许用户
hareport
使用您的本地 SSH 密钥运行群集报告,请在Defaults specification
类别中添加下行内容。这会保留SSH_AUTH_SOCK
环境变量,SSH 代理转发时需要用到该变量。Defaults!HA_ALLOWED env_keep+=SSH_AUTH_SOCK
以
hareport
用户身份通过ssh -A
登录节点以及使用sudo
运行crm report
时,您的本地 SSH 密钥会传递到该节点以进行身份验证。
必须在群集中的所有节点上指定这项 sudo 配置。无需为 sudo 做出其他更改,并且无需重启动任何服务。
词汇表 #
- AutoYaST #
AutoYaST 是能自动安装一个或多个 SUSE Linux Enterprise 系统而无需用户干预的系统。
- bindnetaddr(绑定网络地址) #
Corosync 管理器应绑定的网络地址。
- boothd(投票间守护程序) #
Geo 群集中每个参与的群集和仲裁方都会运行
boothd
服务。它连接到其他站点上运行的投票间守护程序,并交换连接性细节。- CCM(一致性群集成员资格,consensus cluster membership) #
CCM 确定组成群集的节点并在群集中共享此信息。任何节点或法定票数的新增和丢失都由 CCM 提供。群集的每个节点上都运行 CCM 模块。
- CIB(群集信息库,cluster information base) #
表示全部群集配置和状态(群集选项、节点、资源、约束和彼此之间的关系)。它会以 XML 的格式写入并驻存在内存中。主 CIB 在 DC(指定的协调程序) 上存储和维护,并会复制到其他节点。对 CIB 的常规读写操作通过主 CIB 进行序列化。
- conntrack 工具 #
可与内核内连接跟踪系统交互,以便对 iptables 启用有状态包检测。SUSE Linux Enterprise High Availability 使用它们在群集节点间同步连接状态。
- crmsh #
命令行实用程序 crmsh 可用于管理群集、节点和资源。
有关更多信息,请参见第 5.5 节 “crmsh 简介”。
- CRM(群集资源管理器,cluster resource manager) #
负责协调 High Availability 群集中的所有非本地交互的管理实体。SUSE Linux Enterprise High Availability 使用 Pacemaker 作为 CRM。CRM 是作为
pacemaker-controld
实现的。它与多个组件交互:自身节点和其他节点上的本地资源管理器、非本地 CRM、管理命令、屏蔽功能以及成员资格层。- Csync2 #
可用于在群集中的所有节点间(甚至在 Geo 群集间)复制配置文件的同步工具。
- DC(指定的协调程序) #
DC 是从群集中的所有节点选择出来的。如果当前没有 DC,或者当前的 DC 出于任何原因退出群集,则就会按此方式选择 DC。DC 是群集中唯一可以决定需要在整个群集执行更改(例如节点屏蔽或资源移动)的实体。所有其他节点都从当前 DC 获取他们的配置和资源分配信息。
- DLM(分布式锁管理器,distributed lock manager) #
DLM 协调群集文件系统的磁盘访问和管理文件锁定以提高性能和可用性。
- DRBD #
DRBD® 是为构建高可用性群集而设计的块设备。整个块设备通过专用网络镜像,且视作网络 RAID-1。
- failover #
指资源或节点在某台服务器上出现故障、受影响的资源在另一个节点上启动的情况。
- Geo 群集(分散在不同地理位置的群集,geographically dispersed cluster) #
由多个分布于不同地理位置的站点组成,每个站点一个本地群集。站点通过 IP 通讯。站点之间的故障转移由更高级别的实体投票间协调。Geo 群集需要应对有限网络带宽和高延迟问题。存储异步复制。
- LRM(本地资源管理器,local resource manager) #
本地资源管理器位于每个节点上的 Pacemaker 层与资源层之间。它是作为
pacemaker-execd
守护程序实现的。通过此守护程序,Pacemaker 可以启动、停止和监控资源。- mcastaddr(多播地址) #
Corosync 管理器使用 IP 地址进行多播。IP 地址可以为 IPv4 或 IPv6。
- mcastport(多播端口) #
用于群集通讯的端口。
- metro 群集 #
使用光纤通道连接所有站点、可跨越多个建筑物或数据中心的单个群集。网络延迟通常较低(距离约为 20 英里时,延迟时间不到 5 毫秒)。存储频繁复制(镜像或同步复制)。
- pacemaker-controld(群集控制器守护程序) #
CRM 是作为 pacemaker-controld 守护程序实现的。每个群集节点上都有一个实例。系统会选出一个 pacemaker-controld 实例充当主要实例,以此集中做出所有群集决策。如果选出的 pacemaker-controld 进程(或运行该进程的节点)发生失败,则会建立一个新的进程。
- RA(资源代理,resource agent) #
脚本充当代理来管理资源(例如,启动、停止或监控资源)。SUSE Linux Enterprise High Availability 支持不同类型的资源代理。有关详细信息,请参见 第 6.2 节 “支持的资源代理类别”。
- ReaR(放松与恢复,Relax and Recover) #
创建灾难恢复图像的管理员工具集。
- RRP(冗余环网协议,redundant ring protocol) #
该协议支持使用多个冗余局域网来从部分或整体网络故障中恢复。这样,只要一个网络运行正常,群集通讯就仍可继续。Corosync 支持 Totem Redundant Ring Protocol。
- SBD(STONITH 块设备,STONITH Block Device) #
通过共享块存储(SAN、iSCSI、FCoE 等)进行消息交换来提供节点屏蔽机制。还可以在无磁盘模式下使用。需要在每个节点上安装一个硬件或软件检查包,以确保能真正停止行为异常的节点。
- SFEX(共享磁盘文件排他性,shared disk file exclusiveness) #
SFEX 在 SAN 上提供存储保护。
- SPOF(单一故障点,single point of failure) #
一旦群集中任何组件出现故障,则会导致整个群集出现故障。
- STONITH #
“Shoot the other node in the head”(关闭其他节点)的首字母缩写。它表示一种关闭行为异常的节点以避免其在群集中制造麻烦的屏蔽机制。在 Pacemaker 群集中,节点级别屏蔽的实现为 STONITH。为此,Pacemaker 随附了一个屏蔽子系统
pacemaker-fenced
。- 主动/主动、主动/被动 #
针对服务在节点上如何运行的一种概念。主动-被动方案表示一个或多个服务正在主动节点上运行,而被动节点则等待主动节点出现故障。主动-主动方案表示每个节点既是主动节点同时也是被动节点。例如,该节点正在运行某些服务,但也可以接管其他节点中的其他服务。它相当于 DRBD 概念中的主要/次要节点和双重主要节点。
- 仲裁方 #
在 Geo 群集中有助于达成一致性决定(例如,站点间的资源故障转移)的其他实例。仲裁方是一台以特殊模式运行一个或多个投票间实例的计算机。
- 位置 #
在位置约束情境中,“位置”是指可以运行或不能运行资源的节点。
- 切换 #
根据需要有计划地将服务转移到群集中的其他节点。请参见failover。
- 单播 #
一种将消息发送到单个网络目标的技术。Corosync 支持多播和单播。在 Corosync 中,单播作为 UDP 单播 (UDPU) 实施。
- 多播 #
一种用于网络内一对多通讯的技术,可用于群集通讯。Corosync 支持多播和单播。
- 屏蔽 #
描述了防止隔离的或失败的群集成员访问共享资源的概念。有两类屏蔽:资源级别屏蔽和节点级别屏蔽。资源级别屏蔽可确保对给定资源的排它访问。节点级别屏蔽可彻底防止故障节点访问共享资源,并可防止资源在状态不明的节点上运行。这种屏蔽通常采用一种简单但却粗暴的方式来完成,即重置或关闭节点。
- 并发性违规 #
资源本应只可在群集中的一个节点上运行,但实际上正在多个节点上运行。
- 投票间 #
用于在 Geo 群集的不同站点之间管理故障转移进程的实例。它的目标是让多站点资源在一个且只有一个的站点上保持活动。如果某个群集站点发生故障,则会使用被视为站点间故障转移域的所谓的“票据”来实现。
- 故障转移域 #
经过命名的一组群集节点的子集,有资格在节点出现故障时运行群集服务。
- 本地群集 #
一个位置的单个群集(例如,位于一个数据中心内的所有节点)。网络延迟可以忽略。存储通常由所有节点同步访问。
- 法定票数 #
在群集中,如果群集分区具有多数节点(或投票),则将其定义为具有仲裁(是“具有法定票数的”)。法定票数准确地区分了一个分区。它是算法的组成部分,用于防止多个断开的分区或节点继续运行而导致数据和服务损坏(节点分裂)。法定票数是屏蔽的先决条件,而屏蔽随后确保法定票数确实是唯一的。
- 灾难 #
关键基础设施因自然因素、人为因素、硬件故障或软件 bug 而意外中断。
- 灾难恢复 #
灾难恢复是指在发生灾难后将业务功能恢复到正常、稳定状态的过程。
- 灾难恢复计划 #
在对 IT 基础设施产生最低影响的前提下,从灾难中恢复的策略。
- 现有群集 #
术语“现有群集”指的是任何包括至少一个节点的群集。现有群集具有定义通讯通道的基本 Corosync 配置,但它们不一定已有资源配置。
- 票据 #
Geo 群集中使用的一个组件。票据授予在特定群集站点上运行某些资源的权限。一张票据某个时间内只能由一个站点所拥有。资源可按依赖性绑定到特定票据。仅当站点有定义好的票据时,才会启动相应资源。反之亦然,如果删除了票据,将会自动停止依赖于该票据的资源。
- 策略引擎 (PE) #
策略引擎是作为
pacemaker-schedulerd
守护程序实现的。需要群集转换时,pacemaker-schedulerd
会根据当前状态和配置,计算群集的下一预期状态。它会确定需要安排哪些操作来实现下一种状态。- 群集 #
高性能群集是一组为更快获得结果而共享应用程序负载的计算机(实际或虚拟)。高可用性群集主要用于确保服务的最大可用性。
- 群集分区 #
当一个或多个节点与群集的剩余节点之间的通讯失败时,即会发生群集分区。群集中的各节点被分割成不同分区,但仍然处于活动状态。他们只可与同一分区的节点进行通讯,并不了解未连接的节点。由于无法确认其他分区上节点的丢失,因此会出现节点分裂情况(另请参见节点分裂)。
- 群集堆栈 #
构成群集的全部软件技术和组件。
- 群集站点 #
在 Geo 群集中,群集站点(简称“站点”)是位于同一物理位置的一组节点,它们由 投票间 管理。
- 节点 #
是群集成员并对用户不可见的任何计算机(实际或虚拟)。
- 节点分裂 #
群集节点被分为两个或多个互不了解的组的情况(由于软件或硬件故障)。STONITH 可以防止节点分裂情况对整个群集产生不良影响。也称为“分区的群集”情况。
DRBD 中也使用
split brain
一词,但表示两个节点包含不同的数据。- 负载平衡 #
能让多个服务器参与同一个服务并执行相同任务。
- 资源 #
Pacemaker 已知的任何类型的服务或应用程序。例如,IP 地址、文件系统或数据库。
术语“资源”也适用于 DRBD,表示使用通用连接进行复制的一组块设备。
E GNU licenses #
This appendix contains the GNU Free Documentation License version 1.2.
GNU Free Documentation License #
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
0. PREAMBLE #
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or non-commercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
We have designed this License to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS #
This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
2. VERBATIM COPYING #
You may copy and distribute the Document in any medium, either commercially or non-commercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
3. COPYING IN QUANTITY #
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS #
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
State on the Title page the name of the publisher of the Modified Version, as the publisher.
Preserve all the copyright notices of the Document.
Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
Include an unaltered copy of this License.
Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS #
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
6. COLLECTIONS OF DOCUMENTS #
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS #
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
8. TRANSLATION #
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
9. TERMINATION #
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
10. FUTURE REVISIONS OF THIS LICENSE #
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See https://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
ADDENDUM: How to use this License for your documents #
Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this:
with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.