SUSE Linux Enterprise High Availability Extension 11 SP4

高可用性指南

出版日期 2015-07-14

作者列表Tanja Roth, Thomas Schraitle

版权所有 © 2006–2015 SUSE LLC 和贡献者。保留所有权利。

根据 GNU 自由文档许可证 (GNU Free Documentation License) 版本 1.2 或(根据您的选择)版本 1.3 中的条款,在此授予您复制、分发和/或修改本文档的许可权限;本版权声明和许可证附带不可变部分。许可证版本 1.2 的副本包含在题为GNU 自由文档许可证的部分。

有关 SUSE 或 Novell 商标,请参见 Novell 商标和服务标记列表 http://www.novell.com/company/legal/trademarks/tmlist.html。所有第三方商标均属其各自所有者的财产。商标符号(®、™ 等)代表 SUSE 或 Novell 商标;星号 (*) 代表第三方商标。

本指南力求涵盖所有细节。但这并不确保本指南准确无误。SUSE LLC 及其附属公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。


目录

关于本指南
1. 反馈
2. 文档约定
3. 关于本手册的制作
I. 安装和设置
1. 产品概述
1.1. 作为外接式附件/扩展提供
1.2. 主要特征
1.3. 优势
1.4. 群集配置:储存
1.5. 体系结构
2. 系统要求和建议
2.1. 硬件要求
2.2. 软件要求
2.3. 储存要求
2.4. 其他要求和建议
3. 安装和基本设置
3.1. 术语定义
3.2. 概述
3.3. 作为外接式附件安装
3.4. 自动群集设置 (sleha-bootstrap)
3.5. 手动群集设置 (YaST)
3.6. 使用 AutoYaST 进行大批量部署
II. 配置和管理
4. 配置和管理基础
4.1. 全局群集选项
4.2. 群集资源
4.3. 资源监视
4.4. 资源约束
4.5. 管理远程主机上的服务
4.6. 监视系统运行状况
4.7. 维护模式
4.8. 更多信息
5. 配置和管理群集资源(Web 界面)
5.1. Hawk - 概述
5.2. 配置全局群集选项
5.3. 配置群集资源
5.4. 管理群集资源
5.5. 监视多个群集
5.6. 用于地域群集的 Hawk 功能
5.7. 查错
6. 配置和管理群集资源 (GUI)
6.1. Pacemaker GUI - 概述
6.2. 配置全局群集选项
6.3. 配置群集资源
6.4. 管理群集资源
7. 配置和管理群集资源(命令行)
7.1. crmsh - 概述
7.2. 配置全局群集选项
7.3. 配置群集资源
7.4. 管理群集资源
7.5. 设置独立于 cib.xml 的密码
7.6. 检索历史记录信息
7.7. 更多信息
8. 添加或修改资源代理
8.1. STONITH 代理
8.2. 写入 OCF 资源代理
8.3. OCF 返回码和故障恢复
9. 屏障和 STONITH
9.1. 屏蔽分类
9.2. 节点级别屏蔽
9.3. STONITH 资源和配置
9.4. 监视屏蔽设备
9.5. 特殊的屏蔽设备
9.6. 基本建议
9.7. 更多信息
10. 访问控制列表
10.1. 要求和先决条件
10.2. 在群集中启用 ACL
10.3. ACL 的基本原理
10.4. 使用 Pacemaker GUI 配置 ACL
10.5. 使用 Hawk 配置 ACL
10.6. 使用 crmsh 配置 ACL
11. 网络设备绑定
11.1. 使用 YaST 配置联接设备
11.2. 联接从属的热插拔
11.3. 更多信息
12. Linux 虚拟服务器的负载平衡
12.1. 概念概述
12.2. 使用 YaST 配置 IP 负载平衡
12.3. 其他设置
12.4. 更多信息
13. 地域群集(多站点群集)
III. 储存和数据复制
14. OCFS2
14.1. 功能和优点
14.2. OCFS2 包和管理实用程序
14.3. 配置 OCFS2 服务和 STONITH 资源
14.4. 创建 OCFS2 卷
14.5. 装入 OCFS2 卷
14.6. 在 OCFS2 文件系统上使用定额
14.7. 更多信息
15. DRBD
15.1. 概念概述
15.2. 安装 DRBD 服务
15.3. 配置 DRBD 服务
15.4. 测试 DRBD 服务
15.5. 调整 DRBD
15.6. DRBD 查错
15.7. 更多信息
16. 群集式逻辑卷管理器 (cLVM)
16.1. 概念概述
16.2. cLVM 配置
16.3. 显式配置合格的 LVM2 设备
16.4. 更多信息
17. 储存保护
17.1. 基于储存区的屏蔽
17.2. 确保储存区的排它激活
17.3. 更多信息
18. Samba 群集
18.1. 概念概述
18.2. 基本配置
18.3. 加入 Active Directory 域
18.4. 调试和测试群集 Samba
18.5. 更多信息
19. 使用 Rear 实现灾难恢复
19.1. 概念概述
19.2. 设置 Rear 和您的备份解决方案
19.3. 创建恢复安装系统
19.4. 测试恢复过程
19.5. 从灾难中恢复
19.6. 更多信息
IV. 附录
20. 查错
20.1. 安装及初始步骤
20.2. 日志记录
20.3. 资源
20.4. STONITH 和屏蔽
20.5. 杂项
20.6. 更多信息
A. 命名约定
B. 设置简单测试资源的示例
B.1. 使用 GUI 配置资源
B.2. 手动配置资源
C. OCFS2 和 cLVM 的示例配置
D. 群集管理工具
E. 升级群集和更新软件包
E.1. 术语
E.2. 将群集升级到最新产品版本
E.3. 更新群集节点上的软件包
E.4. 更多信息
F. 新增功能
F.1. 版本 10 SP3 到版本 11
F.2. 版本 11 到版本 11 SP1
F.3. 版本 11 SP1 到版本 11 SP2
F.4. 版本 11 SP2 到版本 11 SP3
F.5. 版本 11 SP3 到版本 11 SP4
术语
G. GNU 许可证
G.1. GNU Free Documentation License

插图清单

1.1. 三台服务器的群集
1.2. 三台服务器的群集(其中一台服务器出现故障后)
1.3. 典型的光纤通道群集配置
1.4. 典型的 iSCSI 群集配置
1.5. 典型的不含共享储存的群集配置
1.6. 体系结构
3.1. YaST 群集模块 - 概述
3.2. YaST 群集 - 多路广播配置
3.3. YaST 群集 - 单路广播配置
3.4. YaST 群集 - 安全性
3.5. YaST 群集 - Csync2
3.6. YaST 群集 - conntrackd
3.7. YaST 群集 - 服务
4.1. 组资源
5.1. Hawk - 群集状态(摘要视图)
5.2. Hawk - 群集图表
5.3. Hawk - 群集配置
5.4. Hawk - 设置向导
5.5. Hawk - 基元资源
5.6. Hawk - 资源模板
5.7. Hawk - 位置约束
5.8. Hawk - 共置约束
5.9. Hawk - 查看节点的容量值
5.10. Hawk - 资源组
5.11. Hawk - 克隆资源
5.12. 查看资源的细节
5.13. Hawk - 历史记录报告
5.14. Hawk 历史记录报告 - 转换图
5.15. Hawk - 使用注入的事件的模拟器
5.16. Hawk - 处于最终状态的模拟器
5.17. Hawk - 群集仪表板
6.1. 连接群集
6.2. Pacemaker GUI - 主窗口
6.3. Pacemaker GUI - 约束
6.4. 节点容量配置示例
6.5. 资源容量配置示例
6.6. 查看资源的失败计数
6.7. Pacemaker GUI - 组
6.8. Pacemaker GUI - 管理
10.1. Hawk - 向用户指派角色或规则
12.1. YaST IP 负载平衡 - 全局参数
12.2. YaST IP 负载平衡 - 虚拟服务
15.1. DRBD 在 Linux 中的位置
15.2. 资源配置
16.1. 设置使用 cLVM 的 iSCSI
18.1. CTDB 群集的结构

表格清单

4.1. 原始资源选项
4.2. 资源操作属性
8.1. 故障恢复类型
8.2. OCF 返回代码
10.1. Operator 角色 - 访问类型和 XPath 表达式
14.1. OCFS2 实用程序
14.2. 重要的 OCFS2 参数
15.1. DRBD RPM 包

范例清单

4.1. Web 服务器的资源组
4.2. 用于位置约束的资源集
4.3. 共置资源链
4.4. 有序资源链
4.5. 以资源集表示的有序资源链
4.6. 迁移阈值 - 流程
4.7. 负载平衡放置配置示例
4.8. 为 Nagios 插件配置资源
9.1. IBM RSA 无人值守设备的配置
9.2. UPS 屏蔽设备的配置
9.3. Kdump 设备的配置
10.1. XML 格式群集配置摘录
12.1. 简单的 ldirectord 配置
17.1. 使用 SBD 作为 STONITH 设备的群集计时
19.1. 使用 NFS 服务器储存文件备份
19.2. 使用 EMC NetWorker 等第三方备份工具
20.1. 已停止的资源
C.1. OCFS2 和 cLVM 的群集配置

关于本指南

SUSE® Linux Enterprise High Availability 是一款采用开放源代码群集技术的的集成套件,能让您的企业实施高度可用的物理和虚拟 Linux 群集。为了快速有效地进行配置和管理,High Availability Extension 包含一个图形用户界面 (GUI) 和一个命令行界面 (CLI),此外还随附 HA Web Konsole (Hawk),便于您通过 Web 界面管理 Linux 群集。

本指南适用于需要设置、配置和维护 High Availability (HA) 群集的管理员。它详细介绍了这两种界面(GUI 和 CLI),以帮助管理员选择与执行关键任务的需要匹配的相应工具。

本指南分为以下部分:

安装和设置

开始安装和配置群集之前,先熟悉群集的基础知识和体系结构,了解其关键功能和优点的概况。执行下一步之前,要先了解必须满足哪些软硬件要求以及做好哪些准备工作。使用 YaST 安装 HA 群集并进行基本设置。

配置和管理

使用图形用户界面 (Pacemaker GUI)、Web 界面 (HA Web Konsole) 或命令行界面(crm 外壳)添加、配置和管理群集资源。为避免未授权访问群集配置,请定义角色并为角色指派一些用户,以细化访问控制。了解如何利用负载平衡和屏障。如果您考虑编写自己的资源代理或修改现有的资源代理,请了解一些有关如何创建不同类型的资源代理的背景信息。

储存和数据复制

SUSE Linux Enterprise High Availability Extension 附带了群集感知文件系统和卷管理器:OCFS2 和群集式逻辑卷管理器 (cLVM)。如需复制数据,可使用 DRBD* 将高可用性服务的数据从群集的活动节点镜像到其备用节点。此外,群集 Samba 服务器还可为异构环境提供 High Availability 解决方案。

附录

列出自上次发布以来 High Availability 的新增功能和行为变化。了解如何将群集迁移到最近的发行版,并找到设置简单测试资源的示例。

本手册中的许多章节包含到附加文档资源的链接。 其中包括系统上提供的附加文档以及因特网上提供的文档。

有关该产品可用文档的概述和最新文档更新,请参见 http://www.suse.com/doc/

1. 反馈

提供了多种反馈渠道:

Bug 和增强请求

有关产品可用的服务和支持选项,请参见 http://www.suse.com/support/

要报告产品组件的 bug,请从 http://www.suse.com/support/ 登录 Novell Customer Center,然后选择我的支持+服务请求

用户意见

我们希望收到您对本手册和本产品中包含的其他文档的意见和建议。请使用联机文档每页底部的“用户注释”功能或转到 http://www.suse.com/doc/feedback.html 并在此处输入注释。

邮件

如有对本产品文档的反馈,也可以发送邮件至 doc-team@suse.de。请确保反馈中含有文档标题、产品版本和文档发布日期。要报告错误或给出增强建议,请提供问题的简要说明并指出相应章节编号和页码(或 URL)。

2. 文档约定

以下是本手册中使用的版式约定:

  • /etc/passwd:目录名称和文件名

  • placeholder:将 placeholder 替换为实际值

  • PATH:环境变量 PATH

  • ls--help:命令、选项和参数

  • user:用户和组

  • AltAlt+F1:按键或组合键;这些键以大写形式显示,如在键盘上一样

  • 文件文件+另存为:菜单项,按钮

  • ►amd64 em64t: 本段仅与体系结构 amd64em64tipf 相关。箭头标记文本块的开始位置和结束位置。

  • 跳舞的企鹅企鹅一章,↑其他手册):此内容参考自其他手册中的一章。

3. 关于本手册的制作

本书用 Novdoc(DocBook 的子集,请参见 http://www.docbook.org)编写。XML 源文件用 xmllint 校验、用 xsltproc 处理,并用 Norman Walsh 的样式表的自定义版本转换为 XSL-FO。最终的 PDF 由 RenderX 通过 XEP 排版。

部分 I. 安装和设置

第 1 章产品概述

摘要

SUSE® Linux Enterprise High Availability Extension 是一个开放源代码群集技术的集成套件,可让您实现高度可用的物理和虚拟 Linux 群集,并排除单一故障点。它可确保关键网络资源的高可用性和可管理性,这些网络资源包括数据、应用程序和服务。因此,它有助于维持业务连续性、保护数据完整性及减少 Linux 关键任务工作负荷的计划外停机时间。

它随附提供必需的监视、消息交换和群集资源管理功能(支持对独立管理的群集资源进行故障转移、故障回复和迁移(负载平衡))。

本章介绍 High Availability Extension 的主要产品功能和优点。您将在本章中找到多个示例群集并了解组成群集的组件。最后一节概述了体系结构,描述了群集内的各体系结构层和进程。

有关 High Availability 群集环境中使用的一些通用术语的解释,请参见术语

1.1. 作为外接式附件/扩展提供

High Availability Extension 是以 SUSE Linux Enterprise Server 11 SP4 的外接式附件的形式提供的。对于地理位置分散的群集(地域群集)的支持将作为 High Availability Extension 的独立扩展提供,即 Geo Clustering for SUSE Linux Enterprise High Availability Extension。

1.2. 主要特征

SUSE® Linux Enterprise High Availability Extension 可帮助您保障和管理网络资源的可用性。以下各节重点说明一些关键功能:

1.2.1. 各种群集方案

High Availability Extension 支持下列方案:

  • 主动/主动配置

  • 主动/被动配置:N+1、N+M、N 到 1 和 N 到 M

  • 混合物理和虚拟群集,支持将虚拟服务器和物理服务器群集在一起。这可提高服务可用性和资源利用率。

  • 本地群集

  • 城域群集(延伸的本地群集)

  • 地域群集(地理位置分散的群集)

群集最多可包含 32 个 Linux 服务器。如果群集内的一台服务器发生故障,则群集内的任何其他服务器均可重启动此服务器上的资源(应用程序、服务、IP 地址和文件系统)。

1.2.2. 灵活性

High Availability Extension 附带了 Corosync/OpenAIS 讯息交换和成员资格层以及 Pacemaker 群集资源管理器。使用 Pacemaker,管理员可以持续监视其资源的运行状况和状态、管理依赖性以及根据高度可配置的规则和策略自动停止和启动服务。High Availability Extension 允许您根据适合您组织的特定应用程序和硬件基础体系结构对群集进行定制。基于时间的配置使服务可以在特定时间自动迁移回已修复的节点。

1.2.3. 储存和数据复制

借助 High Availability Extension,您可以根据需要动态地指派和重指派服务器储存。它支持光纤通道或 iSCSI 储存区域网络 (SAN)。它还支持共享磁盘系统,但这不是必需的。SUSE Linux Enterprise High Availability Extension 还附带有群集感知文件系统、卷管理器 (OCFS2) 和群集式逻辑卷管理器 (cLVM)。如需复制数据,可使用 DRBD* 将高可用性服务的数据从群集的活动节点镜像到其备用节点。此外,SUSE Linux Enterprise High Availability Extension 还支持 CTDB(Clustered Trivial Database,群集普通数据库),这是一种 Samba 群集技术。

1.2.4. 支持虚拟环境

SUSE Linux Enterprise High Availability Extension 支持物理和虚拟 Linux 服务器的混合群集。SUSE Linux Enterprise Server 11 SP4 附带了 Xen(开放源代码虚拟化超级管理程序)和 KVM(基于内核的虚拟机,是适用于 Linux 的基于硬件虚拟化扩展的虚拟化软件)。High Availability Extension 中的群集资源管理器能够识别、监视和管理正在虚拟服务器上运行的服务以及正在物理服务器上运行的服务。Guest 系统可作为服务由群集管理。

1.2.5. 支持本地、城域和地域群集

SUSE Linux Enterprise High Availability Extension 已扩展,可以支持下列不同的地理方案。对于地理位置分散的群集(地域群集)的支持将作为 High Availability Extension 的独立扩展提供,即 Geo Clustering for SUSE Linux Enterprise High Availability Extension。

本地群集

一个位置的单个群集(例如,位于一个数据中心内的所有节点)。该群集使用多路广播或单路广播实现节点之间的通讯,并在内部管理故障转移。网络延迟可以忽略。储存通常由所有节点同步访问。

城域群集

使用光纤通道连接所有站点、可跨越多个建筑物或数据中心的单个群集。该群集使用多路广播或单路广播实现节点之间的通讯,并在内部管理故障转移。网络延迟通常很低(约 20 英里的距离 <5 毫秒)。储存频繁复制(镜像或同步复制)。

地域群集(多站点群集)

多个地理位置分散的站点,每个站点一个本地群集。站点通过 IP 通讯。站点间的故障转移由更高级别实体协调。地域群集需要应对有限网络带宽和高延迟问题。储存异步复制。

各个群集节点之间的地理距离越大,可能影响群集所提供服务的高可用性的因素就越多。网络延迟、有限带宽以及对储存的访问权是远距离群集面临的主要难题。

1.2.6. 资源代理

SUSE Linux Enterprise High Availability Extension 包含大量资源代理来管理资源,如 Apache、IPv4 和 IPv6 等。它还为通用的第三方应用程序(例如 IBM WebSphere Application Server)提供了资源代理。如需产品随附的 Open Cluster Framework (OCF) 资源代理的概述,请根据第 7.1.3 节 “显示有关 OCF 资源代理的信息”中所述使用 crm ra 命令。

1.2.7. 用户友好的管理工具

High Availability Extension 附带了一组功能强大的工具,可用于群集的基本安装和设置及其有效配置和管理:

YaST

常规系统安装和管理的图形用户界面。可用于在 SUSE Linux Enterprise Server 基础上安装 High Availability Extension,如第 3.3 节 “作为外接式附件安装”中所述。YaST 在 High Availability 类别中还提供以下模块,可帮助您配置群集或各个组件:

Pacemaker GUI

可安装的图形用户界面,用于轻松配置和管理群集。指引您完成资源的创建和配置,并可用于执行启动、停止或迁移资源之类的管理任务。有关详细信息,请参见第 6 章 配置和管理群集资源 (GUI)

HA Web Konsole (Hawk)

基于 Web 的用户界面,使用此界面可从非 Linux 计算机管理 Linux 群集。如果系统未提供图形用户界面,它还是理想的解决方案。指引您完成资源的创建和配置,并可用于执行启动、停止或迁移资源之类的管理任务。有关详细信息,请参见第 5 章 配置和管理群集资源(Web 界面)

crm 外壳

强大的统一命令行界面,用于配置资源和执行所有监视或管理任务。有关详细信息,请参见第 7 章 配置和管理群集资源(命令行)

1.3. 优势

High Availability Extension 允许您将最多 32 台 Linux 服务器配置为一个高度可用的群集(HA 群集),在群集中可以将资源动态地切换或移动到任何服务器上。可以将资源配置为在发生服务器故障时自动进行迁移,或手动移动资源以对硬件查错或平衡工作负载。

High Availability Extension 通过商品组件提供高可用性。通过将应用程序和操作合并到群集中降低了成本。High Availability Extension 还可让您集中管理整个群集并调整资源以满足不断变化的工作负载要求(这样就手动地实现了群集的负载平衡)。允许群集的多个(两个以上)节点共享一个热备份也节约了成本。

一个同样重要的好处是潜在地减少了计划外服务中断及用于软件和硬件维护和升级的计划内中断。

实施群集的理由包括:

  • 提高可用性

  • 改善性能

  • 降低操作成本

  • 可伸缩性

  • 灾难恢复

  • 数据保护

  • 服务器合并

  • 储存合并

通过在共享磁盘子系统上实施 RAID 可获得共享磁盘容错。

以下方案说明了 High Availability Extension 具备的一些优点。

示例群集方案

假设您配置了一个包含三台服务器的群集,并在群集内的每台服务器上安装了 Web 服务器。群集内的每台服务器都主管两个网站。每个网站的全部数据、图形和 Web 页面内容都储存在一个连接到群集中每台服务器的共享磁盘子系统上。下图说明了该系统的结构。

图 1.1. 三台服务器的群集

三台服务器的群集

在群集的正常工作状态下,每台服务器都与群集内的其他服务器持续通讯,并对所有已注册的资源进行定期巡回检测以检测故障。

假设 Web 服务器 1 出现硬件或软件故障,而依赖此 Web 服务器访问因特网、收发电子邮件和获取信息的用户失去了连接。下图说明了当 Web 服务器 1 出现故障时,资源的移动情况。

图 1.2. 三台服务器的群集(其中一台服务器出现故障后)

三台服务器的群集(其中一台服务器出现故障后)

网站 A 移至 Web 服务器 2,网站 B 移至 Web 服务器 3。IP 地址和证书也移至 Web 服务器 2 和 Web 服务器 3。

在配置群集时,您决定了在出现故障的情况下,每台 Web 服务器上的网站将移至哪里。在上例中,您已配置将网站 A 移至 Web 服务器 2,将网站 B 移至 Web 服务器 3。这样,曾由 Web 服务器 1 处理的工作负荷继续存在且平均分配给剩余的群集成员。

如果 Web 服务器 1 发生故障,则 High Availability Extension 软件会执行下列操作:

  • 检测到故障,并与 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 将导致一段时间的中断,因此 High Availability Extension 也允许您将迁移推迟到某个将极少或不会造成服务中断的时段。这两种选择都各有优缺点。

High Availability Extension 还提供资源迁移功能。可以根据系统管理的需要将应用程序、网站等资源移动到群集中的其他服务器。

例如,您可以手动将网站 A 或网站 B 从 Web 服务器 1 移至群集内的其他任何一台服务器。此操作的用例包括,对 Web 服务器 1 进行升级或定期维护,或者提高网站的性能或可访问性。

1.4. 群集配置:储存

High Availability Extension 的群集配置可能包括共享磁盘子系统,也可能并不包括。共享磁盘子系统可通过高速光纤通道卡、电缆和交换机连接,也可配置为使用 iSCSI。如果服务器出现故障,群集中的另一个指定服务器将自动装入之前在故障服务器上装入的共享磁盘目录。这样,网络用户就能继续访问共享磁盘子系统上的目录。

[Important]带 cLVM 的共享磁盘子系统

使用带 cLVM 的共享磁盘子系统时,此子系统必须连接到群集中所有需要访问此子系统的服务器。

典型的资源包括数据、应用程序和服务。下图显示了一个典型的光纤通道群集配置的结构。

图 1.3. 典型的光纤通道群集配置

典型的光纤通道群集配置

虽然光纤通道提供的性能最佳,但也可以将群集配置为使用 iSCSI。iSCSI 是除光纤通道外的另一种选择,可用于创建低成本的储存区域网络 (SAN)。下图显示了一个典型的 iSCSI 群集配置。

图 1.4. 典型的 iSCSI 群集配置

典型的 iSCSI 群集配置

虽然大多数群集都包括共享磁盘子系统,但也可以创建不含共享磁盘子系统的群集。下图显示了一个不含共享磁盘子系统的群集。

图 1.5. 典型的不含共享储存的群集配置

典型的不含共享储存的群集配置

1.5. 体系结构

本部分简要介绍 High Availability Extension 的体系结构。它提供了有关体系结构组件的信息,并描述了这些组件是如何协同工作的。

1.5.1. 体系结构层

High Availability Extension 采用分层式体系结构。图 1.6 “体系结构”说明了不同的层及其相关的组件。

图 1.6. 体系结构

体系结构

1.5.1.1. 消息交换和基础结构层

主层或第一层是讯息交换/基础结构层,也称为 Corosync/OpenAIS 层。此层包含了发送含有我在线信号的消息及其他信息的组件。High Availability Extension 的程序即位于此讯息交换/基础结构层。

1.5.1.2. 资源分配层

下一层是资源分配层。此层最复杂,它包含以下组件:

群集资源管理器 (CRM)

在资源分配层中执行的每个操作都要经过群集资源管理器。如果资源分配层的其他组件(或更高层中的组件)需要通讯,则它们通过本地 CRM 进行。在每个节点上,CRM 都会维护群集信息库 (CIB)

群集信息库 (CIB)

群集信息库是整个群集配置和当前状态在内存中的 XML 表示。它包含所有群集选项、节点、资源、约束及其之间的关系的定义。CIB 还将更新同步到所有群集节点。群集中有一个主 CIB,由指定协调器 (DC)进行维护。所有其他节点都包含 CIB 复本。

指定协调器 (DC)

群集中的一个 CRM 会选为 DC。DC 是群集中唯一可以决定需要在整个群集执行更改(例如节点屏蔽或资源移动)的实体。DC 同时也是用于保存 CIB 主副本的节点。所有其他节点都从当前 DC 获取他们的配置和资源分配信息。DC 是在成员资格更改后从群集的所有节点中选出的。

策略引擎 (PE)

只要指定协调程序需要进行群集范围的更改(对新 CIB 作出反应),策略引擎就会根据群集的当前状态和配置计算其下一个状态。PE 还生成一个转换图,包含用于达到下一个群集状态的(资源)操作和依赖性的列表。PE 始终在 DC 上运行。

本地资源管理器 (LRM)

LRM 代表 CRM 调用本地资源代理(请参见第 1.5.1.3 节 “资源层”)。因此它可以执行启动/停止/监视操作并将结果报告给 CRM。LRM 是其本地节点上所有资源相关信息的权威来源。

1.5.1.3. 资源层

最高层是资源层。资源层包括一个或多个资源代理 (RA)。资源代理是已写入的用来启动、停止和监视某种服务(资源)的程序(通常是外壳脚本)。资源代理仅由 LRM 调用。第三方可将他们自己的代理放在文件系统中定义的位置,这样就为各自的软件提供了现成群集集成。

1.5.2. 处理流程

SUSE Linux Enterprise High Availability Extension 将 Pacemaker 用作 CRM。CRM 作为守护程序执行 (crmd),它在每个群集节点上都有一个实例。Pacemaker 通过选出一个 crmd 实例来充当主实例,实现所有群集决策制定的集中化。如果选定的 crmd 过程(或它所在的节点)出现故障,则将建立一个新的过程。

在每个节点上保留了一个 CIB,它反映了群集的配置和群集中所有资源的当前状态。CIB 的内容会在整个群集中自动保持同步。

群集中执行的许多操作都将导致整个群集的更改。这些操作包括添加或删除群集资源、更改资源约束等等。了解执行这样的操作时群集中会发生的状况是很重要的。

例如,假设您要添加一个群集 IP 地址资源。为此,您可以使用一种命令行工具或 Web 界面来修改 CIB。您不必在 DC 上执行此操作,可以使用群集中任何节点上的任何工具,此操作会被传送到 DC 上。然后 DC 将把此 CIB 更改复制到所有群集节点。

根据 CIB 中的信息,PE 便计算群集的理想状态及如何达到此状态,并将指令列表传递给 DC。DC 通过消息交换/基础结构层发送命令,这些命令将由其他节点上的 crmd 对等体接收。每个 crmd 使用它的 LRM(作为 lrmd 实现)执行资源修改。lrmd 不是群集感知的,它直接与资源代理(脚本)交互。

所有同级节点将操作的结果报告给 DC。一旦 DC 得出所有必需操作在群集中都已成功执行的结论,群集将回到空闲状态并等待后续事件。如果有操作未按计划执行,则会再次调用 PE,CIB 中将记录新信息。

在某些情况下,可能需要关闭节点以保护共享数据或完成资源恢复。为此,Pacemaker 附带了一个屏蔽子系统,stonithd。STONITH 是 Shoot The Other Node In The Head 的首字母缩写,通常通过一个远程电源开关实施。在 Pacemaker 中,STONITH 设备已建模为资源(并在 CIB 中配置),以便轻松监视这些设备是否出现故障。而 stonithd 则负责了解 STONITH 拓扑,以便其客户端只需请求受屏蔽的节点,由它来执行其余操作。

第 2 章系统要求和建议

摘要

下面的小节说明了系统要求以及 SUSE® Linux Enterprise High Availability Extension 的一些先决条件。此外,还提供了有关群集设置的建议。

2.1. 硬件要求

以下列表指出了基于 SUSE® Linux Enterprise High Availability Extension 的群集的硬件要求。这些要求表示最低硬件配置。根据群集的用途,可能会需要其他硬件。

  • 安装了第 2.2 节 “软件要求”中指定的软件的 1 到 32 台 Linux 服务器。服务器不要求有相同的硬件(内存、磁盘空间等),但它们必须具有相同的体系结构。不支持跨平台群集。

  • 每个群集节点至少有两个 TCP/IP 通讯媒体。群集节点使用多路广播或单路广播进行通讯,因此网络设备必须能支持您采用的通讯方式。通讯媒体应支持 100 Mbit/s 或更高的数据传送速度。最好是根据第 11 章 网络设备绑定所述绑定以太网通道。或者,为 Corosync 中的冗余通讯通道使用第二个接口。另请参见过程 3.7, “定义冗余通讯通道”

  • 可选:一个共享磁盘子系统,连接到群集中所有需要访问它的服务器。请参见 第 2.3 节 “储存要求”

  • 一个 STONITH 机制。STONITH 设备是群集用于重置被认为出现故障或表现奇怪的节点的电源开关。这是确保挂起节点或者表面上已死机的节点不会发生数据损坏的唯一可靠方法。

2.2. 软件要求

请确保满足以下软件要求:

  • 所有将要加入群集的节点上都安装了 SUSE® Linux Enterprise Server 11 SP4(包含所有可用的联机更新)。

  • 所有将要加入群集的节点上都安装了 SUSE Linux Enterprise High Availability Extension 11 SP4(包含所有可用的联机更新)。

  • 如果您要使用地域群集,请确保所有将要加入群集的节点上都安装了 Geo Clustering for SUSE Linux Enterprise High Availability Extension 11 SP4(包含所有可用的联机更新)。

2.3. 储存要求

为确保数据的高可用性,我们建议您为群集设置共享磁盘系统(储存区域网络,简称 SAN)。如果使用共享磁盘子系统,请确保符合以下要求:

  • 根据制造商的说明正确设置共享磁盘系统并且共享磁盘系统可正确运行。

  • 共享磁盘系统中包含的磁盘应配置为使用镜像或 RAID,来为共享磁盘系统增加容错性。建议使用基于硬件的 RAID。所有配置都不支持基于主机的软件 RAID。

  • 如果准备对共享磁盘系统访问使用 iSCSI,则请确保正确配置了 iSCSI 启动器和目标。

  • 使用 DRBD* 实施在两台计算机间分发数据的镜像 RAID 系统时,请确保只访问 DRBD 提供的设备,切勿访问备份设备。请与群集的剩余节点使用相同(绑定)的 NIC 来调整此处提供的冗余。

2.4. 其他要求和建议

为了实现受支持且有用的高可用性设置,请考虑以下建议:

群集节点数

每个群集必须至少包含两个群集节点。

[Important]奇数个数的群集节点

强烈建议使用奇数个数的群集节点,并且最少有三个节点。

群集需要使用法定票数来确保服务处于运行状态。因此,三节点群集只能容许每次有一个节点发生故障,而五节点群集可以容许两个节点发生故障,以此类推。

STONITH
[Important]无 STONITH 资源不受支持

不支持无 STONITH 资源的群集。

为了实现受支持的高可用性设置,请确保满足以下条件:

  • 高可用性群集中的每个节点必须至少有一个 STONITH 设备(通常是一个硬件)。我们强烈建议为每个节点提供多个 STONITH 设备,除非使用了 SBD。SBD 可让您在群集中启用 STONITH 和屏蔽而无需外部电源开关,但它需要使用共享储存。

  • 全局群集选项 stonith-enabledstartup-fencing 必须设置为 true。一旦更改这些选项,您将会失去支持。

冗余通讯路径

要实现受支持的高可用性设置,您需要通过两个或更多冗余路径建立群集通讯。这可通过以下方式实现:

如果可能,请选择网络设备绑定。

时间同步

群集节点应同步到群集外的 NTP 服务器。 有关详细信息,请参见 http://www.suse.com/doc/ 上的《SUSE Linux Enterprise Server 11 SP4 管理指南》。请参见“使用 NTP 同步时间”一章。

如果节点未同步,将难以分析日志文件和群集报告。

NIC 名称

必须在所有节点上都相同。

主机名和 IP 地址

编辑群集中每台服务器上的 /etc/hosts 文件,以配置主机名解析。确保群集通讯速度不受任何 DNS 影响:

  • 使用静态 IP 地址。

  • 在此文件中以完全限定的主机名和简短主机名列出所有群集节点。群集成员必须能够按名称找到彼此。如果名称不可用,则将无法进行群集内部通讯。

有关详细信息,请参见 http://www.suse.com/doc 上的《SUSE Linux Enterprise Server 11 SP4 管理指南》。请参见“基本联网知识”一章中的“使用 YaST 配置网络连接”>“配置主机名和 DNS”小节。

储存要求

有些服务可能需要使用共享储存。有关要求,请参见第 2.3 节 “储存要求”。您也可以使用外部 NFS 共享或 DRBD。如果使用外部 NFS 共享,必须能够从所有群集节点通过冗余通讯路径可靠地访问该共享。请参见冗余通讯路径

如果使用 SBD 作为 STONITH 设备,则共享储存还需要满足其他要求。有关细节,请参见 http://linux-ha.org/wiki/SBD_Fencing 上的“Requirements”(要求)部分。

SSH

所有群集节点都必须能通过 SSH 相互访问。hb_reportcrm_report(用于查错)和 Hawk 的历史记录浏览器等工具要求节点之间采用无口令 SSH 访问方式,否则它们只能从当前节点收集数据。如果使用非标准 SSH 端口,请使用 -X 选项(参见手册页)。例如,如果 SSH 端口为 3479,请使用以下命令调用 hb_report

root # hb_report -X "-p 3479" [...]
[Note]合规要求

如果无密码 SSH 访问不能满足合规要求,可以对 hb_report 使用以下变通方法:

创建不用密码登录的用户(例如,使用公共密钥进行身份验证)。为该用户配置 sudo,这样无需 root 密码。从命令行使用 -u 选项启动 hb_report,以指定用户的名称。有关更多信息,请参见 hb_report 手册页。

对于历史记录浏览器,目前还没有备选方法可进行无密码登录。

第 3 章安装和基本设置

摘要

本章说明如何从头开始安装并设置 SUSE® Linux Enterprise High Availability Extension 11 SP4。选择自动设置或手动设置。自动设置可让您在数分钟内启动并运行一个群集(可于稍后再调整任何选项),而手动设置则可让您一开始就设置好各个选项。

如果要迁移运行较早版本 SUSE Linux Enterprise High Availability Extension 的群集,或者更新属于运行中群集的节点上的软件包,请参见附录 E, 升级群集和更新软件包一章。

3.1. 术语定义

本章使用了若干术语,其定义如下。

现有群集

术语现有群集指的是任何包括至少一个节点的群集。现有群集具有定义通讯通道的基本 Corosync 配置,但它们不一定已有资源配置。

多路广播

一种用于网络内一对多通讯的技术,可用于群集通讯。Corosync 支持多路广播和单路广播。如果多路广播不符合公司 IT 策略,则改为使用单路广播。

[Note]交换机和多路广播

如果要使用多路广播进行群集通讯,请确保交换机支持多路广播。

多路广播地址 (mcastaddr)

Corosync 管理器使用 IP 地址进行多路广播。IP 地址可以为 IPv4 或 IPv6。如果使用 IPv6 网络,则必须指定节点 ID。可以使用专用网内的任何多路广播地址。

多路广播端口 (mcastport)

用于群集通讯的端口。Corosync 使用两个端口:一个用于接收多路广播的指定 mcastport 和一个用于发送多路广播的 mcastport -1

单路广播

一种将消息发送到单个网络目标的技术。Corosync 支持多路广播和单路广播。在 Corosync 中,单路广播作为 UDP 单路广播 (UDPU) 实施。

绑定网络地址 (bindnetaddr)

Corosync 管理器应绑定的网络地址。为方便在群集间共享配置文件,OpenAIS 使用网络接口网络掩码来仅屏蔽用于路由网络的地址位。例如,如果本地接口是 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

[Note]所有节点的网络地址

由于所有节点将使用相同的 Corosync 配置,请务必使用 bindnetaddr 之类的网络地址,而不是特定网络接口地址。

Redundant Ring Protocol (RRP)

该协议支持使用多个冗余局域网来从部分或整体网络故障中恢复。这样,只要一个网络运行正常,群集通讯就仍可继续。Corosync 支持 Totem Redundant Ring Protocol。所有参与节点上都强制实施逻辑令牌传递环以确保可靠且有序地传递消息。只有拥有令牌的节点才允许广播消息。有关更多信息,请参见 http://www.rcsc.de/pdf/icdcs02.pdf

在 Corosync 中定义了冗余通讯通道后,使用 RRP 告知群集如何使用这些接口。RRP 可具有三种模式 (rrp_mode):

  • 如果设置为 active,则 Corosync 将主动使用这两个接口。

  • 如果设置为 passive,Corosync 将选择性地通过可用网络发送消息。

  • 如果设置为 none,将会禁用 RRP。

Csync2

可用于在群集中的所有节点间(甚至在地域群集间)复制配置文件的同步工具。Csync2 可处理排入同步组的任意数量的主机。每个同步组都有自己的成员主机列表及其包含/排除模式,包含/排除模式定义了在同步组中应同步哪些文件。同步组、属于每个组的主机名以及每个组的包含/排除规则均在 Csync2 配置文件 /etc/csync2/csync2.cfg 中指定。

对于身份验证,Csync2 使用 IP 地址和同步组中的预共享密钥。需要为每个同步组生成一个密钥文件,并将其复制到所有组成员。

有关 Csync2 的更多信息,请参见 http://oss.linbit.com/csync2/paper.pdf

conntrack 工具

可与内核内连接跟踪系统交互,以便对 iptables 启用有状态包检测。High Availability Extension 使用此工具来同步群集节点之间的连接状态。有关详细信息,请参见 http://conntrack-tools.netfilter.org/

AutoYaST

AutoYaST 是能自动安装一个或多个 SUSE Linux Enterprise 系统而无需用户干预的系统。在 SUSE Linux Enterprise 上,可创建一个包含安装和配置数据的 AutoYaST 配置文件。此配置文件将告知 AutoYaST 要安装的内容以及如何配置已安装系统,以最终获得一个现成可用的系统。然后可使用此配置文件以各种方式(例如,克隆现有群集节点)进行大批量部署。

有关在各种情况下如何使用 AutoYaST 的详细说明,请参见 http://www.suse.com/doc 上的《SUSE Linux Enterprise 11 SP4 部署指南》。请参见自动安装一章。

3.2. 概述

需要执行以下基本步骤来进行安装和初始群集设置。

  1. 作为外接式附件安装

    使用 YaST 安装此软件包。也可以使用 zypper 从命令行安装:

    root # zypper in -t pattern ha_sles
  2. 初始群集设置:

    在将属于群集的所有节点上安装软件后,需要执行以下步骤来初始配置群集。

    1. 定义通讯通道

    2. 可选: 定义身份验证设置

    3. 将配置传送到所有节点。虽然仅在一个节点上执行 Csync2 的配置,但需要在所有节点上启动服务 Csync2 和 xinetd

    4. 可选: 同步群集节点间的连接状态

    5. 配置服务

    6. 使群集联机。需要在所有节点上启动 OpenAIS/Corosync 服务。

可以自动(使用引导脚本)或手动(使用 YaST 群集模块或从命令行)执行群集设置步骤。

还可使用这两种设置方法的组合,例如:使用 YaST 群集设置一个节点,然后使用 sleha-join 集成更多节点。

还可使用 AutoYaST 克隆现有节点以进行大批量部署。克隆节点会安装相同的包,并具有相同的系统配置。有关细节,请参见第 3.6 节 “使用 AutoYaST 进行大批量部署”

3.3. 作为外接式附件安装

使用 High Availability Extension 配置和管理群集所需的包包含在 High Availability 安装模式中。只有作为 SUSE® Linux Enterprise Server 的外接式附件安装 SUSE Linux Enterprise High Availability Extension 后,此模式才可用。有关如何安装外接式附件产品的信息,请参见 http://www.suse.com/doc 上的《SUSE Linux Enterprise 11 SP4 部署指南》。请参见“安装外接式附件产品”一章。

过程 3.1. 安装 High Availability 模式

  1. root 用户身份启动 YaST 并选择软件+软件管理

    或者,以 root 用户身份使用 yast2 sw_single 从命令行启动 YaST 模块。

  2. 过滤器列表中选择模式,然后在模式列表中激活 High Availability 模式。

  3. 单击接受开始安装包。

    [Note]在所有参与节点上安装软件包

    高可用性群集所需的软件包会自动复制到群集节点。

  4. 在将包含在群集中的所有计算机上安装 High Availability 模式。

    如果不想在将要加入群集的所有节点上手动安装 SUSE Linux Enterprise Server 11 SP4SUSE Linux Enterprise High Availability Extension 11 SP4,可以使用 AutoYaST 克隆现有节点。有关更多信息,请参考第 3.6 节 “使用 AutoYaST 进行大批量部署”

3.4. 自动群集设置 (sleha-bootstrap)

sleha-bootstrap 包提供了启动并运行单节点群集、加入其他节点并从现有群集中删除节点所需的所有功能:

自动设置第一个节点

使用 sleha-init,定义群集通讯所需的基本参数并(可选)设置 STONITH 机制来保护共享储存区。这将为您提供一个运行中的单节点群集。

向现有群集添加节点

使用 sleha-join,向群集添加更多节点。

从现有群集中删除节点

使用 sleha-remove,从现有群集中删除节点。

所有命令都只需最少的时间和手动干预就可执行引导脚本。用于初始化和加入节点的引导脚本会在防火墙中自动打开进行群集通讯所需的端口。该配置将写入 /etc/sysconfig/SuSEfirewall2.d/services/cluster。在引导过程中设置的任何选项都可稍后使用 YaST 群集模块进行修改。

开始自动设置之前,确保使参与群集的所有节点都满足以下先决条件:

先决条件

过程 3.2. 自动设置第一个节点

sleha-init 命令检查 NTP 的配置并指引您完成群集通讯层 (Corosync) 的配置以及(可选)SBD 的配置来保护共享储存区。按照以下步骤执行操作。有关详细信息,请参见 sleha-init 手册页。

  1. root 用户身份登录到要用作群集节点的物理机或虚拟机。

  2. 通过执行以下命令启动引导脚本

    root # sleha-init

    如果 NTP 未配置为在引导时启动,将显示一条消息。

    如果仍要继续,脚本将自动为 SSH 访问和 Csync2 同步工具生成密钥,并启动这两者所需的服务。

  3. 配置群集通讯层 (Corosync):

    1. 输入要绑定的网络地址。默认情况下,脚本将建议使用网络地址 eth0。也可以输入其他网络地址,例如地址 bond0

    2. 输入多路广播地址。脚本将建议使用可用作默认值的随机地址。

    3. 输入多路广播端口。脚本建议使用 5405 作为默认值。

  4. 要配置 SBD(可选),请输入要用于 SBD 的块设备分区的永久路径。该路径必须在群集中的所有节点中都一致。

    最后,脚本将启动 OpenAIS 服务以使单节点群集联机,并启用 Web 管理接口 Hawk。要用于 Hawk 的 URL 将显示在屏幕上。

  5. 有关设置过程的任何细节,请查看 /var/log/sleha-bootstrap.log

现在必须有一个运行中的单节点群集。使用 crm status 检查群集状态:

root # crm status
   Last updated: Thu Jul  3 11:04:10 2014
   Last change: Thu Jul  3 10:58:43 2014
   Current DC: alice (175704363) - partition with quorum
   1 Nodes configured
   0 Resources configured
      
   Online: [ alice ]
[Important]安全密码

引导过程会创建一个名为 hacluster、密码为 linux 的 Linux 用户。需要以该用户身份登录到 Hawk。尽快用安全密码替换默认密码:

root # passwd hacluster

过程 3.3. 向现有群集添加节点

如果有一个群集启动并正在运行(包括一个或多个节点),则使用 sleha-join 引导脚本添加更多群集节点。该脚本只需访问一个现有群集节点即可在当前计算机上自动完成基本设置。按照以下步骤执行操作。有关详细信息,请参见 sleha-join 手册页。

如果已使用 YaST 群集模块配置现有群集节点,请确保在运行 sleha-join 之前满足了以下先决条件:

如果已通过 Hawk 登录到第一个节点,则可遵照群集状态中的更改并在 Web 界面中查看已激活的资源。

  1. root 用户身份登录到将要加入群集的物理机或虚拟机。

  2. 通过执行以下命令启动引导脚本:

    root # sleha-join

    如果 NTP 未配置为在引导时启动,将显示一条消息。

  3. 如果仍要继续,系统将提示您输入现有节点的 IP 地址。输入 IP 地址。

  4. 如果尚未配置两台计算机之间的无密码 SSH 访问,系统还将提示您输入现有节点的 root 密码。

    登录到指定节点后,脚本将复制 Corosync 配置、配置 SSH 和 Csync2,并使当前计算机作为新群集节点联机。除此之外,还将启动 Hawk 所需的服务。如果已为 OCFS2 配置共享储存区,还将自动为 OCFS2 文件系统创建安装点目录。

  5. 对要添加到群集中的所有计算机重复上述步骤。

  6. 有关过程细节,请查看 /var/log/sleha-bootstrap.log

使用 crm status 检查群集状态。如果成功添加了另一个节点,输出将如下所示:

root # crm status
   Last updated: Thu Jul  3 11:07:10 2014
   Last change: Thu Jul  3 10:58:43 2014
   Current DC: alice (175704363) - partition with quorum
   2 Nodes configured
   0 Resources configured
   
   Online: [ alice bob ]
[Important]检查 no-quorum-policy

添加所有节点后,检查是否需要调整全局群集选项中的 no-quorum-policy。这对双节点群集尤为重要。有关更多信息,请参见第 4.1.2 节 “选项 no-quorum-policy

过程 3.4. 从现有群集中删除节点

如果有一个启动并正在运行的群集(至少包括两个节点),则可以使用 sleha-remove 引导脚本从该群集中删除单个节点。您需要知道要从群集中去除的节点的 IP 地址或主机名。按照以下步骤执行操作。有关详细信息,请参见 sleha-remove 手册页。

  1. root 用户身份登录其中一个群集节点。

  2. 通过执行以下命令启动引导脚本:

    root # sleha-remove -c IP_ADDR_OR_HOSTNAME

    该脚本会启用 sshd、停止所指定节点上的 OpenAIS 服务并传播要在其余节点之间使用 Csync2 同步的文件。

    如果您指定了主机名,但无法访问要去除的节点(或该主机名无法解析),脚本将通知您,并询问是否仍要去除该节点。如果您指定了 IP 地址,但无法访问该节点,该脚本将要求您输入主机名并确认是否仍要去除该节点。

  3. 要删除更多节点,请重复上面的步骤。

  4. 有关过程细节,请查看 /var/log/sleha-bootstrap.log

如果日后要重新添加已删除的节点,可以使用 sleha-join 来添加。有关详细信息,请参见过程 3.3, “向现有群集添加节点”

过程 3.5. 从计算机中去除 High Availability Extension 软件

要从您不再需要用作群集节点的计算机中去除 High Availability Extension 软件,请执行以下操作。

  1. 停止群集服务:

    root # rcopenais stop
  2. 去除 High Availability Extension 外接式附件:

    root # zypper rm -t products sle-hae

3.5. 手动群集设置 (YaST)

有关初始设置所有步骤的概述,请参见第 3.2 节 “概述”

3.5.1. YaST 群集模块

以下各部分将指引您使用 YaST 群集模块完成每个设置步骤。要访问它,请以 root 用户身份启动 YaST,并选择高可用性+群集。也可以使用 yast2 cluster 从命令行启动模块。

如果是首次启动群集模块,它会显示向导,指引您完成进行基本设置所需的所有步骤。否则,请单击左侧面板上的类别,以访问每个步骤的配置选项。

图 3.1. YaST 群集模块 - 概述

YaST 群集模块 - 概述

请注意,YaST 群集模块中的一些选项仅应用于当前节点,而其他选项可自动传送到所有节点。可在以下各部分中找到有关此配置的详细信息。

3.5.2. 定义通讯通道

为实现群集节点间的成功通讯,请定义至少一个通讯通道。

[Important]冗余通讯路径

强烈建议通过两个或更多冗余路径设置群集通讯。这可通过以下方式实现:

如果可能,请选择网络设备绑定。

过程 3.6. 定义第一个通讯通道

对于群集节点间的通讯,请使用多路广播 (UDP) 或单路广播 (UDPU)。

  1. 在 YaST 群集模块中,切换到通讯通道类别。

  2. 使用多路广播:

    1. 传输协议设为 UDP

    2. 定义绑定网络地址。将此值设置为要用于群集多路广播的子网。

    3. 定义多路广播地址

    4. 定义多路广播端口

      使用上面输入的值,您已为群集定义一个通讯通道。在多路广播模式下,将对所有群集节点使用相同的 bindnetaddrmcastaddrmcastport。通过使用相同的多路广播地址,群集中的所有节点都将知晓彼此。对于不同的群集,请使用不同的多路广播地址。

      图 3.2. YaST 群集 - 多路广播配置

      YaST 群集 - 多路广播配置

  3. 使用单路广播:

    1. 传输协议设为 UDPU

    2. 定义绑定网络地址。将此值设置为要用于群集单路广播的子网。

    3. 定义多路广播端口

    4. 对于单路广播通讯,Corosync 需要知道群集中所有节点的 IP 地址。对于将要加入群集的每个节点,单击添加并输入以下细节:

      • IP 地址

      • 冗余 IP 地址(仅当在 Corosync 中使用了第二个通讯通道时才需要指定)

      • 节点 ID(仅当禁用了自动生成节点 ID 选项时才需要指定)

      要修改或删除群集成员的任何地址,请使用编辑删除按钮。

      图 3.3. YaST 群集 - 单路广播配置

      YaST 群集 - 单路广播配置

  4. 默认情况下会启用自动生成节点 ID 选项。如果您使用的是 IPv4 地址,则节点 ID 是可选的;但如果使用 IPv6 地址,则必须指定节点 ID。要为每个群集节点自动生成唯一 ID(与手动为每个节点指定 ID 相比,这种做法较不容易出错),请让此选项保持启用。

  5. 如果修改了现有群集的任何选项,请确认更改并关闭群集模块。YaST 会将此配置写入 /etc/corosync/corosync.conf

  6. 如果需要,可如下所述定义另一个通讯通道。或单击下一步并继续过程 3.8, “启用安全性身份验证”

过程 3.7. 定义冗余通讯通道

如果由于任何原因不能使用网络设备绑定,第二个最佳选择就是在 Corosync 中定义冗余通讯通道(次环)。这样就可使用两个物理上分隔的网络进行通讯。如果一个网络发生故障,群集节点仍可通过另一个网络进行通讯。

[Important]冗余环和 /etc/hosts

如果配置了多个环,则每个节点都可具有多个 IP 地址。这需要在所有节点的 /etc/hosts 文件中反映出来。

  1. 在 YaST 群集模块中,切换到通讯通道类别。

  2. 请激活冗余通道。冗余通道必须使用与所定义的第一个通讯通道相同的协议。

  3. 如果使用多路广播,则定义冗余通道的绑定网络地址多路广播地址多路广播端口

    如果使用单路广播,则定义绑定网络地址多路广播端口并输入将属于群集的所有节点的 IP 地址。

    现在,您已在 Corosync 中定义另一个通讯通道,它将形成次令牌传递环。在 /etc/corosync/corosync.conf 中,主环(配置的第一个通道)和次环(冗余通道)的环号分别为 01

  4. 要告知 Corosync 如何以及何时使用其他通道,请选择要使用的 rrp_modeactivepassive)。有关模式的更多信息,请参见Redundant Ring Protocol (RRP)或单击帮助。一旦使用 RRP,将使用流控制传送协议 (SCTP)(而非 TCP)进行节点间通讯。High Availability Extension 会监视当前环的状态,并在故障后自动重新启用冗余环。也可以使用 corosync-cfgtool 手动检查环状态。使用 -h 查看可用选项。

    如果只定义了一个通讯通道,rrp_mode 将自动禁用(值 none)。

  5. 如果修改了现有群集的任何选项,请确认更改并关闭群集模块。YaST 会将此配置写入 /etc/corosync/corosync.conf

  6. 有关进一步群集配置,请单击下一步并继续第 3.5.3 节 “定义身份验证设置”

可在 /etc/corosync/corosync.conf.example 中找到 UDP 设置的示例文件。可在 /etc/corosync/corosync.conf.example.udpu 中找到 UDPU 设置的示例。

3.5.3. 定义身份验证设置

下一步是为群集定义身份验证设置。可使用需要共享机密来保护和验证消息的 HMAC/SHA1 身份验证。指定的身份验证密钥(密码)将用于群集中的所有节点。

过程 3.8. 启用安全性身份验证

  1. 在 YaST 群集模块中,切换到安全性类别。

  2. 激活启用安全身份验证

  3. 对于新创建的群集,请单击生成身份验证密钥文件。将创建身份验证密钥并将其写入 /etc/corosync/authkey

    图 3.4. YaST 群集 - 安全性

    YaST 群集 - 安全性

    如果希望当前计算机加入现有群集,则不用生成新的密钥文件。而是将 /etc/corosync/authkey 从一个节点复制到当前计算机(手动或使用 Csync2 皆可)。

  4. 如果修改了现有群集的任何选项,请确认更改并关闭群集模块。YaST 会将此配置写入 /etc/corosync/corosync.conf

  5. 有关进一步群集配置,请单击下一步并继续第 3.5.4 节 “将配置传送到所有节点”

3.5.4. 将配置传送到所有节点

如果不想将生成的配置文件手动复制到所有节点,可使用 csync2 工具在群集中的所有节点间进行复制。

这需要以下基本步骤:

Csync2 将帮助您跟踪配置更改,并在群集节点之间保持文件同步。

  • 可以定义对操作至关重要的文件列表。

  • 可以显示这些文件的更改(对于其他群集节点)。

  • 可以使用单个命令同步配置的文件。

  • 使用 ~/.bash_logout 中的一个简单外壳脚本,您可以在从系统注销之前获得更改未同步的提醒。

http://oss.linbit.com/csync2/http://oss.linbit.com/csync2/paper.pdf 上提供了有关 Csync2 的详细信息。

过程 3.9. 使用 YaST 配置 Csync2

  1. 在 YaST 群集模块中,切换到 Csync2 类别。

  2. 要指定同步组,请在同步主机组中单击添加,然后输入群集中所有节点的本地主机名。对于每个节点,必须使用 hostname 命令返回的确切字符串。

  3. 单击生成预共享密钥以创建同步组的密钥文件。密钥文件将写入 /etc/csync2/key_hagroup。创建后,必须将其手动复制到群集的所有成员。

  4. 要使用通常需要在所有节点间同步的文件填充同步文件列表,请单击添加建议的文件

    图 3.5. YaST 群集 - Csync2

    YaST 群集 - Csync2

  5. 如果要从待同步的文件列表编辑添加删除文件,请使用相应按钮。必须为每个文件输入绝对路径名。

  6. 通过单击打开 Csync2 激活 Csync2。这将执行 chkconfig csync2,以在引导时自动启动 Csync2。

  7. 如果修改了现有群集的任何选项,请确认更改并关闭群集模块。YaST 随即将 Csync2 配置写入 /etc/csync2/csync2.cfg。要立即启动同步过程,请继续过程 3.10, “使用 Csync2 同步配置文件”

  8. 有关进一步群集配置,请单击下一步并继续第 3.5.5 节 “同步群集节点间的连接状态”

过程 3.10. 使用 Csync2 同步配置文件

要使用 Csync2 成功同步文件,请确保满足以下先决条件:

  • 同一 Csync2 配置在所有节点上均可用。如过程 3.9, “使用 YaST 配置 Csync2”所述配置后,将文件 /etc/csync2/csync2.cfg 手动复制到所有节点。建议在要使用 Csync2 同步的文件列表中包括此文件。

  • 将执行步骤 3 时在一个节点上生成的 /etc/csync2/key_hagroup 文件复制到群集中的所有节点。它是 Csync2 在进行身份验证时需要使用的文件。但是,请不要在其他节点上重新生成该文件,因为所有节点上的文件都必须相同。

  • Csync2 和 xinetd 必须正在所有节点上运行。

    [Note]引导时启动服务

    在所有节点上执行以下命令,以便在引导时自动启动这两个服务并立即启动 xinetd

    root # chkconfig csync2 on
    chkconfig xinetd on
    rcxinetd start
  1. 在要其复制配置的节点上,执行以下命令:

    root # 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.
  2. 如果确信当前节点上的文件版本是最佳版本,可以通过强制使用此文件并重新同步来解决冲突:

    root # csync2 -f /etc/corosync/corosync.conf
    csync2 -x

有关 Csync2 选项的更多信息,请运行 csync2 -help

[Note]在任何更改后推送同步

Csync2 仅推送更改。它会在节点间连续同步文件。

每次更新需要同步的文件时,都必须将更改推送到其他节点:对已更改的节点运行 csync2 -xv。如果对未更改文件的任何其他节点运行此命令,则不会执行任何操作。

3.5.5. 同步群集节点间的连接状态

要对 iptables 启用有状态包检测,请配置并使用 conntrack 工具。

  1. 使用 YaST 配置 conntrackd

  2. conntrackd 配置一个资源(类:ocf,提供程序:heartbeat)。如果使用 Hawk 添加资源,则使用 Hawk 推荐的默认值。

配置 conntrack 工具后,可使用这些工具来Linux 虚拟服务器的负载平衡

过程 3.11. 使用 YaST 配置 conntrackd

使用 YaST 群集模块配置用户空间 conntrackd。这需要未用于其他通讯通道的专用网络接口。守护程序可随后通过资源代理启动。

  1. 在 YaST 群集模块中,切换到配置 conntrackd 类别。

  2. 选择专用接口来同步连接状态。会自动检测所选接口的 IPv4 地址并显示在 YaST 中。该地址必须已经配置并且必须支持多路广播。

  3. 定义要用于同步连接状态的多路广播地址

  4. 组号中,定义要将连接状态同步到其中的组的数字 ID。

  5. 单击生成 /etc/conntrackd/conntrackd.conf 来创建 conntrackd 的配置文件。

  6. 如果修改了现有群集的任何选项,请确认更改并关闭群集模块。

  7. 有关进一步群集配置,请单击下一步并继续第 3.5.6 节 “配置服务”

图 3.6. YaST 群集 - conntrackd

YaST 群集 - conntrackd

3.5.6. 配置服务

在 YaST 群集模块中,定义是否在引导节点时启动其上的特定服务。也可使用模块手动启动和停止服务。为使群集节点联机并启动群集资源管理器,OpenAIS 必须作为服务运行。

过程 3.12. 启用群集服务

  1. 在 YaST 群集模块中,切换到服务类别。

  2. 要在每次引导此群集节点时启动 OpenAIS,请在引导组中选择相应选项。如果在引导组中选择,则必须在每次引导此节点时手动启动 OpenAIS。要手动启动 OpenAIS,请使用 rcopenais start 命令。

    [Note]OpenAIS 的 No-Start-on-Boot 参数

    一般而言,尽管在引导时禁用群集服务(包括其他启动/停止脚本)有时可能会损坏群集配置,但是,在引导时无限制地启用群集配置也有可能会在屏蔽方面造成不利的后果。

    要调整这种局面,请在 /etc/sysconfig/openais 中插入 START_ON_BOOT 参数。设置 START_ON_BOOT=No 将防止 OpenAIS 服务在引导时启动(这样,您便可以在需要启动它时手动启动)。默认值为 START_ON_BOOT=Yes

  3. 如果要使用 Pacemaker GUI 配置、管理和监视群集资源,请激活启用 mgmtd。GUI 需要此守护程序。

  4. 要立即启动或停止 OpenAIS,请单击相应按钮。

  5. 要在防火墙中打开所需的端口以在当前计算机上进行群集通讯,请激活打开防火墙中的端口。该配置将写入 /etc/sysconfig/SuSEfirewall2.d/services/cluster

  6. 如果修改了现有群集节点的任何选项,请确认更改并关闭群集模块。请注意,该配置仅应用于当前计算机,而不是所有群集节点。

    如果已经使用 YaST 群集模块专门执行初始群集设置,则现在就已完成基本配置步骤。进行第 3.5.7 节 “使群集联机”

    图 3.7. YaST 群集 - 服务

    YaST 群集 - 服务

3.5.7. 使群集联机

完成初始群集配置后,在每个群集节点上启动 OpenAIS/Corosync 服务,以使堆栈联机:

过程 3.13. 启动 OpenAIS/Corosync 并检查状态

  1. 登录到现有节点。

  2. 检查服务是否已在运行。

    root # rcopenais status

    如果未在运行,则立即启动 OpenAIS/Corosync:

    root # rcopenais start
  3. 对每个群集节点重复上述步骤。

  4. 在某个节点上,使用 crm status 命令检查群集状态。如果所有节点都联机,则输出应类似于如下内容:

    root # crm status
          Last updated: Thu Jul  3 11:07:10 2014
          Last change: Thu Jul  3 10:58:43 2014
          Current DC: alice (175704363) - partition with quorum
          2 Nodes configured
          0 Resources configured
          
          Online: [ alice bob ]

    此输出表示群集资源管理器已启动,可以管理资源了。

完成基本配置且节点联机后,可以开始使用 crm 外壳、Pacemaker GUI 或 HA Web Konsole 等群集管理工具配置群集资源。有关更多信息,请参考以下章节。

3.6. 使用 AutoYaST 进行大批量部署

以下过程适合用于部署作为已存在节点的克隆的群集节点。克隆节点会安装相同的包,并具有相同的系统配置。

过程 3.14. 使用 AutoYaST 克隆群集节点

[Important]相同硬件

此方案假设您要将 SUSE Linux Enterprise High Availability Extension 11 SP4 部署到一组具有相同硬件配置的计算机上。

如果需要在不同硬件上部署群集节点,请参见《SUSE Linux Enterprise 11 SP4 部署指南》的“自动安装”一章中的“基于规则的自动安装”一节,该文档的网址为 http://www.suse.com/doc

  1. 确保已正确安装和配置要克隆的节点。有关细节,请分别参见第 3.3 节 “作为外接式附件安装”以及第 3.4 节 “自动群集设置 (sleha-bootstrap)”第 3.5 节 “手动群集设置 (YaST)”

  2. 按照《SUSE Linux Enterprise 11 SP4 部署指南》中的概要说明进行简单的大批量安装。其中包括以下基本步骤:

    1. 创建 AutoYaST 配置文件。使用 AutoYaST GUI 基于现有系统配置创建和修改配置文件。在 AutoYaST 中选择 High Availability 模块并单击克隆按钮。如果需要,调整其他模块中的配置,并将生成的控制文件另存为 XML 格式的文件。

    2. 确定 AutoYaST 配置文件的来源以及要传递到其他节点的安装例程的参数。

    3. 确定 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability Extension 安装数据的来源。

    4. 确定并设置自动安装的引导方案。

    5. 通过手动添加参数或创建 info 文件,将命令行传递到安装例程。

    6. 启动并监视自动安装进程。

成功安装克隆节点后,执行以下步骤将克隆节点加入群集中:

过程 3.15. 使克隆节点处于联机状态

  1. 第 3.5.4 节 “将配置传送到所有节点”中所述使用 Csync2 将密钥配置文件从已配置的节点传送到克隆节点。

  2. 要使节点联机,请如第 3.5.7 节 “使群集联机”中所述在克隆的节点上启动 OpenAIS 服务。

现在克隆节点将加入群集,因为 /etc/corosync/corosync.conf 文件已通过 Csync2 应用到克隆节点。CIB 将在群集节点间自动同步。

部分 II. 配置和管理

目录

4. 配置和管理基础
4.1. 全局群集选项
4.2. 群集资源
4.3. 资源监视
4.4. 资源约束
4.5. 管理远程主机上的服务
4.6. 监视系统运行状况
4.7. 维护模式
4.8. 更多信息
5. 配置和管理群集资源(Web 界面)
5.1. Hawk - 概述
5.2. 配置全局群集选项
5.3. 配置群集资源
5.4. 管理群集资源
5.5. 监视多个群集
5.6. 用于地域群集的 Hawk 功能
5.7. 查错
6. 配置和管理群集资源 (GUI)
6.1. Pacemaker GUI - 概述
6.2. 配置全局群集选项
6.3. 配置群集资源
6.4. 管理群集资源
7. 配置和管理群集资源(命令行)
7.1. crmsh - 概述
7.2. 配置全局群集选项
7.3. 配置群集资源
7.4. 管理群集资源
7.5. 设置独立于 cib.xml 的密码
7.6. 检索历史记录信息
7.7. 更多信息
8. 添加或修改资源代理
8.1. STONITH 代理
8.2. 写入 OCF 资源代理
8.3. OCF 返回码和故障恢复
9. 屏障和 STONITH
9.1. 屏蔽分类
9.2. 节点级别屏蔽
9.3. STONITH 资源和配置
9.4. 监视屏蔽设备
9.5. 特殊的屏蔽设备
9.6. 基本建议
9.7. 更多信息
10. 访问控制列表
10.1. 要求和先决条件
10.2. 在群集中启用 ACL
10.3. ACL 的基本原理
10.4. 使用 Pacemaker GUI 配置 ACL
10.5. 使用 Hawk 配置 ACL
10.6. 使用 crmsh 配置 ACL
11. 网络设备绑定
11.1. 使用 YaST 配置联接设备
11.2. 联接从属的热插拔
11.3. 更多信息
12. Linux 虚拟服务器的负载平衡
12.1. 概念概述
12.2. 使用 YaST 配置 IP 负载平衡
12.3. 其他设置
12.4. 更多信息
13. 地域群集(多站点群集)

第 4 章配置和管理基础

摘要

HA 群集的主要目的是管理用户服务。Apache Web 服务器或数据库便是一种典型的用户服务。从用户角度来看,服务就是在客户的要求下执行某些操作。但对群集来说,服务只是可以启动或停止的资源,其本质与群集无关。

在本章中,我们将介绍一些配置资源和管理群集时需要了解的基本概念。以下章节介绍如何使用 High Availability Extension 提供的每种管理工具执行主配置和管理任务。

4.1. 全局群集选项

全局群集选项控制群集在遇到特定情况时的行为方式。它们被分组成若干集合,可以使用 Hawk 和 crm 外壳之类的群集管理工具进行查看和修改。

4.1.1. 概述

有关所有全局群集选项及其默认值的概述,请参见 http://www.clusterlabs.org/doc/ 上的“Pacemaker Explained”(Pacemaker 配置说明)。请参见“Available Cluster Options”(可用的群集选项)一节。

通常可保留预定义值。但为了使群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:

了解如何使用选择的群集管理工具调整这些参数:

4.1.2. 选项 no-quorum-policy

此全局选项定义在群集分区不具有法定票数(分区不具有多数节点投票)时应执行的操作。

允许的值有:

ignore

法定票数状态不会对群集行为产生影响;将继续进行资源管理。

此设置在以下情况中非常有用:

  • 双节点群集:由于单个节点故障总是会导致大多数节点丢失通讯,而您通常希望群集能够继续运行。使用屏蔽可确保资源完整性,还可防止出现节点分裂的情况。

  • 资源驱动型群集:对于具有冗余通讯通道的本地群集,节点分裂的情况只存在一定的可能性。因此,节点的通讯丢失很可能表示此节点已崩溃,剩余节点应恢复并重新为资源服务。

    如果 no-quorum-policy 设置为 ignore,则对于 4 节点群集而言,即使有三个节点同时发生故障,服务仍可保持运作。但如果使用其他设置,则在两个节点同时发生故障时便不具有法定票数。

freeze

如果失去法定票数,群集分区将会冻结。继续进行资源管理:正在运行的资源不会停止(但可能重启动以响应监视事件),但不会启动受影响分区中的任何其他资源。

如果群集中的某些资源依赖于与其他节点的通讯(例如,OCFS2 装入),建议对此类群集使用此设置。在这种情况下,默认设置 no-quorum-policy=stop 没有任何作用,因为它将导致以下情况:在对等节点不可到达时将无法停止这些资源。反之,尝试停止这些资源最终将超时并导致 stop failure,进而触发升级恢复和屏蔽。

stop(默认值)

如果失去法定票数,受影响群集分区中的所有资源都将以一种有序的方式停止。

suicide

如果失去法定票数,受影响群集分区中的所有节点都将被屏蔽。

4.1.3. 选项 stonith-enabled

此全局选项定义是否要应用屏蔽,以允许 STONITH 设备关闭故障节点以及无法停止其资源的节点。默认情况下,此全局选项设置为 true,因为对于常规的群集操作,有必要使用 STONITH 设备。根据默认值,如果未定义 STONITH 资源,则群集将拒绝启动任何资源。

如果出于任何原因而需要禁用屏蔽,请将 stonith-enabled 设置为 false,但请注意,这会影响产品的支持状态。此外,在 stonith-enabled="false" 的情况下,分布式锁管理器 (DLM) 等资源以及依赖于 DLM 的所有服务(例如 cLVM2、GFS2 和 OCFS2)都将无法启动。

[Important]无 STONITH 资源不受支持

不支持无 STONITH 资源的群集。

4.2. 群集资源

作为群集管理员,您需要在群集中为服务器上运行的每个资源或应用程序创建群集资源。群集资源可以包括网站、电子邮件服务器、数据库、文件系统、虚拟机和任何其他基于服务器的应用程序或在任意时间对用户都可用的服务。

4.2.1. 资源管理

必须先设置群集中的资源,然后才能使用它。例如,如果要使用 Apache 服务器作为群集资源,请先设置 Apache 服务器并完成 Apache 配置,然后才能启动群集中的相应资源。

如果资源有特定环境要求,请确保这些要求已得到满足并且在所有群集节点上均相同。这种配置不由 High Availability Extension 管理。您必须自行管理。

[Note]不要处理由群集管理的服务

使用 High Availability Extension 管理资源时,不得以其他方式(在群集外,例如手动或在引导时或重引导时)启动或停止同一资源。High Availability Extension 软件负责所有服务的启动或停止操作。

如果当服务已在群集控制下运行后您需要执行测试或维护任务,请确保先将资源、节点或整个群集置于维护模式,然后再进行手动处理。有关细节,请参见第 4.7 节 “维护模式”

配置群集中的资源后,请使用群集管理工具手动启动、停止、清理、删除或迁移资源。有关如何使用首选群集管理工具执行此操作的细节:

4.2.2. 支持的资源代理类

对于添加的每个群集资源,需要定义资源代理需遵守的标准。资源代理提取它们提供的服务并显示群集的确切状态,以使群集对其管理的资源不作确答。群集依赖于资源代理在收到启动、停止或监视命令时作出相应反应。

通常,资源代理的形式为外壳脚本。High Availability Extension 支持以下类别的资源代理:

Linux Standards Base (LSB) 脚本

LSB 资源代理一般由操作系统/分发包提供,并可在 /etc/init.d 中找到。要用于群集,它们必须遵守 LSB init 脚本规范。例如,它们必须实施了多个操作,至少包括 startstoprestartreloadforce-reloadstatus。有关详细信息,请参见 http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html

这些服务的配置没有标准化。如果要将 LSB 脚本用于 High Availability,请确保您了解如何配置相关脚本。通常,您可以在 /usr/share/doc/packages/PACKAGENAME 中的相关包文档中找到配置此类脚本的信息。

Open Cluster Framework (OCF) 资源代理

OCF RA 代理最适合用于高可用性,特别是当您需要多状态资源或特殊监视功能时。这些代理通常位于 /usr/lib/ocf/resource.d/provider/ 中。其功能与 LSB 脚本的功能相似。但是,始终使用环境变量进行配置,这样可轻松接受和处理参数。OCF 规范(由于它与资源代理相关)可在 http://www.opencf.org/cgi-bin/viewcvs.cgi/specs/ra/resource-agent-api.txt?rev=HEAD&content-type=text/vnd.viewcvs-markup 中找到。OCF 规范有严格的定义,其中包括操作必须返回退出码,请参见第 8.3 节 “OCF 返回码和故障恢复”。群集严格遵循这些规范。

要求所有 OCF 资源代理至少包含操作 startstopstatusmonitormeta-datameta-data 操作可检索有关如何配置代理的信息。例如,如果要了解提供程序 heartbeatIPaddr 代理的更多信息,请使用以下命令:

OCF_ROOT=/usr/lib/ocf /usr/lib/ocf/resource.d/heartbeat/IPaddr meta-data

输出是 XML 格式的信息,包括多个部分(代理的常规描述、可用参数和可用操作)。

或者,也可以使用 crmsh 来查看有关 OCF 资源代理的信息。有关细节,请参见第 7.1.3 节 “显示有关 OCF 资源代理的信息”

STONITH(屏蔽)资源代理

此类仅用于与屏蔽相关的资源。有关详细信息,参见第 9 章 屏障和 STONITH

随 High Availability Extension 提供的代理已写入 OCF 规范。

4.2.3. 资源类型

可创建以下类型的资源:

原始资源

基元资源是最基本的资源类型。

了解如何使用首选群集管理工具创建原始资源:

组包含一组需要放在一起、按顺序启动和按相反顺序停止的资源。有关更多信息,请参见第 4.2.5.1 节 “组”

克隆资源

克隆是可以在多个主机上处于活动状态的资源。如果各个资源代理支持,则任何资源均可克隆。有关更多信息,请参见第 4.2.5.2 节 “克隆资源”

多状态资源(以前称为主/从资源)

多状态资源是一种特殊类型的克隆资源,它们可具有多个模式。有关更多信息,请参见第 4.2.5.3 节 “多状态资源”

4.2.4. 资源模板

如果希望创建具有类似配置的多个资源,则定义资源模板是最简单的方式。定义后,就可以在基元资源或特定类型的约束中引用该模板,请参见第 4.4.3 节 “资源模板和约束”

如果在原始资源中引用了模板,则该原始资源将继承在模板中定义的所有操作、实例属性(参数)、元属性和利用率属性。此外,还可以为原始资源定义特定的操作或属性。如果在模板和原始资源中都定义了以上内容,则原始资源中定义的值将优先于模板中定义的值。

了解如何使用首选群集配置工具定义资源模板:

4.2.5. 高级资源类型

基元资源是最简单的一种资源,易于配置,不过对于群集配置,您可能还需要更多高级资源类型,如组、克隆资源或多状态资源。

4.2.5.1. 组

某些群集资源依赖于其他组件或资源,它们要求每个组件或资源都按特定顺序启动并在同一服务器上与它所依赖的资源一起运行。要简化此配置,可以使用群集资源组。

例 4.1. Web 服务器的资源组

资源组示例可以是需要 IP 地址和文件系统的 Web 服务器。在本例中,每个组件都是组成群集资源组的一个单独资源。资源组将在一台或多台服务器上运行。在发生软件或硬件故障时,资源组会将故障转移到群集中的另一台服务器,这一点与单个群集资源类似。


图 4.1. 组资源

组资源

组具有以下属性:

启动和停止

资源按其显示顺序启动并按相反顺序停止。

相关性

如果组中某个资源在某处无法运行,则该组中位于其之后的任何资源都不允许运行。

内容

组可能仅包含一些原始群集资源。组必须包含至少一个资源,否则配置无效。要引用组资源的子级,请使用子级 ID 而不是组 ID。

限制

尽管在约束中可以引用组的子代,但通常倾向于使用组的名称。

黏性

黏性在组中可以累加。每个活动的组成员可以将其黏性值累加到组的总分中。因此,如果 resource-stickiness 的默认值是 100,且组中有 7 个成员(其中 5 个成员处于活动状态),那么整个组首选其当前位置(分数为 500)。

资源监视

要为组启用资源监视,必须为组中每个要监视的资源分别配置监视。

了解如何使用首选群集管理工具创建组:

4.2.5.2. 克隆资源

您可能希望某些资源在群集的多个节点上同时运行。为此,必须将资源配置为克隆资源。可以配置为克隆资源的资源示例包括 STONITH 和群集文件系统(如 OCFS2)。可以克隆提供的任何资源。资源的资源代理支持此操作。克隆资源的配置甚至也有不同,具体取决于资源驻留的节点。

资源克隆有三种类型:

匿名克隆

这是最简单的克隆类型。这种克隆类型在所有位置上的运行方式都相同。因此,每台计算机上只能有一个匿名克隆实例是活动的。

全局唯一克隆

这些资源各不相同。一个节点上运行的克隆实例与另一个节点上运行的实例不同,同一个节点上运行的任何两个实例也不同。

状态克隆(多状态资源)

这些资源的活动实例分为两种状态:主动和被动。有时也称为主要和辅助,或主和从。状态克隆可以是匿名克隆也可以是全局唯一克隆。另请参见第 4.2.5.3 节 “多状态资源”

克隆资源必须正好包含一组或一个常规资源。

配置资源监视或约束时,克隆资源与简单资源具有不同的要求。有关细节,请参见 http://www.clusterlabs.org/doc/ 上的“Pacemaker Explained”(Pacemaker 配置说明)。请参见“Clones - Resources That Get Active on Multiple Hosts”(克隆资源 - 在多个主机上处于活动状态的资源)一节。

了解如何使用首选群集管理工具创建克隆资源:

4.2.5.3. 多状态资源

多状态资源是克隆的特殊形式。它们允许实例处于两种操作模式中的一种(即 masterslave,不过您也可以按照自己的想法来命名这些模式)。多状态资源只能包含一个组或一个常规资源。

配置资源监视或约束时,多状态资源与简单资源具有不同的要求。有关细节,请参见 http://www.clusterlabs.org/doc/ 上的“Pacemaker Explained”(Pacemaker 配置说明)。请参见“Multi-state - Resources That Have Multiple Modes”(多状态 - 具有多个节点的资源)一节。

4.2.6. 资源选项(元属性)

您可以为添加的每个资源定义选项。群集使用这些选项来决定资源的行为方式,它们会告知 CRM 如何对待特定的资源。可以使用 crm_resource --meta 命令或按照过程 6.3, “添加或修改元属性和实例属性”中所述使用 Pacemaker GUI 来设置资源选项。或者使用 Hawk:过程 5.5, “添加原始资源”

表 4.1. 原始资源选项

选项

描述

默认值

priority

如果不允许所有的资源都处于活动状态,群集会停止优先级较低的资源以便让优先级较高的资源处于活动状态。

0

target-role

群集应在哪种状态下尝试保留此资源?允许的值有:stoppedstartedmaster

started

is-managed

是否允许群集启动和停止资源?允许的值:truefalse。如果该值设置为 false,则资源状态仍为受监视,并且所有错误都会予以报告(这与将资源设置为 maintenance="true" 有所不同)。

true

maintenance

是否可以手动处理资源?允许的值:truefalse。如果设置为 true,则所有资源将变为不受管理:群集将停止监视这些资源,因此不知道这些资源的状态。您可以根据需要停止或重启动群集资源,而无需等待群集尝试重启动它们。

false

resource-stickiness

资源留在所处位置的自愿程度如何?默认值为 rsc_default 部分中的 default-resource-stickiness 值。

calculated

migration-threshold

节点上的此资源应发生多少故障后才能确定该节点没有资格主管此资源?

INFINITY(已禁用)

multiple-active

如果群集发现资源在多个节点上处于活动状态,应执行什么操作?允许的值:block(将资源标记为未受管)、stop_onlystop_start

stop_start

failure-timeout

在恢复为如同未发生故障一样正常工作(并允许资源返回它发生故障的节点)之前,需要等待几秒钟?

0(已禁用)

allow-migrate

允许对支持 migrate_to/migrate_from 操作的资源进行资源迁移。

false

remote-node

此资源定义的远程节点的名称。这会将资源作为远程节点启用,同时定义唯一的名称用于标识该远程节点。如果未设置其他参数,则此值还会被假定为要在 remote-port端口上连接到的主机名。

[Warning]使用唯一 ID

此值不得与任何现有资源 ID 或节点 ID 重复。

none(已禁用)

remote-port

guest 与 pacemaker_remote 建立连接时使用的自定义端口。

3121

remote-addr

当远程节点的名称不是 guest 的主机名时要连接到的 IP 地址或主机名。

remote-node(用作主机名的值)

remote-connect-timeout

待发 guest 连接在超时之前的等待时间。

60s


4.2.7. 实例属性(参数)

可为所有资源类的脚本指定参数,这些参数可确定脚本的行为方式和所控制的服务实例。如果资源代理支持参数,则可使用 crm_resource 命令或 GUI 按过程 6.3, “添加或修改元属性和实例属性”中所述添加这些参数。或者使用 Hawk:过程 5.5, “添加原始资源”。在 crm 命令行实用程序和 Hawk 中,实例属性分别称为 paramsParameter。通过以 root 身份执行以下命令,可找到 OCF 脚本支持的实例属性列表:

root # crm ra info [class:[provider:]]resource_agent

或(无可选部分):

root # crm ra info resource_agent

输出列出了所有支持的属性及其用途和默认值。

例如,命令

root # crm ra info IPaddr

返回以下输出:

Manages virtual IPv4 addresses (portable version) (ocf:heartbeat:IPaddr)
    
This script manages IP alias IP addresses
It can add an IP alias, or remove one.   
    
Parameters (* denotes required, [] the default):
    
ip* (string): IPv4 address
The IPv4 address to be configured in dotted quad notation, for example
"192.168.1.1".                                                        
    
nic (string, [eth0]): Network interface
The base network interface on which the IP address will be brought
online.                                                           
    
If left empty, the script will try and determine this from the    
routing table.                                                    
    
Do NOT specify an alias interface in the form eth0:1 or anything here;
rather, specify the base interface only.                              
    
cidr_netmask (string): Netmask
The netmask for the interface in CIDR format. (ie, 24), or in
dotted quad notation  255.255.255.0).                        
    
If unspecified, the script will also try to determine this from the
routing table.                                                     
    
broadcast (string): Broadcast address
Broadcast address associated with the IP. If left empty, the script will
determine this from the netmask.                                        
    
iflabel (string): Interface label
You can specify an additional label for your IP address here.
    
lvs_support (boolean, [false]): Enable support for LVS DR
Enable support for LVS Direct Routing configurations. In case a IP
address is stopped, only move it to the loopback device to allow the
local node to continue to service requests, but no longer advertise it
on the network.                                                       
    
local_stop_script (string): 
Script called when the IP is released
    
local_start_script (string): 
Script called when the IP is added
    
ARP_INTERVAL_MS (integer, [500]): milliseconds between gratuitous ARPs
milliseconds between ARPs                                         
    
ARP_REPEAT (integer, [10]): repeat count
How many gratuitous ARPs to send out when bringing up a new address
    
ARP_BACKGROUND (boolean, [yes]): run in background
run in background (no longer any reason to do this)
    
ARP_NETMASK (string, [ffffffffffff]): netmask for ARP
netmask for ARP - in nonstandard hexadecimal format.
    
Operations' defaults (advisory minimum):
    
start         timeout=90
stop          timeout=100
monitor_0     interval=5s timeout=20s
[Note]组、克隆或多状态资源的实例属性

请注意,组、克隆和多状态资源没有实例属性。但是,任何实例属性集都将由组、克隆或多状态资源的子级继承。

4.2.8. 资源操作

默认情况下,群集将不会确保您的资源一直正常。要指示群集执行此操作,需要将监视操作添加到资源定义中。可为所有类或资源代理添加监视操作。有关更多信息,请参见第 4.3 节 “资源监视”

表 4.2. 资源操作属性

操作

描述

ID

您的操作名称。必须是唯一的。(不会显示 ID)。

name

要执行的操作。常见值:monitorstartstop

interval

执行操作的频率。单位:秒

timeout

需要等待多久才能声明操作失败。

requires

需要满足哪些条件才会发生此操作。允许的值:nothingquorumfencing。默认值取决于是否启用屏蔽和资源的类是否为 stonith。对于 STONITH 资源,默认值为 nothing

on-fail

此操作失败时执行的操作。允许的值:

  • ignore:假装资源没有失败。

  • block:不对资源执行任何进一步操作。

  • stop:停止资源并且不在其他位置启动该资源。

  • restart:停止资源并(可能在不同的节点上)重启动。

  • fence:关闭资源故障的节点 (STONITH)。

  • standby:将所有资源从资源失败的节点上移走。

enabled

如果值为 false,将操作视为不存在。允许的值:truefalse

role

仅当资源具有此角色时才运行操作。

record-pending

可全局设置或为单独资源设置。使 CIB 反映资源上正在进行中的操作的状态。

description

操作描述。


4.2.9. 超时值

资源的超时值会受以下参数的影响:

  • op_defaults (操作的全局超时),

  • 在资源模板中定义的特定超时值,

  • 为资源定义的特定超时值。

[Note]值的优先级

如果为资源定义了特定值,则该值优先于全局默认值。资源的特定值也优先于在资源模板中定义的值。

获取超时值权限非常重要。将它们设置得太小会导致大量(不必要的)屏蔽操作,原因如下:

  1. 如果资源运行超时,它将失败,群集将尝试停止它。

  2. 如果停止资源也失败(例如,由于停止超时值设置得太小),群集将屏蔽该节点。发生此状况时所在的节点将被视为已失去控制。

CRM 会对每个节点上的各个资源执行初始监视,也称为探测。清理资源之后也会执行探测。如果没有为资源的监视操作配置特定的超时,则 CRM 将自动检查其他任何监视操作。如果为资源定义了多项监视操作,则 CRM 将选择间隔时间最小的一项操作,并会使用其超时值作为探测的默认超时值。如果未配置任何监视操作,则将应用整个群集的默认值。默认值为 20 秒(如果未通过配置 op_defaults 参数来指定其他默认值)。如果您不想依赖自动计算或 op_defaults 值,请定义此监视的特定超时。为此,可通过向相应资源添加监视操作并将 interval 设置为 0 来实现,例如:

crm(live)configure# primitive rsc1 ocf:pacemaker:Dummy \
    op monitor interval="0" timeout="60"

rsc1 的探测将在 60 秒后超时,而不管 op_defaults中定义的全局超时或者配置的任何其他操作超时如何。

您可以使用 crmsh 和 Hawk 调整操作的全局默认值并设置任何特定的超时值。确定和设置超时值的最佳实践如下所示:

过程 4.1. 确定超时值

  1. 检查资源启动和停止(在负载状况下)所需的时间。

  2. 如果需要,请添加 op_defaults 参数并相应地设置(默认)超时值:

    1. 例如,将 default-action-timeout 设置为 60 秒:

      crm(live)configure#  op_defaults timeout=60
    2. 对于需要更长时间期限的资源,则定义单独的超时值。

  3. 为资源配置操作时,添加单独的 startstop 操作。使用 Hawk 配置操作时,它会针对这些操作提供有用的超时建议。

4.3. 资源监视

如果要确保资源正在运行,必须为其配置资源监视。

如果资源监视程序检测到故障,将发生以下情况:

  • 根据 /etc/corosync/corosync.conflogging 部分指定的配置生成日志文件消息。默认情况下,日志将写入系统日志,通常为 /var/log/messages

  • 故障将反映在群集管理工具(Pacemaker GUI、Hawk 和 crm_mon)中和 CIB 状态部分中。

  • 群集将启动重要的恢复操作,可包括停止资源以修复故障状态以及在本地或在其他节点上重启动资源。资源也可能不会重启动,具体取决于配置和群集状态。

如果不配置资源监视,则不会告知成功启动的资源故障,且群集始终显示资源状况正常。

通常,只要资源在运行,就仅受群集监视。但是,为了检测并发违例,还需为停止的资源配置监视。例如:

primitive dummy1 ocf:heartbeat:Dummy \
   op monitor interval="300s" role="Stopped" timeout="10s" \
   op monitor interval="30s" timeout="10s"

资源 dummy1 一旦处于 role="Stopped" 状态,此配置就会每 300 秒触发一次对该资源的监视操作。在运行时,针对它的监视间隔为 30 秒。

了解如何使用首选群集管理工具添加对资源的监视操作:

4.4. 资源约束

配置好所有资源只是完成了该任务的一部分。即便群集熟悉所有必需资源,它可能还无法进行正确处理。资源约束允许您指定在哪些群集节点上运行资源、以何种顺序装载资源,以及特定资源依赖于哪些其他资源。

4.4.1. 约束类型

提供三种不同的约束:

资源位置

位置约束定义资源可以、不可以或首选在哪些节点上运行。

资源共置

共置约束告知群集哪些资源可以或不可以在一个节点上一起运行。

资源顺序

顺序约束定义操作的顺序。

4.4.1.1. 资源集

4.4.1.1.1. 使用资源集定义约束

可以使用资源集作为定义位置、共置或顺序约束的备用格式,在资源集中,基元资源已被全部分组到一个集合中。以前,为了实现此目的,用户可以定义一个资源组(不一定总能准确表达设计意图),也可以将每种关系定义为单个约束。随着资源和组合数目的增加,后面这种做法会导致约束过度膨胀。通过资源集进行配置并不一定会减少复杂程度,但更易于理解和维护,如以下示例中所示。

例 4.2. 用于位置约束的资源集

例如,可以在 crmsh 中使用资源集 (loc-alice) 的以下配置,将两个虚拟 IP(vip1vip2)置于同一个节点 alice

crm(live)configure# primitive vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.6
crm(live)configure# location loc-alice { vip1 vip2 } inf: alice 

如果想要使用资源集来替换共置约束的配置,请考虑以下两个示例:

例 4.3. 共置资源链

<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>

如果想使用资源集来替换顺序约束的配置,请考虑以下两个示例:

例 4.4. 有序资源链

<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>

可以使用包含有序资源的资源集来实现相同的目的:

例 4.5. 以资源集表示的有序资源链

<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 属性在 ANDOR 逻辑之间切换。

4.4.1.1.2. 不带依赖性的共置约束的资源集

有时,将一组资源放置在同一个节点上(定义共置约束)会很有用,但前提是这些资源之间不存在硬依赖性。例如,您想要在同一个节点上放置两个资源,但希望群集在其中一个资源发生故障时重启动另一个资源。可以在 crm 外壳中使用 weak bond 命令实现此目的。

了解如何使用首选群集管理工具设置这些弱绑定

4.4.1.2. 更多信息

了解如何使用首选群集管理工具添加各种约束:

有关配置约束的更多信息以及顺序和共置基本概念的详细背景信息,请参见以下文档。可以从 http://www.clusterlabs.org/doc/ 访问这些文档:

  • Pacemaker Explained(Pacemaker 配置说明),Resource Constraints(资源约束)一章

  • 共置说明

  • 顺序说明

4.4.2. 分数和无限值

定义约束时,还需要指定分数。各种分数是群集工作方式的重要组成部分。其实,从迁移资源到决定在已降级群集中停止哪些资源的整个过程是通过以某种方式操纵分数来实现的。分数按每个资源来计算,资源分数为负的任何节点都无法运行该资源。计算资源的分数后,群集会选择分数最高的节点。

INFINITY(无穷大)目前定义为 1,000,000。提高或降低分数需遵循以下三个基本规则:

  • 任何值 + 无穷大 = 无穷大

  • 任何值 - 无穷大 = -无穷大

  • 无穷大 - 无穷大 = -无穷大

定义资源约束时,需为每个约束指定一个分数。分数表示您指派给此资源约束的值。分数较高的约束先应用,分数较低的约束后应用。通过使用不同的分数为既定资源创建更多位置约束,可以指定资源要故障转移至的目标节点的顺序。

4.4.3. 资源模板和约束

如果定义了资源模板(请参见第 4.2.4 节 “资源模板”),则可在以下类型的约束中引用该模板:

  • 顺序约束

  • 共置约束

  • rsc_ticket 约束(用于地域群集)。

但是,共置约束不得包含多个对模板的引用。资源集不得包含对模板的引用。

在约束中引用的资源模板代表派生自该模板的所有原始资源。这意味着,约束将应用于引用资源模板的所有原始资源。在约束中引用资源模板是资源集的备用方式,它可以显著简化群集配置。有关资源集的细节,请参见过程 5.11, “对共置或顺序约束使用资源集”

4.4.4. 故障转移节点

资源在出现故障时会自动重启动。如果在当前节点上无法实现此操作,或者此操作在当前节点上失败了 N 次,它将尝试故障转移到其他节点。每次资源失败时,其失败计数都会增加。您可以多次定义资源的故障次数(migration-threshold),在该值之后资源会迁移到新节点。如果群集中存在两个以上的节点,则特定资源故障转移的节点由 High Availability 软件选择。

但可以通过为资源配置一个或多个位置约束和一个 migration-threshold 来指定此资源将故障转移到的节点。

了解如何使用首选群集管理工具指定故障转移节点:

例 4.6. 迁移阈值 - 流程

例如,假设您已经为 rsc1 资源配制了一个首选在 alice 节点上运行的位置约束。如果那里失败了,系统会检查 migration-threshold 并与故障计数进行比较。如果故障计数 >= migration-threshold,会将资源迁移到下一个自选节点。

一旦达到阈值,节点将不再能运行失败资源,直到重设置资源的 failcount 为止。这可以由群集管理员手动执行或通过设置资源的 failure-timeout 选项执行。

例如,设置 migration-threshold=2failure-timeout=60s 会导致资源在发生两次故障后迁移到新节点。允许该资源在一分钟后移回(具体取决于粘性和约束分数)。


迁移阈值概念有两个异常,发生在资源启动失败或停止失败时:

  • 启动失败将失败计数设置为 INFINITY,因此总是会导致立即迁移。

  • 停止故障会导致屏蔽(stonith-enabled 设置为 true 时,这是默认设置)。

    如果不定义 STONITH 资源(或 stonith-enabled 设置为 false),则该资源不会迁移。

有关配合首选群集管理工具使用迁移阈值和重置故障计数的详细信息,请参见:

4.4.5. 故障回复节点

当原始节点恢复联机并位于群集中时,资源可能会故障回复到该节点。如果要防止资源故障回复到之前运行的节点,或者想为该资源指定故障回复到的其他节点,请更改其 resource stickiness 值。可以在创建资源时指定资源粘性或稍后指定。

指定资源粘性值时请考虑以下含义:

值为 0

这是默认选项。资源放置在系统中的最适合位置。这意味着当负载能力较好或较差的节点变得可用时才转移资源。此选项的作用几乎等同于自动故障回复,只是资源可能会转移到非之前活动的节点上。

值大于 0

资源更愿意留在当前位置,但是如果有更合适的节点可用时会移动。值越高表示资源越愿意留在当前位置。

值小于 0

资源更愿意移离当前位置。绝对值越高表示资源越愿意离开当前位置。

值为 INFINITY

如果不是因节点不适合运行资源(节点关机、节点待机、达到 migration-threshold 或配置更改)而强制资源转移,资源总是留在当前位置。此选项的作用几乎等同于完全禁用自动故障回复。

值为 -INFINITY

资源总是移离当前位置。

4.4.6. 根据资源负载影响放置资源

并非所有资源都相等。某些资源(如 Xen guest)需要托管它们的节点满足其容量要求。如果所放置资源的总需求超过了提供的容量,则资源性能将降低(或甚至失败)。

要考虑此情况,可使用 High Availability Extension 指定以下参数:

  1. 特定节点提供的容量。

  2. 特定资源需要的容量。

  3. 资源放置整体策略。

了解如何使用首选群集管理工具配置这些设置:

如果节点有充足的可用容量来满足资源要求,则此节点将被视为此资源的有效节点。容量的性质对 High Availability Extension 而言完全无关紧要;它只是确保在将资源移到节点上之前满足资源的所有容量要求。

要手动配置资源要求和节点提供的容量,请使用利用率属性。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。但是,属性值必须是整数。

如果将具有利用率属性的多个资源组合或设置共置约束,则 High Availability Extension 会考虑此情况。如有可能,资源将被放置到可以满足所有容量要求的节点上。

[Note]组的利用率属性

无法直接为资源组设置利用率属性。但是,为了简化组的配置,可以使用组中所有资源所需的总容量添加利用率属性。

High Availability Extension 还提供了方法来自动检测和配置节点容量和资源要求:

NodeUtilization 资源代理检查节点的容量(与 CPU 和 RAM 有关)。要配置自动检测,请创建类、提供程序和类型如下的克隆资源:ocf:pacemaker:NodeUtilization。每个节点上应都有一个克隆实例在运行。实例启动后,利用率部分将添加到节点的 CIB 配置中。

为了自动检测资源的最低要求(与 RAM 和 CPU 有关),Xen 资源代理已得到改善。启动 Xen 资源后,它将反映 RAM 和 CPU 的使用情况。利用率属性将自动添加到资源配置中。

除了检测最低要求外,High Availability Extension 还允许通过 VirtualDomain 资源代理监视当前的利用率。它检测虚拟机的 CPU 和 RAM 使用情况。要使用此功能,请配置类、提供程序和类型如下的资源:ocf:heartbeat:VirtualDomain。可以使用以下实例属性: autoset_utilization_cpuautoset_utilization_hv_memory。两者都默认为 true。这将在每个监视周期中更新 CIB 中的利用率值。

与手动或自动配置容量和要求无关,放置策略必须使用 placement-strategy 属性(在全局群集选项中)指定。可用值如下:

default(默认值)

不考虑利用率值。根据位置得分分配资源。如果分数相等,资源将均匀分布在节点中。

utilization

在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。但仍会根据分配给节点的资源数执行负载平衡。

minimal

在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试将资源集中到尽可能少的节点上(以节省其余节点上的能耗)。

balanced

在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试均匀分布资源,从而优化资源性能。

[Note]配置资源优先级

可用的放置策略是最佳方法 - 它们不使用复杂的启发式解析程序即可始终实现最佳分配结果。确保正确设置资源优先级,以便首选调度最重要的资源。

例 4.7. 负载平衡放置配置示例

以下示例演示了配有四台虚拟机、节点数相等的三节点群集。

node alice utilization memory="4000"
node bob utilization memory="4000"
node  charly utilization memory="4000"
primitive xenA ocf:heartbeat:Xen utilization hv_memory="3500" \
     params xmfile="/etc/xen/shared-vm/vm1"
     meta priority="10" 
primitive xenB ocf:heartbeat:Xen utilization hv_memory="2000" \
     params xmfile="/etc/xen/shared-vm/vm2"
     meta priority="1"
primitive xenC ocf:heartbeat:Xen utilization hv_memory="2000" \
     params xmfile="/etc/xen/shared-vm/vm3"
     meta priority="1"
primitive xenD ocf:heartbeat:Xen utilization hv_memory="1000" \
     params xmfile="/etc/xen/shared-vm/vm4"
     meta priority="5"
property placement-strategy="minimal"

如果三个节点都处于正常状态,那么资源 xenA 将首先放置到一个节点上,然后是 xenDxenBxenC 将分配在一起或者其中一个与 xenD 分配在一起。

如果一个节点出现故障,可用的总内存将不足以托管所有资源。将确保分配 xenAxenD 同样如此。但是,只能再放置剩余资源 xenBxenC 中的一个。由于它们的优先级相同,结果未定。要解决这种不确定性,需要为其中一个资源设置更高的优先级。


4.4.7. 使用标记分组资源

标记是 Pacemaker 中最近新增的功能。使用标记可以一次性引用多个资源,而无需在这些资源之间创建任何共置或顺序关系。此功能十分适用于对概念上相关的资源进行分组。例如,如果有多个资源与某个数据库相关,您可以创建一个名为 databases 的标记,并将与该数据库相关的所有资源都添加到此标记。这样,只需使用一条命令就能停止或启动所有这些资源。

标记也可以用于约束。例如,loc-db-prefer 位置约束将应用到标记了 databases 的一组资源:

location loc-db-prefer databases 100: alice

了解如何使用首选群集管理工具创建标记:

4.5. 管理远程主机上的服务

在最近几年中,是否能够监视和管理远程主机上的服务已变得越来越重要。SUSE Linux Enterprise High Availability Extension 11 SP3 可让用户通过监视插件来密切监视远程主机上的服务。最近添加的 pacemaker_remote 服务现在允许 SUSE Linux Enterprise High Availability Extension 11 SP4 全面管理和监视远程主机上的资源,就如同这些资源是真实的群集节点一样,并且无需用户在远程计算机上安装群集堆栈。

4.5.1. 使用 Nagios 插件监视远程主机上的服务

虚拟机的监视可以通过 VM 代理来完成(只有在超级管理程序中出现 guest 时才可选择 VM 代理),或者通过从 VirtualDomain 或 Xen 代理调用外部脚本来完成。直到现在为止,仍只有通过在虚拟机中对高可用性堆栈进行完全设置才能实现更细化的监视。

通过支持 Nagios 插件,High Availability Extension 现在还可让您监视远程主机上的服务。您可以收集 guest 上的外部状态,而无需修改 guest 映像。例如,VM guest 可能会运行需要能够访问的 Web 服务或简单的网络资源。现在,有了 Nagios 资源代理,您就可以监视 guest 上的 Web 服务或网络资源。如果这些服务再也无法访问,High Availability Extension 将触发相应 guest 的重启或迁移操作。

如果您的 guest 依赖于某项服务(例如,guest 要使用 NFS 服务器),则这项服务可以是由群集管理的普通资源,也可以是使用 Nagios 资源进行监视的外部服务。

要配置 Nagios 资源,必须在主机上安装以下包:

  • nagios-plugins

  • nagios-plugins-metadata

必要时,YaST 或 Zypper 将解决对后续包的任何依赖性问题。

将 Nagios 插件配置为属于资源容器的资源(通常是 VM)便是其中一个典型案例。如果容器中有任何资源发生故障,则将重启该容器。有关配置示例,请参见例 4.8 “为 Nagios 插件配置资源”。或者,如果想使用 Nagios 资源代理通过网络监视主机或服务,还可将这些代理配置为普通资源。

例 4.8. 为 Nagios 插件配置资源

primitive vm1 ocf:heartbeat: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

1

支持的参数与 Nagios 插件的长选项相同。Nagios 插件通过参数 hostname 与服务连接。因此属性的值必须是可解析的主机名或 IP 地址。

2

因为启动 guest 操作系统并让其服务运行需要一段时间,所以必须设置足够长的 Nagios 资源启动超时。

3

ocf:heartbeat:Xenocf:heartbeat:VirtualDomainocf:heartbeat:lxc 类型的群集资源容器。可以是 VM 或 Linux 容器。

以上示例仅包含适用于 check_tcp 插件的一个 Nagios 资源,但也可以针对不同的插件类型配置多个 Nagios 资源(例如 check_httpcheck_udp)。

如果服务的主机名相同,还可以为组指定 hostname 参数,而无需为各个基元资源一一添加该参数。例如:

group g-vm1-and-services vm1 vm1-sshd vm1-httpd \ 
     meta container="vm1" \ 
     params hostname="vm1" 

如果 Nagios 插件监视的任何服务在 VM 中发生故障,则群集会检测到该情况并重启容器资源(VM)。可以通过指定服务监视操作的 on-fail 属性来配置在这种情况下要执行的操作。默认值为 restart-container

在考虑 VM 的 migration-threshold 时,会将服务的故障计数考虑在内。


4.5.2. 使用 pacemaker_remote 管理远程节点上的服务

使用 pacemaker_remote 服务可将高可用性群集扩展到虚拟节点或远程裸机计算机。这些虚拟节点或远程裸机无需运行群集堆栈就能成为群集的成员。

High Availability Extension 现在可以起动虚拟环境(KVM 和 LXC)以及驻留在这些虚拟环境中的资源,而无需虚拟环境运行 Pacemaker 或 Corosync。

对于同时要管理用作群集资源的虚拟机以及 VM 中驻留的资源的用例,您现在可以使用以下设置:

  • 常规(裸机)群集节点运行 High Availability Extension。

  • 虚拟机运行 pacemaker_remote 服务(几乎不需要在 VM 端进行任何配置)。

  • 常规群集节点上的群集堆栈会起动 VM 并连接到 VM 上运行的 pacemaker_remote 服务,以将 VM 作为远程节点集成到群集中。

由于远程节点上未安装群集堆栈,因此这意味着:

  • 远程节点不参与仲裁。

  • 远程节点无法成为 DC。

  • 远程节点不受可伸缩性限制(Corosync 将成员数限制为 16 个节点)的约束。

您可以在 http://www.clusterlabs.org/doc/ 上的《Pacemaker Remote—Extending High Availability into Virtual Nodes》(Pacemaker 远程 - 将高可用性扩展到虚拟节点)中找到有关 remote_pacemaker 服务的更多信息,包括多个用例和详细的设置说明。

4.6. 监视系统运行状况

为避免节点耗尽磁盘空间而使得系统无法管理已分配给该节点的任何资源,High Availability Extension 提供了一个资源代理 ocf:pacemaker:SysInfo。使用此代理可监视节点在磁盘分区的状况。SysInfo RA 会创建一个名为 #health_disk 的节点属性,如果任何受监视磁盘的可用空间低于指定限制,就会将其设置为 red

要定义 CRM 在节点状况到达临界状态时应如何反应,请使用全局群集选项 node-health-strategy

过程 4.2. 配置系统运行状况监视

要在某个节点耗尽磁盘空间时从该节点自动移除资源,请执行以下操作:

  1. 配置 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"

    1

    要监视的磁盘分区。例如,/tmp/usr/var/dev。要指定多个分区作为属性值,请以空格进行分隔。

    [Note]始终监视 / 文件系统

    您无需在 disks 中指定根分区 (/)。此分区默认将始终受到监视。

    2

    这些分区所需的最小可用磁盘空间。您也可以指定度量单位(在上例中,M 表示兆字节)。如果未指定,min_disk_free 默认将使用 disk_unit 参数中定义的单位。

    3

    报告磁盘空间所使用的单位。

  2. 要完成资源配置,请创建 ocf:pacemaker:SysInfo 的克隆并在每个群集节点上启动此克隆。

  3. node-health-strategy 设置为 migrate-on-red

    property node-health-strategy="migrate-on-red"

    如果 #health_disk 属性设置为 red,则策略引擎会将 -INF 添加到该节点的资源分数中。此时将从此节点移除所有资源。STONITH 资源将是最后一个被停止的资源,但即使 STONITH 资源不再运行,仍可屏蔽该节点。屏蔽对 CIB 有直接访问权且将继续起作用。

当节点状况变成 red 状态后,解决会导致问题的状况。然后清除 red 状态,使节点能够再次运行资源。登录到群集节点并使用下列其中一种方法:

  • 执行以下命令:

    root # crm node status-attr NODE delete #health_disk
  • 在该节点上重启动 Pacemaker 和 Corosync。

  • 重引导该节点。

该节点将恢复服务并可再次运行资源。

4.7. 维护模式

您可能不时地需要对单个群集组件或整个群集执行测试或维护任务 - 更改群集配置、更新单个节点的软件包,或者将群集升级到更高的产品版本。

为此,High Availability Extension 提供了数种级别的 maintenance 选项:

  • 针对资源

  • 针对节点

  • 针对整个群集

[Warning]数据丢失风险

当服务在群集控制下运行时,如果您需要执行任何测试或维护任务,请确保遵照以下说明操作:

  1. 在开始之前,请将单个资源、节点或整个群集设置到维护模式。这有助于避免一些不利的负面影响,例如,资源未按顺序启动、群集节点之间出现 CIB 不同步的风险,或者丢失数据。

  2. 执行维护任务或测试。

  3. 完成后,请解除维护模式以开始正常的群集操作。

在维护模式下,您可以根据需要停止或重启动群集资源 - High Availability Extension 不会尝试重启动群集资源。所有资源将自动变为不受管理:High Availability Extension 将停止监视它们,因此不知道它们的状态。您甚至可以停止节点上的所有 Pacemaker 服务,最初作为 Pacemaker 管理的群集资源启动的所有守护程序和进程将继续运行。如果在群集处于维护模式的情况下尝试启动节点上的 Pacemaker 服务,Pacemaker 将针对每个资源启动一次性的监视操作(探测),以评估哪些资源当前正在该节点上运行。但是,它只会确定资源的状态,而不执行其他操作。

有关使用首选群集管理工具设置或取消设置维护模式的细节,请参见:

4.8. 更多信息

http://crmsh.github.io/

用于高可用性群集管理的高级命令行界面 crm 外壳 (crmsh) 的主页。

http://crmsh.github.io/documentation

提供有关 crm 外壳的多份文档,包括使用 crmsh 完成基本群集设置的入门教程,以及 crm 外壳的综合性手册。后者可在 http://crmsh.github.io/man-2.0/ 上访问。http://crmsh.github.io/start-guide/ 上提供了相关教程。

http://clusterlabs.org/

Pacemaker 主页,随 High Availability Extension 提供的群集资源管理器。

http://www.clusterlabs.org/doc/

提供数个综合性手册,以及一些解释一般概念的简短文档。例如:

  • Pacemaker Explained(Pacemaker 说明):包含全面、详尽的参考信息。

  • Configuring Fencing with crmsh(使用 crmsh 配置屏蔽):如何配置和使用 STONITH 设备。

  • 共置说明

  • 顺序说明

http://linux-ha.org

高可用性 Linux 项目的主页。

第 5 章配置和管理群集资源(Web 界面)

摘要

除了 crm 命令行工具和 Pacemaker GUI 之外,High Availability Extension 还随附 HA Web Konsole (Hawk),这是一个用于管理任务的基于 Web 的用户界面。它还可用于从非 Linux 计算机监视和管理 Linux 群集。另外,如果系统仅提供很小的图形用户界面,它也会是个理想的解决方案。

本章介绍了 Hawk,并包含配置和管理群集资源的基本任务:修改全局群集选项、创建基本和高级类型的资源(组和克隆)、配置约束、指定故障转移节点和故障回复节点、配置资源监视以及手动启动、清理、删除和迁移资源。为了对群集状态进行详细分析,Hawk 会生成一个群集报告 (hb_report)。可以查看群集历史记录或使用模拟器浏览可能的失败方案。

5.1. Hawk - 概述

Hawk 的 Web 界面还可让您从非 Linux 计算机监视和管理 Linux 群集。另外,如果系统仅提供很小的图形用户界面,它也会是个理想的解决方案。

5.1.1. 启动 Hawk 并登录

此 Web 界面包含在 hawk 包中。它必须安装在要使用 Hawk 连接到的所有群集节点上。在要使用 Hawk 访问群集节点的计算机上,只需启用了 JavaScript 和 Cookie 的(图形)Web 浏览器即可建立连接。

要使用 Hawk,必须在要通过 Web 界面连接到的节点上启动相应的 Web 服务。

如果您是使用 sleha-bootstrap 包中的脚本设置的群集,则此时 Hawk 服务已启动。在这种情况下,请跳过过程 5.1, “启动 Hawk 服务”并继续执行过程 5.2, “登录到 Hawk Web 界面”

过程 5.1. 启动 Hawk 服务

  1. 在要连接到的节点上,打开外壳并以 root 用户身份登录。

  2. 通过输入以下命令,检查服务的状态

    root # rchawk status
  3. 如果服务未在运行,请使用以下命令启动服务

    root # rchawk start

    如果希望 Hawk 在引导时自动启动,请执行以下命令:

    root # chkconfig hawk on
[Note]用户身份验证

Hawk 用户必须是 haclient 组的成员。安装程序将创建名为 hacluster 的 Linux 用户,该用户将添加到 haclient 组中。使用 ha-cluster-init 脚本进行设置时,将为 hacluster 用户设置默认口令。

在启动 Hawk 之前,请设置或更改 hacluster 用户的口令。或者,创建属于 haclient 组的新用户。

在要使用 Hawk 连接到的所有节点上执行此操作。

过程 5.2. 登录到 Hawk Web 界面

Hawk Web 界面使用 HTTPS 协议和端口 7630

[Note]通过虚拟 IP 访问 Hawk

如果您希望即使平时连接的群集节点已关闭,您也能够访问 Hawk,可为 Hawk 配置一个虚拟 IP 地址(IPaddrIPaddr2)作为群集资源。该地址无需任何特殊配置。

  1. 在任何计算机上,启动 Web 浏览器并确保 JavaScript 和 cookie 已启用。

  2. 输入运行 Hawk Web 服务的任何群集节点的 IP 地址或主机名作为 URL。或者,输入群集操作员可能已配置为资源的任何虚拟 IP 地址:

    https://HOSTNAME_OR_IP_ADDRESS:7630/
    [Note]证书警告

    当您首次尝试访问 URL 时如果显示证书警告,则表示使用了自我签名证书。默认情况下,自我签名证书不被视为可信证书。

    请向您的群集操作员询问证书细节,以校验该证书。

    要继续,可在浏览器中添加例外,以绕过警告。

    有关如何将自我签名证书替换为官方证书颁发机构签名的证书的信息,请参见替换自签名证书

  3. 在 Hawk 登录屏幕上,输入 hacluster 用户(或属于 haclient 组的任何其他用户)的用户名口令

  4. 单击登录

    随即会出现群集状态屏幕,显示群集节点和资源的状态。显示的信息类似于 crm 外壳中 crm status 命令的输出。

5.1.2. 主屏幕:群集状态

登录后,Hawk 会显示群集状态屏幕。该屏幕显示最重要的全局群集参数以及您的群集节点和资源的状态的摘要信息。以下颜色代码用于显示节点和资源的状态:

Hawk 颜色代码

  • 绿色:正常。例如,资源正在运行或节点处于联机状态。

  • 红色:故障,不正常。例如,资源失败或节点未正常关闭。

  • 黄色:正在转换。例如,节点当前正在关闭,或者当前正在启动或停止某个资源。如果您单击暂挂的资源以查看其细节,Hawk 还会显示该资源当前正在更改到的目标状态(正在启动正在停止正在移动正在升级正在降级)。

  • 灰色:未运行,但群集认为它在运行。例如,由管理员停止或进入 standby 模式的节点。处于脱机状态的节点也显示为灰色(如果已正常关闭)。

除了颜色代码之外,Hawk 还会在群集状态屏幕的所有视图中针对节点、资源、票据的状态和错误讯息显示图标。

如果资源失败,屏幕顶部将出现一条以红色显示的错误消息,其中包含错误细节。要分析失败原因,请单击错误消息。这会自动打开 Hawk 的历史记录浏览器并触发系统收集 20 分钟(失败发生前后各 10 分钟)内的数据。有关详细信息,请参见过程 5.27, “使用历史记录浏览器查看转换”

图 5.1. Hawk - 群集状态(摘要视图)

Hawk - 群集状态(摘要视图)

群集状态屏幕能几乎实时地自行刷新。您可以通过右上角中的三个图标访问以下视图,请选择其中一个视图:

Hawk 群集状态视图

摘要视图

同时显示最重要的全局群集参数以及您的群集节点和资源的状态。如果您的设置包括地域群集(多站点群集),则摘要视图还会显示票据。要查看属于特定类别(票据、节点或资源)的所有元素的细节,请单击标记为链接的类别标题。否则,请单击个别元素以查看细节。

树视图

以可扩展视图显示最重要的全局群集参数以及您的群集节点和资源的状态。如果您的设置包括地域群集(多站点群集),则树视图还会显示票据。单击箭头可展开或折叠属于相应类别的元素。与摘要视图不同,此视图不仅显示资源的 ID 和状态,还显示类型(例如,原始、克隆或组)。

表视图

此视图对较大的群集尤其有用,因为它以简明扼要的方式显示哪个节点上当前正在运行哪些资源。同时还显示不活动的节点或资源。

主屏幕的顶行会显示您登录使用的用户名。它还可以让您注销 Web 界面以及从用户名旁边的扳手图标访问下列工具

要对节点和资源执行基本的操作员任务(比如启动或停止资源、使节点联机或者查看细节),请单击节点或资源旁边的扳手图标。这会显示一个上下文菜单。对于任何状态屏幕上的任何克隆、组或多状态子资源,从上下文菜单中选择菜单项。单击此项可让您对该基元所述的顶级克隆或组执行启动、停止等操作。

有关更复杂的任务(例如配置资源、约束或全局群集选项),请使用左侧的导航栏。从该导航栏可以访问以下屏幕:

[Note]Hawk 中的可用功能

默认情况下,以 roothacluster 身份登录的用户对所有群集配置任务具有完全读写访问权。但是,访问控制列表可用于定义细化的访问权限。

如果在 CRM 中启用了 ACL,则 Hawk 中的可用功能取决于指派给您的用户角色和访问权限。此外,Hawk 中的以下功能只能由用户 hacluster 执行:

  • 生成 hb_report

  • 使用历史记录浏览器

  • 查看节点或资源的最近事件。

5.2. 配置全局群集选项

全局群集选项控制群集在遇到特定情况时的行为方式。它们组成若干集合,并可通过 Pacemaker GUI、Hawk 和 crm 外壳之类的群集管理工具进行查看和修改。在大多数情况下可保留预定义值。但为了使群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:

过程 5.3. 修改全局群集选项

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集属性可查看全局群集选项及其当前值。Hawk 会显示与 CRM 配置默认资源默认操作相关的最重要参数。

    图 5.3. Hawk - 群集配置

    Hawk - 群集配置

  3. 根据群集要求,调整 CRM 配置

    1. no-quorum-policy 设置为合适的值。

    2. 如果由于某些原因需要禁用屏蔽,请取消选择 stonith 已启用

      [Important]无 STONITH 资源不受支持

      不支持无 STONITH 资源的群集。

    3. 要从 CRM 配置中删除某项属性,请单击该属性旁边的减号图标。如果删除了某项属性,则群集的表现方式就像该属性采有默认值一样。有关默认值的细节,请参见第 4.2.6 节 “资源选项(元属性)”

    4. 要为 CRM 配置添加新属性,请从下拉框中选择一个属性,并单击加号。

  4. 如果您需要更改默认资源默认操作,请执行以下步骤:

    1. 要更改已显示的默认值,请编辑相应输入字段中的值。

    2. 要添加新的默认资源或默认操作,请从空下拉列表中选择一项,单击加号图标,然后输入值。如果已定义默认值,Hawk 会自动建议这些值。

    3. 要删除默认资源或默认操作,请单击参数旁边的减号图标。如果没有为默认资源默认操作指定值,群集会使用默认值,如第 4.2.6 节 “资源选项(元属性)”第 4.2.8 节 “资源操作”所述。

  5. 确认更改。

5.3. 配置群集资源

作为群集管理员,您需要在群集中为服务器上运行的每个资源或应用程序创建群集资源。群集资源可包括网站、邮件服务器、数据库、文件系统、虚拟机和任何其他基于服务器的应用程序或对用户随时都可用的服务。

有关可创建的资源类型的概述,请参见第 4.2.3 节 “资源类型”。除了指定资源的基本属性(ID、类、提供程序和类型)外,还可以在创建资源过程中或之后添加或修改以下参数:

  • Instance attributes (parameters) 确定资源控制的服务实例。有关更多信息,请参见第 4.2.7 节 “实例属性(参数)”

    创建资源时,Hawk 会自动显示所有必要的参数。对这些参数进行编辑,以便拥有有效的资源配置。

  • Meta attributes 告知 CRM 如何处理特定资源。有关更多信息,请参见第 4.2.6 节 “资源选项(元属性)”

    创建资源时,Hawk 会自动列出该资源的重要元属性,例如,定义资源初始状态的 target-role 属性。默认情况下,该属性设置为 Stopped,因此资源不会立即启动。

  • Operations 是资源监视所需的。有关更多信息,请参见第 4.2.8 节 “资源操作”

    创建资源时,Hawk 会显示最重要的资源操作(monitorstartstop)。

5.3.1. 使用设置向导配置资源

High Availability Extension 针对一些常用的群集方案(例如,设置高度可用的 NFS 服务器)随附了一组预定义的模板。可在 hawk-templates 包中找到这些预定义的模板。您也可以自行定义向导模板。有关详细信息,请参见 https://github.com/ClusterLabs/hawk/blob/master/doc/wizard.txt

过程 5.4. 使用设置向导

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择设置向导群集设置向导将列出可用的资源模板。如果单击其中一项,Hawk 将显示有关该模板的简短帮助文本。

  3. 选择要配置的资源集并单击下一步

  4. 按照屏幕指导执行操作。如果需要有关某个选项的信息,在 Hawk 中单击它即可显示简短帮助文本。

图 5.4. Hawk - 设置向导

Hawk - 设置向导

5.3.2. 创建简单群集资源

要创建最基本类型的资源,请执行以下操作:

过程 5.5. 添加原始资源

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择资源资源屏幕显示所有类型的资源的类别。它列出已定义的所有资源。

  3. 选择原始类别,单击加号图标。

  4. 指定资源:

    1. 输入唯一的资源 ID

    2. 列表,选择要用于该资源的资源代理类:lsbocfservicestonith。有关详细信息,请参见第 4.2.2 节 “支持的资源代理类”

    3. 如果选择了 ocf 作为类,则指定 OCF 资源代理的提供程序。OCF 规范允许多个供应商供应相同的资源代理。

    4. Type(类型)列表中,选择要使用的资源代理(例如 IPaddrFilesystem)。将显示该资源代理的简短描述。

      类型列表中提供的选项取决于您选择的(对于 OCF 资源还取决于提供程序中选择的内容)。

  5. Hawk 会自动显示资源的所有必需参数,以及您可以用于指定其他参数的空下拉列表。

    定义资源的参数(实例属性):

    1. 请为每个必需参数输入值。单击参数旁边的文本框,会显示简短帮助文本。

    2. 要完全删除参数,请单击参数旁边的减号图标。

    3. 要添加另一个参数,请单击空下拉列表,选择一个参数,并输入参数值。

  6. Hawk 会自动显示最重要的资源操作并建议默认值。如果在此处不修改任何设置,Hawk 会在您确认更改后立即添加建议的操作及其默认值。

    有关如何修改、添加或删除操作的细节,请参见过程 5.15, “添加或修改监视操作”

  7. Hawk 会自动列出资源的最重要元属性,例如 target-role

    修改或添加元属性

    1. 要为属性设置(其他)值,请从属性旁边的下拉框中选择一个值,或编辑输入字段中的值。

    2. 要完全删除元属性,请单击属性旁边的减号图标。

    3. 要添加另一个元属性,请单击空下拉框,并选择属性。将显示属性的默认值。如果需要,可以按上述步骤更改默认值。

  8. 单击创建资源以完成配置。屏幕顶部将会显示一条消息,告知资源是否创建成功。

图 5.5. Hawk - 基元资源

Hawk - 基元资源

5.3.3. 创建 STONITH 资源

[Important]无 STONITH 资源不受支持

不支持无 STONITH 资源的群集。

默认情况下,全局群集选项 stonith-enabled 设置为 true:如果未定义任何 STONITH 资源,群集将拒绝启动任何资源。配置一个或多个 STONITH 资源以完成 STONITH 设置。虽然 STONITH 资源的配置过程与其他资源类似,但它们的行为在某些方面有所不同。有关细节,请参见第 9.3 节 “STONITH 资源和配置”

过程 5.6. 添加 STONITH 资源

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择资源资源屏幕显示所有类型的资源的类别并列出所有定义的资源。

  3. 选择原始类别,单击加号图标。

  4. 指定资源:

    1. 输入唯一的资源 ID

    2. Class(类)列表,选择资源代理类 stonith

    3. 类型列表中,选择 用于控制 STONITH 设备的 STONITH 插件。将显示该插件的简短描述。

  5. Hawk 会自动显示该资源必需的参数。为每个参数输入值。

  6. Hawk 会显示最重要的资源操作并建议默认值。如果在此处不修改任何设置,Hawk 会在您确认后立即添加建议的操作及其默认值。

  7. 如果没有任何理由来更改元属性设置,则接受默认值。

  8. 确认更改以创建 STONITH 资源。

要完成屏蔽配置,请添加约束和/或使用克隆。有关详细信息,请参见第 9 章 屏障和 STONITH

5.3.4. 使用资源模板

如果希望创建具有类似配置的多个资源,则定义资源模板是最简单的方式。定义后,便可在基元或特定类型的约束中引用它。有关功能及使用资源模板的详细信息,请参见第 4.4.3 节 “资源模板和约束”

过程 5.7. 创建资源模板

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择资源资源屏幕显示所有类型的资源的类别及模板类别。

  3. 选择模板类别,然后单击加号图标。

  4. 输入模板 ID

  5. 像指定原始资源一样指定资源模板。遵循过程 5.5: 添加原始资源操作,从步骤 4.b 开始。

  6. 单击创建资源以完成配置。屏幕顶端将显示一条消息,告知资源模板是否创建成功。

图 5.6. Hawk - 资源模板

Hawk - 资源模板

过程 5.8. 引用资源模板

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 要在原始资源中引用新创建的资源模板,请遵循以下步骤:

    1. 在左侧导航栏中,选择资源资源屏幕显示所有类型的资源的类别。它列出所有定义的资源。

    2. 选择原始类别,单击加号图标。

    3. 输入唯一的资源 ID

    4. 激活使用模板,然后从下拉列表中选择要引用的模板。

    5. 如果需要,则按过程 5.5, “添加原始资源”中所述指定更多参数操作元属性

  3. 要在共置或顺序约束中引用新创建的资源模板,请按过程 5.10, “添加或修改共置或顺序约束”中所述继续操作。

5.3.5. 配置资源约束

配置所有资源后,指定群集应如何正确地处理它们。使用资源约束可指定资源可在哪些群集节点上运行、以何种顺序装载资源,以及特定资源依赖于哪些其他资源。

有关约束的可用类型的概述,请参见第 4.4.1 节 “约束类型”。定义约束时,还需要指定分数。有关分数及其在群集中的含义的更多信息,请参见第 4.4.2 节 “分数和无限值”

通过以下过程了解如何创建不同类型的约束。

过程 5.9. 添加或修改位置约束

对于位置约束,请指定约束 ID、资源、分数和节点:

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择约束约束屏幕显示所有类型的约束的类别。它列出所有定义的约束。

  3. 要添加新位置约束,请单击相应类别中的加号图标。

    要修改现有约束,请单击约束旁边的扳手图标,然后选择编辑约束

  4. 输入唯一的约束 ID。修改现有约束时,ID 已定义。

  5. 选择要定义约束的资源。列表中显示群集已配置的所有资源的 ID。

  6. 设置约束的分数。正值表示资源可以在下一步中指定的节点上运行。负值表示它不应在该节点上运行。将分数设置为 INFINITY 将强制资源在该节点上运行。将其设置为 -INFINITY 则表示资源不得在该节点上运行。

  7. 选择约束的节点

  8. 单击创建约束以完成配置。屏幕顶端将显示一条消息,告知约束是否创建成功。

图 5.7. Hawk - 位置约束

Hawk - 位置约束

过程 5.10. 添加或修改共置或顺序约束

对于这两种类型的约束,请指定约束 ID 和分数,然后将资源添加到依赖性链中:

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择约束约束屏幕显示所有类型的约束的类别并列出所有定义的约束。

  3. 要添加新共置顺序约束,请单击相应类别中的加号图标。

    要修改现有约束,请单击约束旁边的扳手图标,然后选择编辑约束

  4. 输入唯一的约束 ID。修改现有约束时,ID 已定义。

  5. 定义分数

    对于共置约束,分数确定了资源之间的位置关系。正值表示两个资源应在相同的节点上运行。负值表示两个资源不应在相同的节点上运行。将分数设置为 INFINITY 将强制资源在同一个节点上运行。将其设置为 -INFINITY 则表示资源不得在同一个节点上运行。分数将与其他因数结合使用,以确定放置资源的位置。

    对于顺序约束,如果分数大于零则约束是必需的,否则只是建议。默认值为 INFINITY

  6. 对于顺序约束,通常可将选项对称保持为启用状态。这指定了资源以相反顺序停止。

  7. 要定义约束的资源,请遵循以下步骤:

    1. 从列表向约束添加资源中选择一个资源。此列表显示已为群集配置的所有资源和资源模板的 ID。

    2. 要添加选定资源,请单击列表旁边的加号图标。下方将显示一个新列表。从列表中选择下一个资源。由于共置和顺序约束都定义了资源之间的依赖性,因此需要至少两个资源。

    3. 从列表向约束添加资源的其余资源中选择一个。单击加号图标添加资源。

      现在依赖性链中有两个资源。

      如果定义了顺序约束,则最上面的资源将最先启动,然后是第二个,依此类推。通常资源将以相反顺序停止。

      但是,如果定义了共置约束,则资源之间的箭头图标反映其依赖性,而不是其启动顺序。由于最上面的资源依赖于下一个资源,依此类推,因此群集将首先决定最后一个资源的放置位置,然后再根据该决定放置依赖的资源。如果无法满足约束,群集可以决定不允许运行依赖资源。

    4. 添加共置或顺序约束所需数量的资源。

    5. 如果要交换两个资源的顺序,则单击资源右侧的双箭头以在依赖性链中交换资源。

  8. 如果需要,可为每个资源指定更多参数,如角色(MasterSlaveStartedStopped)。

  9. 单击创建约束以完成配置。屏幕顶端将显示一条消息,告知约束是否创建成功。

图 5.8. Hawk - 共置约束

Hawk - 共置约束

可使用资源集作为定义共置或顺序约束的备用格式。它们有与组相同的排序语义。

过程 5.11. 对共置或顺序约束使用资源集

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 过程 5.10, “添加或修改共置或顺序约束”中所述,定义共置或顺序约束。

  3. 已将资源添加到依赖性链后,可通过单击右侧的链图标将这些资源放入资源集中。资源集通过属于集合的资源周围的框架显现。

  4. 还可向资源集添加多个资源或创建多个资源集。

  5. 要从资源集提取资源,请单击相应资源上方的剪刀图标。

    该资源将从集合中删除,并回到依赖性链中的原始位置。

  6. 确认更改以完成约束配置。

有关配置约束的更多信息以及顺序和共置基本概念的详细背景信息,请参见 http://www.clusterlabs.org/doc/ 上提供的文档:

  • Pacemaker Explained(Pacemaker 配置说明),Resource Constraints(资源约束)一章

  • 共置说明

  • 顺序说明

过程 5.12. 删除约束

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择约束约束屏幕显示所有类型的约束的类别并列出所有定义的约束。

  3. 单击约束旁边的扳手图标,然后选择删除约束

5.3.6. 指定资源故障转移节点

资源在出现故障时会自动重启动。如果在当前节点上无法实现重启动,或如果在当前节点上发生 N 次故障,则资源会试图故障转移到其他节点。您可以多次定义资源的故障次数(migration-threshold),在该值之后资源会迁移到新节点。如果群集中存在两个以上的节点,则由 High Availability 软件选择特定资源故障转移的节点。

可按照以下步骤指定资源将故障转移到的特定节点:

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 过程 5.9, “添加或修改位置约束”中所述,为资源配置位置约束。

  3. 过程 5.5: 添加原始资源步骤 7 中所述,为资源添加 migration-threshold 元属性,并输入 migration-threshold 的。值应是小于 INFINITY 的正数。

  4. 如果希望资源的失败计数自动失效,请按过程 5.5: 添加原始资源步骤 7 中所述为该资源添加 failure-timeout 元属性,并输入 failure-timeout 的

  5. 如果希望为资源指定更多的首选故障转移节点,请创建更多的位置约束。

例 4.6 “迁移阈值 - 流程”中演示了有关迁移阈值和失败计数的流程。

您可以随时手动清理资源的失败计数,而不是让资源的失败计数自动失效。有关详细信息,请参见第 5.4.2 节 “清理资源”

5.3.7. 指定资源故障回复节点(资源黏性)

当原始节点恢复联机并位于群集中时,资源可能会故障回复到该节点。要防止这种情况发生或指定其他节点供资源故障回复,请更改资源的粘性值。也可以在创建资源之际或之后指定资源粘性。

有关不同资源粘性值的含义,请参见第 4.4.5 节 “故障回复节点”

过程 5.13. 指定资源黏性

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 过程 5.5: 添加原始资源步骤 7 中所述,为资源添加 resource-stickiness 元属性。

  3. 为 resource-stickiness 指定介于 -INFINITYINFINITY 之间的值。

5.3.8. 根据负载影响配置资源放置

并非所有资源都相等。某些资源(如 Xen guest)需要托管它们的节点满足其容量要求。如果资源的放置导致其组合需求超过了提供的容量,则资源的性能会降低,或者失败。

要考虑此情况,可使用 High Availability Extension 指定以下参数:

  1. 特定节点提供的容量。

  2. 特定资源需要的容量。

  3. 资源放置整体策略。

利用率属性用于配置资源的要求及节点提供的容量。High Availability Extension 现在还提供了一些方法,用于自动检测和配置节点容量和资源要求。有关更多细节和配置示例,请参见第 4.4.6 节 “根据资源负载影响放置资源”

要显示节点的容量值(通过利用率属性定义)以及节点上运行的资源当前占用的容量,请在 Hawk 中切换到群集状态屏幕。选择所需的节点,单击该节点旁边的扳手图标,然后选择显示细节

图 5.9. Hawk - 查看节点的容量值

Hawk - 查看节点的容量值

配置了节点提供的容量和资源需要的容量后,需要设置全局群集选项中的放置策略,否则容量配置将不会生效。可使用多个策略来调度负载:例如,可以将负载集中到尽可能少的节点上,或使其均匀分布在所有可用节点上。有关更多信息,请参见第 4.4.6 节 “根据资源负载影响放置资源”

过程 5.14. 设置放置策略

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集属性可查看全局群集选项及其当前值。

  3. 添加新属性下拉列表中,选择 placement-strategy

  4. 根据要求,将放置策略设置为适当值。

  5. 单击加号图标添加新的群集属性(包括其值)。

  6. 确认更改。

5.3.9. 配置资源监视

High Availability Extension 不仅能检测到节点故障,还能检测到节点上的单个资源失败。如果要确保资源正在运行,则为其配置资源监视。要进行资源监视,请指定超时和/或启动延迟值及间隔。间隔告诉 CRM 检查资源状态的频率。您还可以设置特定参数,如为 startstop 操作设置 timeout

过程 5.15. 添加或修改监视操作

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择资源资源屏幕显示所有类型的资源的类别并列出所有定义的资源。

  3. 选择要修改的资源,单击资源旁边的扳手图标,然后选择编辑资源。将显示资源定义。Hawk 会自动显示最重要的资源操作(monitorstartstop)并建议默认值。

  4. 更改操作的值:

    1. 单击操作旁边的钢笔图标。

    2. 在打开的对话框中,指定以下值:

      • 输入以秒为单位的 timeout 值。在指定的超时期间后,操作会被视为 failed。PE 会决定如何做或执行您在监视操作的 On Fail(失败时)字段中指定的操作。

      • 对于监视操作,请定义以秒为单位的监视 interval

      如果需要,请使用监视对话框底端的空下拉框来添加更多参数,如失败时(如果此操作失败该怎么办?)或需要(发生此操作前需要满足哪些条件?)。

    3. 确认更改以关闭对话框并返回到编辑资源屏幕。

  5. 要完全删除操作,请单击操作旁边的减号图标。

  6. 要添加另一个操作,请单击空下拉框,并选择操作。将显示操作的默认值。如果需要,可以通过单击笔形图标更改默认值。

  7. 单击应用更改以完成配置。屏幕顶端将显示一条消息,告知资源是否更新成功。

有关在资源监视程序检测到故障时将发生的操作,请参见第 4.3 节 “资源监视”

要查看资源失败,请切换到 Hawk 中的群集状态屏幕,然后选择您感兴趣的资源。单击资源旁边的扳手图标,然后选择显示细节

5.3.10. 配置群集资源组

某些群集资源依赖于其他组件或资源,并且要求每个组件或资源都按特定顺序启动并在同一服务器上运行。为了简化此配置,我们支持组的概念。

有关资源组的示例以及组及其属性的更多信息,请参见第 4.2.5.1 节 “组”

[Note]空组

组必须包含至少一个资源,否则配置无效。在 Hawk 中,在创建组时不能创建或修改基元。添加组之前,创建原始资源并根据需要配置它们。有关详细信息,请参见过程 5.5, “添加原始资源”

过程 5.16. 添加资源组

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择资源资源屏幕显示所有类型的资源的类别并列出所有定义的资源。

  3. 选择类别,然后单击加号图标。

  4. 输入唯一的组 ID

  5. 要定义组成员,请在可用原始资源列表中选择一个或多个条目,然后单击 < 图标将其添加到组子项列表中。所有新的组成员都会添加到列表的底部。要定义组成员的顺序,当前需要按所需顺序添加和删除组成员。

  6. 如果需要,请按添加原始资源步骤 7中所述修改或添加元属性

  7. 单击创建组以完成配置。屏幕顶端将显示一条消息,告知组是否创建成功。

图 5.10. Hawk - 资源组

Hawk - 资源组

5.3.11. 配置克隆资源

如果希望特定资源同时在群集中的多个节点上运行,请将这些资源配置为克隆资源。例如,克隆适用于 STONITH 之类的资源和 OCFS2 之类的群集文件系统。可以克隆提供的任何资源。资源的资源代理支持克隆。根据运行克隆资源的节点,其配置可能也有所不同。

有关可用类型的资源克隆的概述,请参见第 4.2.5.2 节 “克隆资源”

[Note]克隆资源的子资源

克隆资源可以包含原始资源或组作为子资源。在 Hawk 中,在创建克隆时不能创建或修改子资源。添加克隆资源之前,创建子资源并根据需要配置它们。有关细节,请参见过程 5.5, “添加原始资源”过程 5.16, “添加资源组”

过程 5.17. 添加或修改克隆

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择资源资源屏幕显示所有类型的资源的类别并列出所有定义的资源。

  3. 选择克隆类别,然后单击加号图标。

  4. 输入唯一的克隆 ID

  5. 子资源列表中,选择原始资源或组作为克隆资源的子资源。

  6. 如果需要,请按过程 5.5: 添加原始资源步骤 7中所述修改或添加元属性

  7. 单击创建克隆以完成配置。屏幕顶端将显示一条消息,告知克隆资源是否创建成功。

图 5.11. Hawk - 克隆资源

Hawk - 克隆资源

5.4. 管理群集资源

除了配置群集资源以外,Hawk 还可用于从群集状态屏幕管理现有资源。有关此屏幕、其不同视图及用于状态信息的颜色代码的一般概述,请参见第 5.1.2 节 “主屏幕:群集状态”

可从任何群集状态视图执行基本资源操作。树视图表视图都允许您直接访问各个资源。但是,在摘要视图中,需要先单击资源类别中的链接才能显示资源细节。此详细视图还会显示为该资源设置的任何属性。对于基元资源(普通基元、组子项、克隆或多状态资源),将会额外显示以下信息:

  • 资源的错误计数

    上次失败时戳(如果错误计数 > 0)

  • 操作历史记录和时间(调用 ID、操作、上次运行时戳、执行时间、队列时间、返回代码和上次更改时戳)

图 5.12. 查看资源的细节

查看资源的细节

5.4.1. 启动资源

启动群集资源之前,应确保资源设置正确。例如,如果要使用 Apache 服务器作为群集资源,请先设置 Apache 服务器。完成 Apache 配置,然后才能启动群集中的相应资源。

[Note]不要处理由群集管理的服务

通过 High Availability Extension 管理资源时,不得以其他方式(在群集外,例如手动或者引导时或重引导时)启动或停止同一资源。High Availability Extension 软件负责所有服务的启动或停止操作。

但是,如果要检查服务是否正确配置,可手动启动该服务,但请确保在 High Availability 接管前再次停止该服务。

要对群集当前管理的资源进行干预,请按过程 5.23, “对资源应用维护模式”中所述先将资源设置为维护模式

使用 Hawk 创建资源时,可通过 target-role 元属性设置其初始状态。如果将其值设置为 stopped,则该资源在创建后不会自动启动。

过程 5.18. 启动新资源

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集状态

  3. 在其中某个资源视图中,单击资源旁边的扳手图标,然后选择启动。要继续,请确认显示的消息。资源启动后,Hawk 会将资源的颜色更改为绿色并显示运行该资源的节点。

5.4.2. 清理资源

如果资源失败,它会自动重启动,但每次失败都会增加资源的失败计数。

如果已为资源设置 migration-threshold,当失败次数达到迁移阈值时,节点将不再运行该资源。

可自动重设置资源的失败计数(通过设置资源的 failure-timeout 选项),也可如下所述手动重设置。

过程 5.19. 清理资源

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集状态

  3. 在其中某个资源视图中,单击失败的资源旁边的扳手图标,然后选择清理。要继续,请确认显示的消息。

    这将对指定节点上的指定资源执行命令 crm_resource -Ccrm_failcount -D

有关更多信息,请参见手册页 crm_resourcecrm_failcount

5.4.3. 删除群集资源

如果需要从群集中删除资源,请遵循以下过程以免出现配置错误:

过程 5.20. 删除群集资源

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集状态

  3. 过程 5.19, “清理资源”中所述清理所有节点上的资源。

  4. 在其中某个资源视图中,单击资源旁边的扳手图标,然后选择停止。要继续,请确认显示的消息。

  5. 如果资源已停止,则单击它旁边的扳手图标,然后选择删除资源

5.4.4. 迁移群集资源

第 5.3.6 节 “指定资源故障转移节点”中所述,如果软件或硬件发生故障,群集会根据可自定义的特定参数(例如,迁移阈值或资源粘性),自动进行资源故障转移(迁移)。除此之外,还可以手动将资源迁移到群集中的其他节点。或者,您可以将它移出当前节点,并让群集决定要将它放置到哪个位置。

过程 5.21. 手动迁移资源

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集状态

  3. 在其中某个资源视图中,单击资源旁边的扳手图标,然后选择移动

  4. 在新窗口中,选择资源要移动到的节点。

    此操作将创建目标节点分数为 INFINITY 的位置约束。

  5. 或者,选择移动资源离开当前节点

    此操作将为当前节点创建分数为 -INFINITY 的位置约束。

  6. 单击 OK(确定)确认迁移。

要使资源重新移回,请按如下操作:

过程 5.22. 清除迁移约束

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集状态

  3. 在其中某个资源视图中,单击资源旁边的扳手图标,然后选择丢弃重定位规则。要继续,请确认显示的消息。

    这将使用 crm_resource -U 命令。资源可以移回到其原始位置,也可以留在当前位置(取决于资源黏性)。

有关更多信息,请参见 crm_resource 手册页,或“Pacemaker Explained”(Pacemaker 配置说明),可从 http://www.clusterlabs.org/doc/ 获取。请参见“Resource Migration”(资源迁移)一章。

5.4.5. 使用维护模式

您可能不时地需要对单个群集组件或整个群集执行测试或维护任务 - 更改群集配置、更新单个节点的软件包,或者将群集升级到更高的产品版本。

为此,High Availability Extension 提供了数种级别的 maintenance 选项:

[Warning]数据丢失风险

当服务在群集控制下运行时,如果您需要执行任何测试或维护任务,请确保遵照以下说明操作:

  1. 在开始之前,请将单个资源、节点或整个群集设置到维护模式。这有助于避免一些不利的负面影响,例如,资源未按顺序启动、群集节点之间出现 CIB 不同步的风险,或者丢失数据。

  2. 执行维护任务或测试。

  3. 完成后,请解除维护模式以开始正常的群集操作。

有关处于维护模式的资源和群集的行为的细节,请参见第 4.7 节 “维护模式”

过程 5.23. 对资源应用维护模式

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择资源。 选择要置于维护模式或不受管理模式的资源,单击该资源旁边的扳手图标,然后选择编辑资源

  3. 打开元属性类别。

  4. 从空下拉列表中,选择 maintenance 属性,然后单击加号图标添加该属性。

  5. 选中 maintenance 旁边的复选框,以将 maintenance 属性设置为 yes

  6. 确认更改。

  7. 完成该资源的维护任务之后,取消选中该资源的 maintenance 属性旁边的复选框。

    此后,资源将再次由 High Availability Extension 软件管理。

过程 5.24. 对节点应用维护模式

有时候需要将单个节点设置为维护模式。

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集状态

  3. 在其中某个节点视图中,单击节点旁边的扳手图标,然后选择维护

    这会将以下实例属性添加至节点:maintenance="true"。先前在维护模式节点上运行的资源将变为 unmanaged。在该节点脱离维护模式之前,系统不会向其分配新的资源。

  4. 要停用维护模式,请单击节点旁边的扳手图标,然后选择就绪

过程 5.25. 对群集应用维护模式

要对整个群集设置或取消设置维护模式,请执行以下操作:

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集配置

  3. CRM 配置组中,从空下拉框中选择 maintenance-mode 属性,然后单击加号图标添加该属性。

  4. 要设置 maintenance-mode,请选中 maintenance-mode 旁边的复选框,并确认您所做的更改。

  5. 完成整个群集的维护任务之后,取消选中 maintenance-mode 属性旁边的复选框。

    此后,High Availability Extension 将再次接管群集管理工作。

5.4.6. 查看群集历史记录

Hawk 提供了以下可行的方法来查看群集上的过去的事件(按照不同级别和不同细节)。

过程 5.26. 查看节点或资源的最近事件

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集状态

  3. 树视图表视图中,单击感兴趣的资源或节点旁边的扳手图标,然后选择查看最近的事件

    打开的对话框显示过去一小时的事件。

过程 5.27. 使用历史记录浏览器查看转换

历史记录浏览器提供可由您定义的时间范围内的转换信息。它还会列出其先前运行的记录,并允许您删除不再需要的报告。历史记录浏览器使用 hb_report 提供的信息。

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择历史记录浏览器

  3. 默认情况下,浏览期限设置为过去 24 小时。要修改此期限,请设置其他开始时间结束时间

  4. 单击显示开始收集转换数据。

图 5.13. Hawk - 历史记录报告

Hawk - 历史记录报告

接着将显示下列信息:

历史记录浏览器结果

时间

群集中所有过去转换的时间线。

PE 输入/节点

每个转换的 pe-input* 文件以及在其上生成文件的节点。对于每次转换,群集都会保存一份提供给策略引擎的状态副本,以此作为输入。会记录此存档的路径。这些 pe-input* 文件只在指定协调器 (DC) 上生成,但由于 DC 可以更改,多个节点中也可能有 pe-input* 文件。这些文件显示策略引擎 (PE) 计划要执行的操作。

细节/完整日志

打开含有属于该特定转换的日志记录数据片段的弹出窗口。窗口显示的细节数量会有所不同:单击细节会显示 crm history transition peinput 的输出(其中包括资源代理的日志讯息)。而完整日志还会包括来自 penginecrmdlrmd 的细节,其细节数量与 crm history transition log peinput 相当。

图形/XML

每个转换的图形和 XML 表示法。如果选择显示图形,将重调用 PE(使用 pe-input* 文件)并生成转换的图形显示。或者也可以查看图形的 XML 表示。

图 5.14. Hawk 历史记录报告 - 转换图

Hawk 历史记录报告 - 转换图

差别

如果列出两个或多个 pe-input,差别链接将会出现在每对 pe-input 的右边。单击它以显示配置和状态和差别。

5.4.7. 浏览可能的失败方案

Hawk 提供模拟器供您了解可能会发生的失败情况以防患于未然。切换到模拟器模式后,您可以更改节点的状态、添加或编辑资源和约束、更改群集配置或执行多个资源操作,以查看当这些事件发生时群集会如何操作。只要激活了模拟器模式,一个控制对话框就会显示在群集状态屏幕的右下角。模拟器会收集来自所有屏幕的更改,并将这些更改添加到它自己的内部事件队列中。除非在控制对话框中手动触发,否则不会用排入队列的事件执行模拟运行。进行模拟运行之后,您可以查看和分析已发生情况的细节(日志片段、转换图和 CIB 状态)。

过程 5.28. 切换到模拟器模式

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 通过单击顶行中(用户名旁边)的扳手图标并选择模拟器,激活模拟器模式。

    Hawk 的背景颜色更改表示模拟器处于活动状态。群集状态屏幕右下角将显示一个模拟器控制对话框。它的标题模拟器(初始状态)指示目前尚未运行任何模拟器。

  3. 填充模拟器的事件队列:

    1. 要模拟节点的状态更改:单击模拟器控制对话框中的 +节点。选择要操作的节点,然后选择其目标状态。确认更改以将其添加到控制器对话框中列出的事件队列中。

    2. 要模拟资源操作:单击模拟器控制对话框中的 +操作。选择要操作的资源和要模拟的操作。如果必要,请定义间隔。选择要运行操作的节点及目标结果。确认更改以将其添加到控制器对话框中列出的事件队列中。

  4. 对要模拟的任何其他节点状态更改或资源操作重复上述步骤。

    图 5.15. Hawk - 使用注入的事件的模拟器

    Hawk - 使用注入的事件的模拟器

  5. 要注入想要模拟的其他更改,请执行以下操作:

    1. 切换到下列一个或多个 Hawk 屏幕:群集状态设置向导群集配置资源约束

      [Note]历史记录浏览器和模拟器模式

      单击历史记录浏览器选项卡将停用模拟器模式。

    2. 根据需要在屏幕上添加或修改参数。

      模拟器会收集来自所有屏幕的更改,并将这些更改添加到它自己的内部事件队列中。

    3. 要返回到模拟器控制对话框,请切换到群集状态屏幕或单击顶行中的扳手图标,然后再次单击模拟器

  6. 如果要删除注入的状态中列出的事件,请选择相应的条目,然后单击列表下的减号图标。

  7. 通过在模拟器控制对话框中单击运行,开始模拟运行。群集状态屏幕显示模拟的事件。例如,如果将一个节点标记为未清理,则它现在将显示为脱机,其所有资源都将停止。模拟器控制对话框更改为模拟器(最终状态)

    图 5.16. Hawk - 处于最终状态的模拟器

    Hawk - 处于最终状态的模拟器

  8. 要查看关于模拟运行的更详细的信息:

    1. 单击模拟器对话框中的细节链接可以查看已发生情况的日志片段。

    2. 单击图形链接可以显示转换图。

    3. 单击 CIB(初始)可以显示初始 CIB 状态。要查看转换后的 CIB,请单击 CIB(输出)

  9. 要用新模拟从头开始,请使用重设置按钮。

  10. 要退出模拟模式,请关闭模拟器控制对话框。群集状态屏幕切换回其正常颜色并显示当前的群集状态。

5.4.8. 生成群集报告

为了对群集上发生的问题进行分析和诊断,Hawk 可以生成一个群集报告,用来收集群集中所有节点的信息。

过程 5.29. 生成 hb_report

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 单击顶行中用户名旁边的扳手图标,然后选择生成 hb_report

  3. 默认情况下,检查期限为过去一小时。要修改此期限,请设置其他开始时间结束时间

  4. 单击生成

  5. 创建报告后,通过单击相应链接下载 *.tar.bz2 文件。

有关 hb_reportcrm_report 等工具涵盖的日志文件的更多信息,请参见如何创建包含所有群集节点分析的报告?

5.5. 监视多个群集

Hawk 可用作监视多个群集的单一管理点。Hawk 的群集仪表板允许您查看多个群集的摘要,并且每个摘要将会列出节点、资源、票据(如果您使用的是地域群集)的数目及其状态。摘要还会显示在相应群集中是否发生过任何失败。

群集仪表板中显示的群集信息存储在一份永久性 Cookie 中。因此,您需要决定要在群集仪表板上查看哪个 Hawk 实例,并始终使用该实例。这样一来,运行 Hawk 的计算机甚至不需要属于任何群集 - 该计算机可以是不相关的独立系统。

过程 5.30. 使用 Hawk 监视多个群集

先决条件

  • 要从 Hawk 的群集仪表板监视的所有群集都必须运行 SUSE Linux Enterprise High Availability Extension 11 SP4。无法监视运行旧版 SUSE Linux Enterprise High Availability Extension 的群集。

  • 如果您没有在每个群集节点上用您自己的证书(或官方证书授权机构签名的证书)替换 Hawk 的自我签名证书,请在每个群集的每个节点上至少登录一次 Hawk。校验证书(并在浏览器中添加例外以绕过警告)。

  • 如果使用的是 Mozilla Firefox,则必须将其首选项更改为接受第三方 Cookie。否则,不会设置来自受监视群集的 cookie 并因此阻止您登录所要尝试监视的群集。

  1. 在要用于监视多个群集的计算机上启动 Hawk Web 服务。

  2. 启动 Web 浏览器并输入运行 Hawk 的计算机的 IP 地址或主机名作为 URL:

    https://IPaddress:7630/
  3. 在 Hawk 登录屏幕上,单击右上角中的仪表板链接。

    添加群集对话框随即打开。

  4. 输入自定义的群集名称,用于在群集仪表板中标识该群集。

  5. 输入其中一个群集节点的主机名,然后确认更改。

    群集仪表板随即会打开并显示您所添加的群集的摘要。

  6. 要将更多群集添加至仪表板,请单击加号图标,然后输入下一个群集的细节。

    图 5.17. Hawk - 群集仪表板

    Hawk - 群集仪表板

  7. 要从仪表板中删除群集,请单击群集摘要旁边的 x 图标。

  8. 要查看关于群集的更多细节,请单击仪表板上群集框中的某处。

    这会打开一个新的浏览器窗口或新的浏览器选项卡。如果您当前未登录群集,则这会打开 Hawk 登录屏幕。登录之后,Hawk 会在摘要视图中显示该群集的群集状态。从摘要视图中,可以按照常规方式使用 Hawk 来管理群集。

  9. 因为群集仪表板始终在独立的浏览器窗口或选项卡中打开,所以在 Hawk 中您可以轻松地在仪表板与单个群集管理之间切换。

节点或资源的任何状态更改会都在在群集仪表板中立即反映出来。

5.6. 用于地域群集的 Hawk 功能

有关与地理位置分散群集(地域群集)相关的 Hawk 功能的更多细节,请参见《Quick Start Geo Clustering for SUSE Linux Enterprise High Availability Extension》(Geo Clustering for SUSE Linux Enterprise High Availability Extension 快速入门)。

5.7. 查错

Hawk 日志文件

/srv/www/hawk/log 中找到 Hawk 日志文件。如果不能访问 Hawk,则检查这些文件。

如果使用 Hawk 时遇到了启动或停止资源的问题,请查看 Pacemaker 日志消息。默认情况下,Pacemaker 将消息记录到 /var/log/messages 中。

身份验证失败

如果不能以 haclient 组成员的新用户身份登录到 Hawk(或者如果在 Hawk 接受此用户的登录之前遇到延迟),请使用 rcnscd stop 停止 nscd 守护程序并重试。

替换自签名证书

要避免在首次启动 Hawk 时收到有关自我签名证书的警告,请将自动创建的证书替换为您自己的证书或官方证书颁发机构 (CA) 签名的证书。

证书储存在 /etc/lighttpd/certs/hawk-combined.pem 中,并包含密钥和证书。

更改许可权限,让文件只能由 root 用户访问:

root # chown root.root /etc/lighttpd/certs/hawk-combined.pem
      chmod 600 /etc/lighttpd/certs/hawk-combined.pem

创建或接收新密钥和证书后,请执行以下命令将它们合并:

root # cat keyfile certificatefile > /etc/lighttpd/certs/hawk-combined.pem
使用历史记录浏览器/hb_report 后登录 Hawk 失败

根据您在历史记录浏览器hb_report 中定义的时间段以及在此时间段内群集中发生的事件,Hawk 可能会收集大量信息。这些信息储存在 /tmp 目录下的日志文件中。这可能占用节点上剩余的可用磁盘空间。如果在使用历史记录浏览器hb_report 后 Hawk 不予响应,请检查群集节点的硬盘并删除相应的日志文件。

群集仪表板:无法连接至主机

如果未能将群集添加至 Hawk 的仪表板,请检查过程 5.30, “使用 Hawk 监视多个群集”中列出的先决条件。

群集仪表板:无法访问节点

群集仪表板仅轮询每个群集中一个节点的状态。如果被轮询的节点已关闭,则仪表板会循环以轮询下一个节点。在这种情况下,Hawk 会简要显示关于不可访问的节点的警告消息。在 Hawk 找到另一个要连接的节点之后,该消息便会消失。

第 6 章配置和管理群集资源 (GUI)

摘要

本章介绍了 Pacemaker GUI,并包含配置和管理群集资源时所需的基本任务:修改全局群集选项、创建基本和高级类型的资源(组和克隆)、配置约束、指定故障转移节点和故障回复节点、配置资源监视以及手动启动、清理、删除和迁移资源。

通过以下两个包提供 GUI 支持:pacemaker-mgmt 包,它包含 GUI 后端(mgmtd 守护程序)。它必须安装在要使用 GUI 连接到的所有群集节点上。在要运行 GUI 的任何计算机上,安装 pacemaker-mgmt-client 包。

[Note]用户身份验证

要从 Pacemaker GUI 登录到群集,相应用户必须是 haclient 组的成员。安装过程会创建名为 hacluster 的 Linux 用户并将该用户添加到 haclient 组中。

使用 Pacemaker GUI 之前,请为 hacluster 用户设置密码,或创建作为 haclient 组成员的新用户。

在要使用 Pacemaker GUI 连接到的所有节点上执行此操作。

6.1. Pacemaker GUI - 概述

要启动 Pacemaker GUI,请在命令行输入 crm_gui。要访问配置和管理选项,需要登录到群集。

6.1.1. 登录到群集

要连接到群集,请选择 连接+登录。默认情况下,Server(服务器)字段会显示本地主机的 IP 地址,User Name(用户名)字段会显示 hacluster。输入该用户的密码以继续。

图 6.1. 连接群集

连接群集

如果是远程运行 Pacemaker GUI,请为服务器字段输入群集节点的 IP 地址。对于用户名,您还可以使用属于 haclient 组的任何其他用户连接到群集。

6.1.2. 主窗口

连接后,系统会打开主窗口:

图 6.2. Pacemaker GUI - 主窗口

Pacemaker GUI - 主窗口

[Note]Pacemaker GUI 中的可用功能

默认情况下,以 roothacluster 身份登录的用户对所有群集配置任务具有完全读写访问权。但是,访问控制列表可用于定义细化的访问权限。

如果在 CRM 中启用了 ACL,则 Pacemaker GUI 中的可用功能取决于指派给您的用户角色和访问权限。

要查看或修改 CRM、资源、节点或约束之类的群集组件,可在左窗格中选择配置类别的相应子条目,然后使用右窗格中的可用选项。此外,使用 Pacemaker GUI 可轻松查看、编辑、导入和导出以下子项 CIB 的 XML 片段:资源默认值操作默认值节点资源约束。选择任意配置子项,然后在窗口右上角选择显示+XML 模式

如果已配置资源,请单击左窗格中的管理类别以显示群集及其资源的状态。使用此视图还可将节点设置为 standby 以及修改节点的管理状态(它们当前是否由群集管理)。要访问资源的主要功能(启动、停止、清理或迁移资源),可在右窗格中选择资源并使用工具栏中的图标。或者右键单击资源并从上下文菜单中选择相应的菜单项。

使用 Pacemaker GUI 还可在不同视图模式之间切换,从而影响软件行为以及隐藏或显示特定方面的信息:

简单模式

可用于以类似于向导的模式添加资源。创建和修改资源时,显示子对象的常用选项卡,使您能够通过选项卡直接添加此类型的对象。

可通过在左窗格中选择 CRM 配置项查看和更改所有可用的全局群集选项。右窗格随即显示其当前设置的值。如果没有为选项设置任何特定值,它将显示默认值。

专家方式

可用于以类似于向导的模式或通过对话框窗口添加资源。创建和修改资源时,如果 CIB 中已存在特定的子对象类型,将仅显示相应的选项卡。添加新的子对象时,系统将提示您选择对象类型,从而可添加所有支持的子对象类型。

在左窗格中选择 CRM 配置项时,仅显示实际已设置的全局群集选项的值,同时隐藏将自动使用默认值的所有群集选项(因为未设置任何值)。在此模式中,只能使用各个配置对话框修改全局群集选项。

黑客模式

与专家模式具有相同功能。可用于添加包括特定规则的其他属性集,以使配置更加动态。例如,可以使节点根据承载它的节点而具有不同的实例属性。此外,还可以为元属性集添加基于时间的规则,以确定属性的生效时间。

窗口的状态栏还会显示当前的活动模式。

以下各节将指导您完成配置群集选项和资源时需要执行的主要任务,并介绍如何使用 Pacemaker GUI 管理资源。除非另有说明,否则逐步指示信息反映了在简单模式下执行的过程。

6.2. 配置全局群集选项

全局群集选项控制群集在遇到特定情况时的行为方式。它们组成若干集合,并可通过 Pacemaker GUI 和 crm 外壳之类的群集管理工具进行查看和修改。在大多数情况下可保留预定义值。但为了使群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:

过程 6.1. 修改全局群集选项

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 选择视图+简单模式

  3. 在左窗格中,选择 CRM 配置可查看全局群集选项及其当前值。

  4. 根据群集要求,将无仲裁人数策略设置为适当值。

  5. 如果由于某些原因需要禁用屏蔽,请取消选择 stonith 已启用

    [Important]无 STONITH 资源不受支持

    不支持未启用 STONITH 的群集。

  6. 单击应用确认更改。

通过在左窗格中选择 CRM 配置并单击默认值可随时切换回所有选项的默认值。

6.3. 配置群集资源

作为群集管理员,您需要在群集中为服务器上运行的每个资源或应用程序创建群集资源。群集资源可以包括网站、电子邮件服务器、数据库、文件系统、虚拟机和任何其他基于服务器的应用程序或在任意时间对用户都可用的服务。

有关可创建的资源类型的概述,请参见第 4.2.3 节 “资源类型”

6.3.1. 创建简单群集资源

要创建最基本的资源类型,请按如下操作:

过程 6.2. 添加原始资源

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中,选择资源并单击添加+Primitive(原始)。

  3. 在下一个对话框中,为资源设置以下参数:

    1. 为资源输入唯一的 ID

    2. 列表中,选择要用于该资源的资源代理类:lsbocfservicestonith。有关详细信息,请参见 第 4.2.2 节 “支持的资源代理类”

    3. 如果选择了 ocf 作为类,请同时指定 OCF 资源代理的提供程序。OCF 规范允许多个供应商供应相同的资源代理。

    4. Type(类型)列表中,选择要使用的资源代理(例如 IPaddrFilesystem)。该资源代理的简短描述显示在下方。

      Type(类型)列表中提供的选项取决于您选择的 Class(类)(对于 OCF 资源还取决于 Provider(提供程序)中选择的内容)。

    5. Options(选项)下面,设置 Initial state of resource(资源的初始状态)。

    6. 如果希望群集监视资源状况是否仍然正常,请激活 Add monitor operation(添加监视操作)。

  4. 单击 Forward(前进)。下一个窗口将显示已为该资源定义的参数摘要。系统会列出该资源的所有必需的 Instance Attributes(实例属性)。若要设置相应的值,需要对实例属性进行编辑。可能还需要添加更多的属性,具体取决于您的部署和设置。有关如何操作的细节,请参考过程 6.3, “添加或修改元属性和实例属性”

  5. 如果所有参数都按您的需要进行了设置,请单击应用完成该资源的配置。配置对话框关闭,主窗口显示新添加的资源。

在创建资源的过程中或创建资源后,可以添加或修改资源的以下参数:

过程 6.3. 添加或修改元属性和实例属性

  1. 在 Pacemaker GUI 主窗口中,单击左窗格中的资源可查看已为群集配置的资源。

  2. 在右窗格中,选择要修改的资源并单击 Edit(编辑)(或双击资源)。下一个窗口将显示已为该资源定义的基本资源参数和 Meta Attributes(元属性)、Instance Attributes(实例属性)或 Operations(操作)。

  3. 要添加新的元属性或实例属性,请选择相应的选项卡并单击 Add(添加)。

  4. 选择要添加的属性名称。将显示简短的描述

  5. 如果需要,请指定属性。否则,使用该属性的默认值。

  6. 单击 OK(确定)确认更改。新添加或新修改的属性便显示在选项卡上。

  7. 如果所有参数都按您的需要进行了设置,请单击 OK(确定)完成该资源的配置。配置对话框关闭,主窗口显示已修改的资源。

[Tip]资源的 XML 源代码

使用 Pacemaker GUI 可查看从已定义的参数生成的 XML 片段。对于单独资源,可在资源配置对话框右上角选择显示+XML 模式

要访问已配置的所有资源的 XML 表示,请在左窗格中单击资源,然后在主窗口右上角选择显示+XML 模式

编辑器将显示 XML 代码,允许您 Import(导入)或 Export(导出)XML 元素或手动编辑 XML 代码。

6.3.2. 创建 STONITH 资源

[Important]无 STONITH 资源不受支持

不支持未运行 STONITH 的群集。

默认情况下,全局群集选项 stonith-enabled 设置为 true:如果未定义任何 STONITH 资源,群集将拒绝启动任何资源。要完成 STONITH 设置,需要配置一个或多个 STONITH 资源。虽然 STONITH 资源的配置过程与其他资源类似,但它们的行为在某些方面有所不同。有关细节,请参见第 9.3 节 “STONITH 资源和配置”

过程 6.4. 添加 STONITH 资源

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中,选择资源并单击添加+Primitive(原始)。

  3. 在下一个对话框中,为资源设置以下参数:

    1. 为资源输入唯一的 ID

    2. Class(类)列表,选择资源代理类 stonith

    3. 类型列表中,选择 用于控制 STONITH 设备的 STONITH 插件。该插件的简短描述显示在下方。

    4. Options(选项)下面,设置 Initial state of resource(资源的初始状态)。

    5. 如果希望群集监视屏蔽设备,请激活 Add monitor operation(添加监视操作)。有关更多信息,请参考第 9.4 节 “监视屏蔽设备”

  4. 单击 Forward(前进)。下一个窗口将显示已为该资源定义的参数摘要。系统会针对所选 STONITH 插件列出所有必需的实例属性。若要设置相应的值,需要对实例属性进行编辑。可能还需要添加更多的属性或监视操作,具体取决于您的部署和设置。有关如何操作的细节,请参考过程 6.3, “添加或修改元属性和实例属性”第 6.3.8 节 “配置资源监视”

  5. 如果所有参数都按您的需要进行了设置,请单击 Apply(应用)完成该资源的配置。配置对话框关闭,主窗口显示新添加的资源。

要完成屏蔽配置,请添加约束和/或使用克隆。有关详细信息,请参见第 9 章 屏障和 STONITH

6.3.3. 使用资源模板

如果希望创建具有类似配置的多个资源,则定义资源模板是最简单的方式。定义后,就可在原始资源或特定类型的约束中引用它。有关功能及使用资源模板的详细信息,请参考第 4.4.3 节 “资源模板和约束”

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中,选择资源,然后单击添加+模板

  3. 为模板输入唯一的 ID

  4. 像指定原始资源一样指定资源模板。遵循过程 6.2: 添加原始资源操作,从步骤 3.b开始。

  5. 如果所有参数都按您的需要进行了设置,请单击应用完成资源模板的配置。配置对话框关闭,主窗口显示新添加的资源模板。

过程 6.5. 引用资源模板

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 要在原始资源中引用新创建的资源模板,请遵循以下步骤:

    1. 在左窗格中,选择资源并单击添加+Primitive(原始)。

    2. 输入唯一的 ID,并指定提供程序类型

    3. 选择要引用的模板

    4. 如果要设置派生自该模板的特定实例属性、操作或元属性,请继续按过程 6.2, “添加原始资源”中所述配置资源。

  3. 要在共置或顺序约束中引用新创建的资源模板:

    1. 分别按过程 6.7, “添加或修改共置约束”过程 6.8, “添加或修改顺序约束”中所述配置约束。

    2. 对于共置约束,资源下拉列表将显示已配置的所有资源和资源模板的 ID。从此列表中选择要引用的模板。

    3. 类似地,对于顺序约束,首先然后下拉列表将显示资源和资源列表。从这些列表中选择要引用的模板。

6.3.4. 配置资源约束

配置好所有资源只是完成了该任务的一部分。即便群集熟悉所有必需资源,它可能还无法进行正确处理。资源约束允许您指定在哪些群集节点上运行资源、以何种顺序装载资源,以及特定资源依赖于哪些其他资源。

有关可用约束类型的概述,请参见第 4.4.1 节 “约束类型”。定义约束时,还需要指定分数。有关分数及其在群集中的含义的更多信息,请参见第 4.4.2 节 “分数和无限值”

通过以下过程了解如何创建不同类型的约束。

过程 6.6. 添加或修改位置约束

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在 Pacemaker GUI 主窗口中,单击左窗格中的约束以查看已为群集配置的约束。

  3. 在左窗格中,选择 Constraints(约束)并单击 Add(添加)。

  4. 选择 Resource Location(资源位置)并单击 OK(确定)。

  5. 为约束输入唯一的 ID。修改现有约束时,ID 已经定义并显示在配置对话框中。

  6. 选择要定义约束的资源。列表中显示群集已配置的所有资源的 ID。

  7. 设置约束的分数。正值表示资源可以在以下指定的节点上运行。负值表示它不应在该节点上运行。将分数设置为 INFINITY 将强制资源在该节点上运行。将其设置为 -INFINITY 则表示资源不得在该节点上运行。

  8. 选择约束的节点

  9. 如果将 Node(节点)和 Score(分数)字段留为空白,也可以通过单击Add+Rule(添加 > 规则)来添加规则。要添加有效期,只需单击 Add+Lifetime(添加>有效期)即可。

  10. 如果所有参数都按您的需要进行了设置,请单击 OK(确定)完成约束配置。配置对话框关闭,主窗口显示新添加或新修改的约束。

过程 6.7. 添加或修改共置约束

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在 Pacemaker GUI 主窗口中,单击左窗格中的约束以查看已为群集配置的约束。

  3. 在左窗格中,选择 Constraints(约束)并单击 Add(添加)。

  4. 选择资源共置,然后单击确定

  5. 为约束输入唯一的 ID。修改现有约束时,ID 已经定义并显示在配置对话框中。

  6. 选择要充当共置源的资源。此列表显示已为群集配置的所有资源和资源模板的 ID。

    如果约束无法满足,群集可以决定根本不允许运行资源。

  7. 如果将 Resource(资源)和 With Resource(排列资源)字段都保留为空,也可以通过单击Add+Resource Set(添加 > 资源集)来添加资源集。要添加有效期,只需单击 Add+Lifetime(添加 > 有效期)即可。

  8. 共置资源中,定义共置目标。群集先决定将此资源放置在什么位置,再决定将此资源放置在 Resource(资源)字段的什么位置。

  9. 定义 Score(分数)可确定两个资源的位置关系。正值表示两个资源应在相同的节点上运行。负值表示两个资源不应在相同的节点上运行。将分数设置为 INFINITY 将强制资源在同一个节点上运行。将其设置为 -INFINITY 则表示资源不得在同一个节点上运行。分数将与其他因数结合使用,以确定放置资源的位置。

  10. 如果需要,请指定进一步参数,如 Resource Role(资源角色)。

    根据选择的参数和选项,显示简短描述,解释您正在配置的共置约束的效果。

  11. 如果所有参数都按您的需要进行了设置,请单击 OK(确定)完成约束配置。配置对话框关闭,主窗口显示新添加或新修改的约束。

过程 6.8. 添加或修改顺序约束

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在 Pacemaker GUI 主窗口中,单击左窗格中的约束以查看已为群集配置的约束。

  3. 在左窗格中,选择 Constraints(约束)并单击 Add(添加)。

  4. 选择 Resource Order(资源顺序)并单击 OK(确定)。

  5. 为约束输入唯一的 ID。修改现有约束时,ID 已经定义并显示在配置对话框中。

  6. 使用首先定义必须先于使用然后指定的资源启动的资源。

  7. 使用 Then(然后)定义必须后于 First(首先)资源启动的资源。

    根据选择的参数和选项,显示简短描述,解释您正在配置的顺序约束的效果。

  8. 如果需要,定义更多参数,例如:

    1. 指定分数。如果分数大于零,则约束为强制性的,否则只是建议。默认值为 INFINITY

    2. 对称指定值。如果为 true,则资源将按相反顺序停止。默认值为 true

  9. 如果所有参数都按您的需要进行了设置,请单击 OK(确定)完成约束配置。配置对话框关闭,主窗口显示新添加或新修改的约束。

您可以访问和修改在 Pacemaker GUI 的约束视图下配置的所有约束。

图 6.3. Pacemaker GUI - 约束

Pacemaker GUI - 约束

6.3.5. 指定资源故障转移节点

资源在出现故障时会自动重启动。如果在当前节点上无法实现重启动,或如果在当前节点上发生 N 次故障,则资源会试图故障转移到其他节点。您可以多次定义资源的故障次数(migration-threshold),在该值之后资源会迁移到新节点。如果群集中存在两个以上的节点,则特定资源故障转移的节点由 High Availability 软件选择。

但您可以按如下操作指定资源将故障转移到的节点:

  1. 过程 6.6, “添加或修改位置约束”中所述,为该资源配置位置约束。

  2. 过程 6.3, “添加或修改元属性和实例属性”中所述,为该资源添加 migration-threshold 元属性,并输入迁移阈值的。值应该是小于 INFINITY 的正值。

  3. 如果希望资源的故障计数自动失效,请按过程 6.3, “添加或修改元属性和实例属性”中所述为该资源添加 failure-timeout 元属性,并输入故障超时的

  4. 如果希望为资源指定更多的首选故障转移节点,请创建更多的位置约束。

有关群集中与迁移阈值和失败计数相关的进程流示例,请参见例 4.6 “迁移阈值 - 流程”

您可以随时手动清理资源的失败计数,而不是让资源的失败计数自动失效。有关细节,请参见第 6.4.2 节 “清理资源”

6.3.6. 指定资源故障回复节点(资源黏性)

当原始节点恢复联机并位于群集中时,资源可能会故障回复到该节点。如果要防止资源在故障转移前故障回复到之前运行的节点,或者要指定此资源故障回复到的其他节点,必须更改其资源粘性值。可以在创建资源时指定资源粘性或稍后指定。

有关不同资源粘性值的含义,请参见第 4.4.5 节 “故障回复节点”

过程 6.9. 指定资源黏性

  1. 过程 6.3, “添加或修改元属性和实例属性”中所述为资源添加 resource-stickiness 元属性。

  2. 在资源黏性中,指定介于 -INFINITYINFINITY 之间的值。

6.3.7. 根据负载影响配置资源放置

并非所有资源都相等。某些资源(如 Xen guest)需要托管它们的节点满足其容量要求。如果所放置资源的总需求超过了提供的容量,则资源性能将降低(或甚至失败)。

要考虑此情况,可使用 High Availability Extension 指定以下参数:

  1. 特定节点提供的容量。

  2. 特定资源需要的容量。

  3. 资源放置整体策略。

利用率属性用于配置资源的要求及节点提供的容量。High Availability Extension 现在还提供了一些方法,用于自动检测和配置节点容量和资源要求。有关更多细节和配置示例,请参见第 4.4.6 节 “根据资源负载影响放置资源”

要手动配置资源要求和节点提供的容量,请按过程 6.10, “添加或修改利用率属性”中所述继续。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。

过程 6.10. 添加或修改利用率属性

在下例中,我们假定您已有群集节点和资源的基本配置,现在想要配置特定节点提供的容量以及特定资源需要的容量。添加利用率属性的过程基本相同,仅步骤 2步骤 3有所不同。

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 指定节点提供的容量:

    1. 在左窗格中,单击节点

    2. 在右窗格中,选择要配置其容量的节点,然后单击编辑

  3. 指定资源需要的容量:

    1. 在左窗格中,单击资源

    2. 在右窗格中,选择要配置其容量的资源,然后单击编辑

  4. 选择利用率选项卡,然后单击添加以添加利用率属性。

  5. 为新属性输入名称。可以根据个人喜好命名利用率属性。

  6. 为属性输入,然后单击确定。属性值必须是整数。

  7. 如果需要更多利用率属性,请重复步骤 5步骤 6

    利用率选项卡显示已为此节点或资源定义的利用率属性的摘要。

  8. 根据意愿设置所有参数后,单击确定关闭配置对话框。

图 6.4 “节点容量配置示例”显示了将向运行在此节点上的资源提供 8 个 CPU 单元和 16 GB 内存的节点配置:

图 6.4. 节点容量配置示例

节点容量配置示例

需要使用节点 4096 个内存单元和 4 个 CPU 单元的资源的配置示例如下所示:

图 6.5. 资源容量配置示例

资源容量配置示例

(手动或自动)配置了节点提供的容量和资源需要的容量后,需要设置全局群集选项中的放置策略,否则容量配置将不会生效。可使用多个策略来调度负载:例如,可以将负载集中到尽可能少的节点上,或使其均匀分布在所有可用节点上。有关更多信息,请参见第 4.4.6 节 “根据资源负载影响放置资源”

过程 6.11. 设置放置策略

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 选择视图+简单模式

  3. 在左窗格中,选择 CRM 配置可查看全局群集选项及其当前值。

  4. 根据要求,将放置策略设置为适当值。

  5. 如果由于某些原因需要禁用屏蔽,请取消选择 Stonith Enabled

  6. 单击应用确认更改。

6.3.8. 配置资源监视

虽然 High Availability Extension 可以检测节点故障,但也能够检测节点上的单个资源何时发生故障。如果要确保资源正在运行,必须为其配置资源监视。资源监视包括指定超时和/或启动延迟值以及间隔。间隔告诉 CRM 检查资源状态的频率。您还可以设置特定参数,如为 startstop 操作设置 timeout

过程 6.12. 添加或修改监视操作

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在 Pacemaker GUI 主窗口中,单击左窗格中的资源可查看已为群集配置的资源。

  3. 在右窗格中,选择要修改的资源并单击 Edit(编辑)。下一个窗口将显示为该资源定义的基本资源参数、元属性、实例属性和操作。

  4. 要添加新的监视操作,请选择各自选项卡并单击 Add(添加)。

    要修改现有操作,请选择各自条目并单击 Edit(编辑)。

  5. Name(名称)中,选择要执行的操作,例如 monitorstartstop

    如下所示的参数取决于您在此处所作的选择。

  6. timeout(超时)字段中,输入以秒表示的值。在指定的超时期间后,操作会被视为 failed。PE 会决定如何做或执行您在监视操作的 On Fail(失败时)字段中指定的操作。

  7. 如果需要,可展开可选部分并添加参数,如失败时(如果此操作失败将执行什么操作?)或 Requires(要求)(发生此操作前需要满足哪些条件?)。

  8. 如果所有参数都按您的需要进行了设置,请单击 OK(确定)完成该资源的配置。配置对话框关闭,主窗口显示已修改的资源。

有关在资源监视程序检测到故障时将发生的操作,请参见第 4.3 节 “资源监视”

要在 Pacemaker GUI 中查看资源故障,请在左窗格中单击管理,然后选择要在右窗格中查看其细节的资源。对于失败的资源,右窗格中间将显示资源的失败计数和上次失败信息(在迁移阈值项下面)。

图 6.6. 查看资源的失败计数

查看资源的失败计数

6.3.9. 配置群集资源组

某些群集资源依赖于其他组件或资源,并且要求每个组件或资源都按特定顺序启动并在同一服务器上一起运行。为了简化此配置,我们支持组的概念。

有关资源组的示例以及组及其属性的更多信息,请参见第 4.2.5.1 节 “组”

[Note]空组

组必须包含至少一个资源,否则配置无效。

过程 6.13. 添加资源组

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中,选择 Resources(资源)并单击 Add+Group(添加 > 组)。

  3. 为组输入唯一的 ID

  4. Options(选项)下面,设置 Initial state of resource(资源的初始状态)并单击 Forward(前进)。

  5. 在下一个步骤中,可以添加原始资源作为组的子资源。它们的创建方式与过程 6.2, “添加原始资源”中描述的步骤类似。

  6. 如果所有参数都按您的需要进行了设置,请单击 Apply(应用)完成原始资源的配置。

  7. 在下一个窗口中,可以通过再次选择 Primitive(原始)并单击 OK(确定)来继续为组添加子资源。

    当不希望再向组中添加原始资源时,单击 Cancel(取消)。下一个窗口将显示您为该组定义的参数摘要。系统会列出组的 Meta Attributes(元属性)和 Primitives(原始)资源。资源在 Primitive(原始)选项卡上的位置代表资源在群集中的启动顺序。

  8. 由于资源在组中的顺序很重要,可使用向上向下按钮对组中的原始资源进行排序。

  9. 如果所有参数都按您的需要进行了设置,请单击 OK(确定)完成该组的配置。配置对话框关闭,主窗口显示新创建或新修改的组。

图 6.7. Pacemaker GUI - 组

Pacemaker GUI - 组

假定您已按过程 6.13, “添加资源组”中所述创建资源组。以下过程说明了如何修改组以与例 4.1 “Web 服务器的资源组”匹配。

过程 6.14. 向现有组添加资源

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中,切换到 Resources(资源)视图;在右窗格中,选择要修改的组并单击 Edit(编辑)。下一个窗口将显示为该资源定义的基本组参数以及元属性和原始资源。

  3. 单击 Primitives(原始)选项卡并单击 Add(添加)。

  4. 在下一个对话框中,若要将 IP 地址添加为组的子资源,请设置以下参数:

    1. 输入唯一的 ID(例如,my_ipaddress)。

    2. Class(类)列表中,选择 ocf 作为资源代理类。

    3. 在 OCF 资源代理的 Provider(提供程序)中,选择 heartbeat

    4. Type(类型)列表中,选择 IPaddr 作为资源代理。

    5. 单击 Forward(前进)。

    6. Instance Attribute(实例属性)选项卡中,选择 IP 条目并单击 Edit(编辑)(或双击 IP 条目)。

    7. 中输入所需的 IP 地址,例如 192.168.1.180

    8. 单击 OK(确定)并单击 Apply(应用)。组配置对话框将显示新添加的原始资源。

  5. 再次单击 Add(添加)可添加下一个子资源(文件系统和 Web 服务器)。

  6. 设置每个子资源各自的参数,其过程类似于从步骤 4.a步骤 4.h的步骤,直到为组配置完所有子资源为止。

    由于已按子资源在群集中所需的启动顺序对子资源进行了配置,所以 Primitives(原始)选项卡上的顺序已是正确的。

  7. 如果需要更改组的资源顺序,请使用向上向下按钮对原始资源选项卡上的资源排序。

  8. 要从组中删除资源,请在 Primitive(原始)选项卡上选择资源,并单击 Remove(删除)。

  9. 单击 OK(确定)完成该组的配置。配置对话框关闭,主窗口显示修改后的组。

6.3.10. 配置克隆资源

您可能希望某些资源在群集的多个节点上同时运行。为此,必须将资源配置为克隆资源。可以配置为克隆资源的资源示例包括 STONITH 和群集文件系统(如 OCFS2)。可以克隆提供的任何资源。资源的资源代理支持此操作。克隆资源的配置甚至也有不同,具体取决于资源驻留的节点。

有关可用的资源克隆类型的概述,请参见第 4.2.5.2 节 “克隆资源”

过程 6.15. 添加或修改克隆

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中,选择 Resources(资源)并单击 Add+Clone(添加 > 克隆)。

  3. 为克隆资源输入唯一的 ID

  4. Options(选项)下面,设置 Initial state of resource(资源的初始状态)。

  5. 为克隆资源激活要设置的各个选项,并单击 Forward(前进)。

  6. 在下一个步骤中,可以添加 Primitive(原始)或 Group(组)作为克隆资源的子资源。创建方式与过程 6.2, “添加原始资源”过程 6.13, “添加资源组”中描述的过程类似。

  7. 如果所有参数都按您的需要进行了设置,请单击 Apply(应用)完成复制配置。

6.4. 管理群集资源

除可用于配置群集资源外,Pacemaker GUI 还可用于管理现有资源。要切换到管理视图并访问可用选项,请在左窗格中单击管理

图 6.8. Pacemaker GUI - 管理

Pacemaker GUI - 管理

6.4.1. 启动资源

启动群集资源之前,应确保资源设置正确。例如,如果要使用 Apache 服务器作为群集资源,请先设置 Apache 服务器并完成 Apache 配置,然后才能启动群集中的相应资源。

[Note]不要处理由群集管理的服务

使用 High Availability Extension 管理资源时,不得以其他方式(在群集外,例如手动或在引导时或重引导时)启动或停止同一资源。High Availability Extension 软件负责所有服务的启动或停止操作。

但是,如果要检查服务是否正确配置,可手动启动该服务,但请确保在 High Availability 接管前再次停止该服务。

要对群集当前管理的资源进行干预,请按第 6.4.5 节 “更改资源的管理模式”中所述先将资源设置为 unmanaged mode

在使用 Pacemaker GUI 创建资源的过程中,可以使用 target-role 元属性设置资源的初始状态。如果其值已设置为 stopped,则资源不会在创建后自动启动。

过程 6.16. 启动新资源

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中单击管理

  3. 在右窗格中,右键单击资源并从上下文菜单中选择启动(或使用工具栏中的启动资源图标)。

6.4.2. 清理资源

如果资源失败,它会自动重启动,但每次失败都会增加资源的失败计数。要使用 Pacemaker GUI 查看资源的失败计数,请在左窗格中单击管理,然后在右窗格中选择该资源。如果资源失败,其失败计数将显示在右窗格中间(迁移阈值项下面)。

如果已为此资源设置 migration-threshold,那么一旦失败计数达到迁移阈值,节点将不再能运行此资源。

可自动重设置资源的失败计数(通过设置资源的 failure-timeout 选项),也可如下所述手动重设置。

过程 6.17. 清理资源

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中单击管理

  3. 在右窗格中,右键单击相应资源,然后从上下文菜单中选择清理资源(或使用工具栏中的清理资源图标)。

    这将对指定节点上的指定资源执行命令 crm_resource -Ccrm_failcount -D

有关更多信息,请参见手册页 crm_resourcecrm_failcount

6.4.3. 删除群集资源

如果需要从群集中删除资源,请遵循以下过程以免出现配置错误:

[Note]删除引用的资源

如果群集资源的 ID 由任何约束引用,则无法删除该群集资源。如果您无法删除某个资源,请检查引用资源 ID 的位置,然后先从该约束删除资源。

过程 6.18. 删除群集资源

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中单击管理

  3. 在右窗格中选择相应的资源。

  4. 过程 6.17, “清理资源”中所述清理所有节点上的资源。

  5. 停止资源。

  6. 删除与资源相关的所有约束,否则将无法删除资源。

6.4.4. 迁移群集资源

第 6.3.5 节 “指定资源故障转移节点”中所述,如果软件或硬件发生故障,群集会根据可自定义的特定参数(例如,迁移阈值或资源粘性),自动进行资源故障转移(迁移)。除此之外,还可以手动将资源迁移到群集中的其他节点。

过程 6.19. 手动迁移资源

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中单击管理

  3. 在右窗格中右键单击相应资源,然后选择迁移资源

  4. 在新窗口的 To Node(目标节点)中,选择资源要移动到的节点。此操作将创建目标节点分数为 INFINITY 的位置约束。

  5. 如果只是希望临时迁移资源,请激活 Duration(持续时间)并输入资源迁移到新节点的时间范围。在持续时间到期后,资源可以移回到其原始位置,也可以留在当前位置(取决于资源黏性)。

  6. 如果资源无法迁移(若资源在当前节点上的黏性和约束总分数大于 INFINITY),请激活 Force(强制)选项。它通过创建当前位置规则和 -INFINITY 的分数强制资源移动。

    [Note]

    这将阻止资源在使用清除迁移约束删除约束或持续时间到期之前在此节点上运行。

  7. 单击 OK(确定)确认迁移。

要使资源重新移回,请按如下操作:

过程 6.20. 清除迁移约束

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中单击管理

  3. 在右窗格中右键单击相应资源,然后选择清除迁移约束

    这将使用 crm_resource -U 命令。资源可以移回到其原始位置,也可以留在当前位置(取决于资源黏性)。

有关更多信息,请参见 crm_resource 手册页,或“Pacemaker Explained”(Pacemaker 配置说明),可从 http://www.clusterlabs.org/doc/ 获取。请参见“Resource Migration”(资源迁移)一章。

6.4.5. 更改资源的管理模式

由群集管理资源时,不得以其他方式(在群集外)处理资源。要维护各个资源,可将相应资源设置为 unmanaged mode,在此模式下可在群集外修改资源。

过程 6.21. 更改资源的管理模式

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中单击管理

  3. 在右窗格中右键单击相应资源,然后从上下文菜单中选择不受管资源

  4. 完成此资源的维护任务后,在右窗格中再次右键单击相应资源,然后选择管理资源

    此后,资源将再次由 High Availability Extension 软件管理。

第 7 章配置和管理群集资源(命令行)

摘要

要配置和管理群集资源,可使用图形用户界面 (Pacemaker GUI) 或 crm 命令行实用程序。有关 GUI 方法,请参见第 6 章 配置和管理群集资源 (GUI)

本章介绍了命令行工具 crm,并包含此工具的概述以及如何使用模板,主要介绍如何配置和管理群集资源:创建基本和高级类型的资源(组和克隆资源)、配置约束、指定故障转移节点和故障回复节点、配置资源监视以及手动启动、清理、删除和迁移资源。

[Note]用户特权

需要足够的特权才能管理群集。crm 命令及其子命令都需要以 root 用户或 CRM 拥有者用户(通常为 hacluster 用户)的身份来运行。

但是,user 选项允许您作为普通(非特权)用户运行 crm 及其子命令,而且必要时能使用 sudo 更改其 ID。例如,在以下命令中,crm 将使用 hacluster 作为特权用户 ID:

root # crm options user hacluster

请注意,您需要将 /etc/sudoers 设置为 sudo 不要求提供密码。

7.1. crmsh - 概述

crm 命令有多个子命令,这些子命令用于管理资源、CIB、节点和资源代理等。它提供了全面的帮助系统,并嵌入了示例。所有示例都遵循附录 A 中所述的命名约定。

可通过以下方式之一访问帮助:

[Tip]区分外壳提示符和交互式 crm 提示符

为了方便阅读所有代码和示例,本章使用了以下符号来区分外壳提示符和交互式 crm 提示符:

  • 针对 root 用户的外壳提示符:

    root # 
  • 交互式 crmsh 提示符(在终端支持彩色的情况下将以绿色显示):

    crm(live)# 

7.1.1. 获得帮助

可通过以下方式之一访问帮助:

  • 输出 crm 及其命令行选项的用法:

    root # crm --help
  • 列出所有可用的命令:

    root # crm help
  • 访问其他帮助部分,而不只是命令参考:

    root # crm help topics
  • 查看 configure 子命令的完整帮助文本:

    root # crm configure help
  • 打印 configure 子命令的语法、用法及示例:

    root # crm configure help group

    也可能是:

    root # crm help configure group

几乎所有 help 子命令(请不要与 --help 选项混淆)的输出都会打开文本编辑器。此文本编辑器允许您向上/向下滚动,以便更加方便地阅读帮助文本。要退出文本编辑器,请按 Q 键。

[Tip]在 Bash 和交互式外壳中使用 Tab 键补全

crmsh 不仅为交互式外壳提供 Tab 键补全,还全面支持在 Bash 中直接使用此功能。例如,键入 crm help config→| 会补全文字(就像在交互式外壳中一样)。

7.1.2. 执行 crmsh 的子命令

crm 命令本身可按以下方式使用:

  • 直接.  将所有子命令连接到 crm 中,按 Enter,您将立即看到输出。例如,输入 crm help ra 可获取有关 ra 子命令(资源代理)的信息。

  • 作为 crm 外壳脚本.  在脚本中使用 crm 及其子命令。这可通过以下两种方式实现:

    root # crm -f script.cli
    root # crm < script.cli

    脚本可包含任何 crm 命令。例如:

    # A small script file for crm
    status
    node list

    以哈希符号 (#) 开头的所有行都是注释,可忽略。如果行过长,可在结尾处插入反斜杠 (\),然后在下一行继续。建议缩进属于特定子命令的行以便于阅读。

  • 作为内部外壳交互.  输入 crm 以进入内壳。提示更改为 crm(live)。使用 help 可获取可用子命令的概述。由于内壳具有不同级别的子命令,您可以键入一个子命令然后按 Enter进入相应的级别。

    例如,如果输入 resource,则进入资源管理级别。提示符将更改为 crm(live)resource#。如果要退出内壳,可使用命令 quitbyeexit。如果需要返回上一个级别,可使用 backupendcd

    您可以键入 crm 和相应的子命令(不含任何选项)来直接输入级别,然后按 Enter

    内壳还支持使用 Tab 键完成子命令和资源。输入命令的开头,按 →|crm 完成相应对象。

除了前面说明的方法外,crmsh 还支持执行同步命令。使用 -w 选项可以激活该命令。 如果已启动不带 -w 选项的 crm,则可以稍后通过将用户自选设置的 wait 设为 yes (options wait yes) 来启用它。如果此选项已启用,则 crm 将会等到事务完成为止。 事务一经启用,就会打印出点以指示进度。同步命令执行仅适用于 resource start 之类的命令。

[Note]管理和配置子命令之间的区别

crm 工具有管理功能(子命令 resourcenode),可用于配置(cibconfigure)。

以下小节概述了 crm 工具的一些重要方面。

7.1.3. 显示有关 OCF 资源代理的信息

由于在群集配置中一直需要处理资源代理,crm 工具包含了 ra 命令。使用该命令可以显示有关资源代理的信息并对其进行管理(如需其他信息,另请参见第 4.2.2 节 “支持的资源代理类”):

root # crm ra
crm(live)ra# 

命令 classes 可列出所有类和提供程序:

crm(live)ra# classes
 lsb
 ocf / heartbeat linbit lvm2 ocfs2 pacemaker
 service
 stonith

要获取某个类(和提供程序)的所有可用资源的概述,可使用 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 退出查看器。可在附录 B, 设置简单测试资源的示例中查找配置示例。

[Tip]直接使用 crm

在之前的示例中,我们使用了 crm 命令的内壳。但是您不一定非要使用它。将相应子命令添加到 crm 中也可获得相同的结果。例如,在外壳中输入 crm ra list ocf 可以列出所有 OCF 资源代理。

7.1.4. 使用配置模板

配置模板为 crm 外壳提供现成的群集配置。请不要将其与资源模板(如第 7.3.2 节 “创建资源模板”中所述)混淆。资源模板只适用于群集,而不适用于 crm 外壳。

配置模板只需稍作更改,即可满足特定用户的需要。每次使用模板创建配置时,都会出现警告消息,提示您哪些可以稍后编辑以供将来自定义。

以下步骤显示了如何创建简单有效的 Apache 配置:

  1. root 用户身份登录,然后启动 crm 交互式外壳:

    root # crm configure
  2. 从配置模板创建一个新配置:

    1. 切换到 template 子命令:

      crm(live)configure# template
    2. 列出可用的配置模板:

      crm(live)configure template# list templates
      gfs2-base   filesystem  virtual-ip  apache   clvm     ocfs2    gfs2
    3. 确定需要的配置模板。由于我们需要 Apache 配置,因此选择了 apache 模板并将其命名为 g-intranet

      crm(live)configure template# new g-intranet apache
      INFO: pulling in template apache
      INFO: pulling in template virtual-ip
  3. 定义参数:

    1. 列出您创建的配置:

      crm(live)configure template# list
      g-intranet
    2. 显示需要由您填充的最少的必要更改:

      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. 调用首选的文本编辑器,填写显示为错误(如步骤 3.b 中所示)的所有行:

      crm(live)configure template# edit
  4. 显示配置并检查配置是否有效(粗体文本取决于您在步骤 3.c 中进入的配置):

    crm(live)configure template# show
    primitive virtual-ip ocf:heartbeat:IPaddr \
        params ip="192.168.1.101"
    primitive apache ocf:heartbeat:apache \
        params configfile="/etc/apache2/httpd.conf"
        monitor apache 120s:60s
    group g-intranet \
        apache virtual-ip
  5. 应用配置:

    crm(live)configure template# apply
    crm(live)configure# cd ..
    crm(live)configure# show
  6. 将更改提交到 CIB:

    crm(live)configure# commit

如果知道细节,可以更加简化命令。上述过程可汇总为外壳上的以下命令:

root # 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。

7.1.5. 使用阴影配置进行测试

阴影配置可用于测试不同的配置方案。如果创建了多个阴影配置,则可逐一测试这些配置,以查看更改的影响。

一般的流程显示如下:

  1. root 用户身份登录,然后启动 crm 交互式外壳:

    root # crm configure
  2. 创建新的阴影配置:

    crm(live)configure# cib new myNewConfig
    INFO: myNewConfig shadow CIB created

    如果省略阴影 CIB 的名称,则会创建临时名称 @tmp@

  3. 如果要将当前的活动配置复制到阴影配置中,可使用以下命令,否则请跳过此步骤:

    crm(myNewConfig)# cib reset myNewConfig

    使用上面的命令便于稍后修改现有资源。

  4. 照常进行更改。创建阴影配置后,会应用所有更改。要保存所有更改,请使用以下命令:

    crm(myNewConfig)# commit
  5. 如果再次需要活动群集配置,可使用以下命令切换回此配置:

    crm(myNewConfig)configure# cib use live
    crm(live)# 

7.1.6. 调试配置更改

将配置更改装载回群集之前,建议使用 ptest 复查更改。使用 ptest 命令可显示提交更改后产生的操作图。需要 graphviz 包才能显示这些图。以下示例是一个抄本,添加了监视操作:

root # 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

7.1.7. 群集图表

要输出如图 5.2 “Hawk - 群集图表”中所示的群集图表,请使用命令 crm configure graph。它会在当前的窗口上显示当前配置,因此需要配备 X11。

如果您希望使用可缩放矢量图 (SVG),请使用以下命令:

root # crm configure graph dot config.svg svg

7.2. 配置全局群集选项

全局群集选项控制群集在遇到特定情况时的行为方式。通常可保留预定义值。但为了使群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:

过程 7.1. 使用 crm 修改全局群集选项

  1. root 用户身份登录,然后启动 crm 工具:

    root # crm configure
  2. 使用以下命令可以仅为两个节点的群集设置选项:

    crm(live)configure# property no-quorum-policy=ignore
    crm(live)configure# property stonith-enabled=true
    [Important]无 STONITH 资源不受支持

    不支持无 STONITH 资源的群集。

  3. 显示更改:

    crm(live)configure# show
    property $id="cib-bootstrap-options" \
       dc-version="1.1.1-530add2a3721a0ecccb24660a97dbfdaa3e68f51" \
       cluster-infrastructure="openais" \
       expected-quorum-votes="2" \
       no-quorum-policy="ignore" \
       stonith-enabled="true"
  4. 提交更改并退出:

    crm(live)configure# commit
    crm(live)configure# exit

7.3. 配置群集资源

作为群集管理员,您需要在群集中为服务器上运行的每个资源或应用程序创建群集资源。群集资源可以包括网站、电子邮件服务器、数据库、文件系统、虚拟机和任何其他基于服务器的应用程序或在任意时间对用户都可用的服务。

有关可创建的资源类型的概述,请参见第 4.2.3 节 “资源类型”

7.3.1. 创建群集资源

有三种 RA(资源代理)类型可用于群集(有关背景信息,请参见第 4.2.2 节 “支持的资源代理类”)。要将新资源添加到群集,请按如下操作:

  1. root 用户身份登录,然后启动 crm 工具:

    root # crm configure
  2. 配置原始 IP 地址:

    crm(live)configure# primitive myIP ocf:heartbeat:IPaddr \
         params ip=127.0.0.99 op monitor interval=60s

    上一命令配置了名称为 myIP原始资源。需要选择一个类(此处为 ocf)、提供程序 (heartbeat) 和类型 (IPaddr)。此外,此原始资源还需要其他参数,如 IP 地址。根据设置更改地址。

  3. 显示您所做的更改并进行复查:

    crm(live)configure# show
  4. 提交更改使其生效:

    crm(live)configure# commit

7.3.2. 创建资源模板

如果希望使用类似的配置创建多个资源,则资源模板可以简化此项任务。有关一些基本背景信息,另请参见第 4.4.3 节 “资源模板和约束”。不要将它们与第 7.1.4 节 “使用配置模板”中的常规模板相混淆。使用 rsc_template 命令可以熟悉其语法:

root # 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 ocf:heartbeat: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    

资源模板可以在约束中引用,以表示所有原始资源都派生自该模板。这有助于生成更加清晰明了的群集配置。除了位置约束外,允许在所有约束中进行资源模板引用。共置约束不能包含多次模板引用。

7.3.3. 创建 STONITH 资源

crm 而言,STONITH 设备只是另一种资源。要创建 STONITH 资源,请执行以下操作:

  1. root 用户身份登录,然后启动 crm 交互式外壳:

    root # crm configure
  2. 使用以下命令获取所有 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
  3. 从以上列表中选择 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. If 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.
    ...
  4. 使用 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  

7.3.4. 配置资源约束

配置所有资源只是任务的一部分。即使群集了解所有需要的资源,它仍然不能正确处理它们。例如,尽量不要在 DRBD 的从属节点上装入文件系统(事实上,这将导致 DRBD 出现故障)。定义约束以使这些信息可用于群集。

有关约束的更多信息,请参见第 4.4 节 “资源约束”

7.3.4.1. 位置约束

location 命令定义资源可以、不可以或首选在哪些节点上运行。

每个资源可多次添加此类约束。对于给定资源,将评估所有 location 约束。下面是个简单的示例,它将首选在名为 alice 的节点上运行资源 fs1 的值设置为 100:

crm(live)configure# location loc-fs1 fs1 100: alice

另一个示例是使用 pingd 的位置:

crm(live)configure# primitive pingd pingd \
    params name=pingd dampen=5s multiplier=100 host_list="r1 r2"
crm(live)configure# location loc-node_pref internal_www \
    rule 50: #uname eq alice \
    rule pingd: defined pingd

位置约束的另一个用例是将基元资源分组为资源集。例如,如果多个资源依赖于 ping 属性来进行网络连接,则此功能会十分有用。以前,需要在配置中复制 -inf/ping 规则数次,因此不必要地增加了复杂性。

以下示例将创建资源集 loc-alice,该资源集引用虚拟 IP 地址 vip1vip2

crm(live)configure# primitive vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip1 ocf:heartbeat: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.3.4.2. 共置约束

colocation 命令用于定义哪些资源应在相同主机上运行,哪些资源应在不同主机上运行。

只能设置 +inf 或 -inf 的分数,定义必须始终或不得在相同节点上运行的资源。还可以使用有限分数。在这种情况下,共置将称为建议,群集可决定不遵循它们,从而在出现冲突时不停止其他资源。

例如,要始终在同一个主机上运行 ID 为 filesystem_resourcenfs_group 的两个资源,可使用以下约束:

crm(live)configure# colocation nfs_on_filesystem inf: nfs_group filesystem_resource

对于主从属配置,除在本地运行资源以外,还有必要了解当前节点是否为主节点。

7.3.4.3. 共置没有依赖性的资源集

有时,将一组资源放置在同一个节点上(定义共置约束)会很有用,但前提是这些资源之间不存在硬依赖性。

如果您想要将多个资源放置在同一个节点上,但不想疲于应对每一个资源的故障,那么,您可以使用命令 weak-bond

root # crm configure assist weak-bond RES1 RES2

weak-bond 的实施将使用给定的资源自动创建虚设资源和共置约束。

7.3.4.4. 顺序约束

order 命令定义操作顺序。

有时必需提供资源操作顺序。例如,在设备可用于系统之前,您不能装入文件系统。使用顺序约束可在另一个资源满足某个特殊条件之前或之后启动或停止某项服务,如已启动、已停止或已升级到主资源。

crm 外壳中使用以下命令配置顺序约束:

crm(live)configure# order nfs_after_filesystem mandatory: filesystem_resource nfs_group

7.3.4.5. 示例配置约束

本节中使用的示例必须与其他约束结合使用。其中最基本的就是让所有资源与 DRBD 资源的主资源在同一台计算机上运行。在启动其他资源前,DRBD 资源必须是主资源。在 DRBD 设备不是主资源时尝试装入 DRBD 只会失败。必须实现以下约束:

  • 文件系统必须始终与 DRBD 资源的主资源位于同一节点上。

    crm(live)configure# colocation filesystem_on_master inf: \
        filesystem_resource drbd_resource:Master
  • NFS 服务器及 IP 地址必须与文件系统位于相同的节点上。

    crm(live)configure# colocation nfs_with_fs inf: \
       nfs_group filesystem_resource
  • NFS 服务器及 IP 地址在装入文件系统后启动:

    crm(live)configure# order nfs_second mandatory: \
       filesystem_resource:start nfs_group
  • 必须在 DRBD 资源提升为节点上的主资源后才能在此节点上装入文件系统。

    crm(live)configure# order drbd_first inf: \
        drbd_resource:promote filesystem_resource:start

7.3.5. 指定资源故障转移节点

要确定资源故障转移,可使用元属性 migration-threshold。如果所有节点上的故障计数超过 migration-threshold,资源将处于停止状态。例如:

crm(live)configure# location rsc1-alice rsc1 100: alice

通常,rsc1 首选在 alice 上运行。如果失败,将检查 migration-threshold 并与将它与故障计数进行比较。如果故障计数 >= migration-threshold,则会将该资源迁移到具有下一个最佳自选设置的节点。

根据 start-failure-is-fatal 选项,启动失败会将失败计数设置为 inf。停止故障可导致屏蔽。如果未定义 STONITH,将不会迁移资源。

有关概述,请参见第 4.4.4 节 “故障转移节点”

7.3.6. 指定资源故障回复节点(资源黏性)

当原始节点恢复联机并位于群集中时,资源可能会故障回复到该节点。如果要防止资源故障回复到之前运行的节点,或者想为该资源指定故障回复到的其他节点,请更改其 resource stickiness 值。可以在创建资源时指定资源粘性或稍后指定。

有关概述,请参见第 4.4.5 节 “故障回复节点”

7.3.7. 根据负载影响配置资源放置

某些资源可能具有特定的容量要求,如最低内存量。如果无法满足要求,资源可能无法完全启动或运行时性能下降。

要考虑此情况,可使用 High Availability Extension 指定以下参数:

  1. 特定节点提供的容量。

  2. 特定资源需要的容量。

  3. 资源放置整体策略。

有关参数的详细背景信息和配置示例,请参见第 4.4.6 节 “根据资源负载影响放置资源”

要配置资源要求和节点提供的容量,请使用利用率属性。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。在某些情况下,某些代理(例如 VirtualDomain)将自行更新利用率。

在下例中,我们假定您已有群集节点和资源的基本配置,现在想要配置特定节点提供的容量以及特定资源需要的容量。

过程 7.2. 使用 crm 添加或修改利用率属性

  1. root 用户身份登录,然后启动 crm 交互式外壳:

    root # crm configure
  2. 要指定节点提供的容量,请使用以下命令并将占位符 NODE_1 替换为节点名称:

    crm(live)configure# node
    NODE_1 utilization memory=16384 cpu=8

    上例中的这些值将假定 NODE_1 向资源提供 16 GB 内存和 8 个 CPU 核心。

  3. 要指定资源需要的容量,请使用:

    crm(live)configure# primitive xen1 ocf:heartbeat:Xen ... \
         utilization memory=4096 cpu=4

    这会使资源消耗 nodeA 的 4096 个内存单元以及 4 个 CPU 单元。

  4. 使用 property 命令配置放置策略:

    crm(live)configure# property ...

    可用值如下:

    default(默认值)

    不考虑利用率值。根据位置得分分配资源。如果分数相等,资源将均匀分布在节点中。

    utilization

    在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。但仍会根据分配给节点的资源数执行负载平衡。

    minimal

    在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试将资源集中到尽可能少的节点上(以节省其余节点上的能耗)。

    balanced

    在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试均匀分布资源,从而优化资源性能。

    [Note]配置资源优先级

    可用的放置策略是最佳方法 - 它们不使用复杂的启发式解析程序即可始终实现最佳分配结果。确保正确设置资源优先级,以便首选调度最重要的资源。

  5. 退出 crmsh 之前提交更改:

    crm(live)configure# commit

以下示例演示了配有四台虚拟机、节点数相等的三节点群集:

crm(live)configure# node alice utilization memory="4000"
crm(live)configure# node bob utilization memory="4000"
crm(live)configure# node charly utilization memory="4000"
crm(live)configure# primitive xenA ocf:heartbeat:Xen \
    utilization hv_memory="3500" meta priority="10" \
    params xmfile="/etc/xen/shared-vm/vm1"
crm(live)configure# primitive xenB ocf:heartbeat:Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm2"
crm(live)configure# primitive xenC ocf:heartbeat:Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm3"
crm(live)configure# primitive xenD ocf:heartbeat: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.3.8. 配置资源监视

要监视资源,有两种可能性:使用 op 关键字或 monitor 命令定义监视操作。以下示例使用 op 关键字配置 Apache 资源并且每 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

有关概述,请参见第 4.3 节 “资源监视”

7.3.9. 配置群集资源组

群集的一个最常见元素是需要放置在一起的一组资源。按顺序启动,并按相反顺序停止。为了简化此配置,我们支持组的概念。以下示例创建了两个原始资源(一个 IP 地址和一个电子邮件资源):

  1. 以系统管理员的身份运行 crm 命令。提示符更改为 crm(live)

  2. 配置这两个原始资源:

    crm(live)# configure
    crm(live)configure# primitive Public-IP ocf:IPaddr:heartbeat \
       params ip=1.2.3.4 id=p.public-ip
    crm(live)configure# primitive Email lsb:exim \
       params id=p.lsb-exim
  3. 以正确顺序按其相关标识符对原始资源进行分组:

    crm(live)configure# group g-shortcut Public-IP Email

要更改组成员的顺序,请使用 configure 子命令中的 modgroup 命令。使用以下命令可将原来的 Email 移到 Public-IP 前面。(只供展示功能之用):

crm(live)configure# modgroup g-shortcut add p.lsb-exim before p.public-ip

如果您要从某个组去除资源(例如 Email),则使用以下命令:

crm(live)configure# modgroup g-shortcut remove p.lsb-exim

有关概述,请参见第 4.2.5.1 节 “组”

7.3.10. 配置克隆资源

最初将克隆构想成便于启动一个 IP 地址的 N 个实例并使它们分布在群集各处以保持负载平衡的一种方法。它们可用于其他一些用途,包括与 DLM 集成、屏蔽子系统和 OCFS2。您可以克隆资源代理支持的任何资源。

要了解有关克隆资源的更多信息,请参见第 4.2.5.2 节 “克隆资源”

7.3.10.1. 创建匿名克隆资源

要创建匿名克隆资源,首先要创建一个原始资源,然后使用 clone 命令来引用它。执行下列操作:

  1. root 用户身份登录,然后启动 crm 交互式外壳:

    root # crm configure
  2. 配置原始资源,例如:

    crm(live)configure# primitive Apache lsb:apache
  3. 克隆原始资源:

    crm(live)configure# clone cl-apache Apache 

7.3.10.2. 创建有状态/多状态克隆资源

要创建有状态的克隆资源,首先要创建一个基元资源,然后再创建多状态资源。多状态资源必须至少支持升级和降级操作。

  1. root 用户身份登录,然后启动 crm 交互式外壳:

    root # crm configure
  2. 配置原始资源。必要时更改时间间隔:

    crm(live)configure# primitive my-rsc ocf:myCorp:myAppl \
        op monitor interval=60 \
        op monitor interval=61 role=Master
  3. 创建多状态资源:

    crm(live)configure# ms ms-rsc my-rsc

7.4. 管理群集资源

除可用于配置群集资源外,crm 工具还可用于管理现有资源。以下小节进行了概述。

7.4.1. 启动新的群集资源

要启动新的群集资源,您需要相应的标识符。按如下所示继续:

  1. root 用户身份登录,然后启动 crm 交互式外壳:

    root # crm
  2. 切换到资源级别:

    crm(live)# resource
  3. 使用 start 启动资源,然后按 →| 键显示所有已知资源:

    crm(live)resource# start ID

7.4.2. 清理资源

如果资源失败,它会自动重启动,但每次失败都会增加资源的失败计数。如果已为此资源设置 migration-threshold,那么一旦失败计数达到迁移阈值,节点将不再能运行此资源。

  1. 打开外壳并以 root 用户身份登录。

  2. 获取所有资源的列表。

    root # crm resource list
      ...
    Resource Group: dlm-clvm:1
             dlm:1  (ocf::pacemaker:controld) Started 
             clvm:1 (ocf::lvm2:clvmd) Started
             cmirrord:1     (ocf::lvm2:cmirrord) Started
  3. 例如,要清理资源 dlm,请执行以下操作:

    root # crm resource cleanup dlm

7.4.3. 删除群集资源

请按如下操作以删除群集资源:

  1. root 用户身份登录,然后启动 crm 交互式外壳:

    root # crm configure
  2. 运行以下命令来获取您的资源列表:

    crm(live)# resource status

    例如,输出可能类似于以下内容(其中 myIP 是资源的相关标识符):

    myIP    (ocf::IPaddr:heartbeat) ...
  3. 删除具有相关标识符的资源(也暗指 commit):

    crm(live)# configure delete YOUR_ID
  4. 提交更改:

    crm(live)# configure commit

7.4.4. 迁移群集资源

虽然资源已配置为在发生硬件或软件故障时自动故障转移(或迁移)到群集的其他节点,但您也可以使用 Pacemaker GUI 或命令行将资源手动迁移到群集中的其他节点。

对此任务使用 migrate 命令。例如,要将 ipaddress1 资源迁移到名为 bob 的群集节点,请使用以下命令:

root # crm resource
crm(live)resource# migrate ipaddress1 bob

7.4.5. 分组/标记资源

使用标记可以一次性引用多个资源,而无需在这些资源之间创建任何共置或顺序关系。此功能十分适用于对概念上相关的资源进行分组。例如,如果有多个资源与某个数据库相关,您可以创建一个名为 databases 的标记,并将与该数据库相关的所有资源都添加到此标记:

root # crm configure databases: db1 db2 db3

这样,只需使用一条命令就能启动所有这些资源:

root # crm resource start databases

同样,也可以一次性停止所有这些资源:

root # crm resource stop databases
[Note]升级 CIB 语法版本

标记(用于对资源分组)和某些 ACL 功能仅适用于 pacemaker-2.0 或更高的 CIB 语法版本。有关如何查验这一点以及升级 CIB 版本的细节,请参见《SUSE Linux Enterprise High Availability Extension 11 SP4 高可用性指南》中“从 SLE HA 11 SP3 升级到 SLE HA 11 SP4”一节所述的指导。

7.4.6. 使用维护模式

您可能不时地需要对单个群集组件或整个群集执行测试或维护任务 - 更改群集配置、更新单个节点的软件包,或者将群集升级到更高的产品版本。

为此,High Availability Extension 提供了数种级别的 maintenance 选项:

对群集应用维护模式

如果您想要将整个群集置于维护模式,请使用以下命令:

root # crm configure property maintenance-mode=true
对节点应用维护模式

例如,要将节点 alice 置于维护模式:

root # crm node maintenance alice

crm status 命令将显示 alice 的维护模式,并且不会再向该节点分配资源。要从节点中去除维护标志,请使用:

root # crm node ready alice
对资源应用维护模式

如果要将特定的资源设置为维护模式,请使用 meta 命令。例如,要将资源 ipaddress 置于维护模式,请输入:

root # crm meta ipaddress set maintenance true
[Warning]数据丢失风险

当服务在群集控制下运行时,如果您需要执行任何测试或维护任务,请确保遵照以下说明操作:

  1. 在开始之前,请将单个资源、节点或整个群集设置到维护模式。这有助于避免一些不利的负面影响,例如,资源未按顺序启动、群集节点之间出现 CIB 不同步的风险,或者丢失数据。

  2. 执行维护任务或测试。

  3. 完成后,请解除维护模式以开始正常的群集操作。

有关处于维护模式的资源和群集的行为的细节,请参见第 4.7 节 “维护模式”

7.5. 设置独立于 cib.xml 的密码

如果群集配置包含密码之类的敏感信息,应将其储存在本地文件中。这样的话,这些参数将永远不会记录到或导入支持报告中。

使用 secret 前,最好先运行 show 命令了解一下所有资源的概况:

root # crm configure show
primitive mydb ocf:heartbeat:mysql \
   params replication_user=admin ...

如果希望为上面的 mydb 资源设置密码,请使用以下命令:

root # crm resource secret mydb set passwd linux
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]

使用以下命令可以取回保存的密码:

root # crm resource secret mydb show passwd
linux

请注意,节点之间需要同步参数,使用 crm resource secret 命令可以帮助您处理好同步问题。强烈建议仅使用此命令管理机密参数。

7.6. 检索历史记录信息

调查群集的历史记录是一项复杂的任务。为简化此任务,crm 外壳包含 history 命令及其子命令。假定已正确配置 SSH。

每个群集都会移动状态、迁移资源或启动重要进程。这些操作均可通过 history 子命令进行检索。还可使用过程 5.27, “使用历史记录浏览器查看转换”中所述的 Hawk。

默认情况下,所有 history 命令会查看最近一小时的事件。要更改此时间段,请使用 limit 子命令。语法为:

root # crm history
crm(live)history# limit FROM_TIME [TO_TIME]

有效示例如下所示:

limit4:00pm , limit16:00

上述两个命令表达同一个意思:今天下午 4 点。

limit2012/01/12 6pm

2012 年 1 月 12 日下午 6 点

limit"Sun 5 20:46"

当年当月 5 日(星期日)晚上 8:46

要查找更多示例以及如何创建时间段的信息,请访问 http://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 2

级别数字越高,报告就越详细。默认值为 0(零)。

设置上述参数后,使用 log 显示日志消息。

要显示上次转换操作,请使用以下命令:

crm(live)history# transition -1
INFO: fetching new logs, please wait ...

此命令会获取日志并运行 dotty(从 graphviz 包)以显示转换图。外壳会打开日志文件,您在其中可以使用 光标键浏览内容。

如果希望不要打开转换图,请使用 nograph 选项:

crm(live)history# transition -1 nograph

7.7. 更多信息

  • crm 手册页。

  • 访问 http://crmsh.github.io/documentation 中的上游项目文档。

  • 有关详尽示例,请参见 Highly Available NFS Storage with DRBD and Pacemaker (↑Highly Available NFS Storage with DRBD and Pacemaker)。

第 8 章添加或修改资源代理

摘要

需由群集管理的所有任务都必须可用作资源。在此处需要考虑两个主要组:资源代理和 STONITH 代理。对于这两个类别,您都可以添加自己的代理,根据需要扩展群集的功能。

8.1. STONITH 代理

群集有时会检测到某个节点行为异常,需要删除此节点。这称为屏蔽,通常使用 STONITH 资源实现。

[Warning]不支持外部 SSH/STONITH

由于无法了解 SSH 可能对其他系统问题如何做出反应。出于此原因,生产环境不支持外部 SSH/STONITH 代理(例如 stonith:external/ssh)。如果您仍要使用此类代理进行测试,请安装 libglue-devel 包。

要(从软件端)获取所有当前可用的 STONITH 设备列表,请使用 crm ra list stonith 命令。如果您找不到收藏的代理,请安装 -devel 包。

目前尚无有关写入 STONITH 代理的文档。如果要写入新的 STONITH 代理,请参见 cluster-glue 包的源中提供的示例。

8.2. 写入 OCF 资源代理

所有 OCF 资源代理 (RA) 都可在 /usr/lib/ocf/resource.d/ 中找到,请参见第 4.2.2 节 “支持的资源代理类”了解更多信息。每个资源代理都必须支持以下操作才能进行控制:

start

启动或启用资源

stop

停止或禁用资源

status

返回资源状态

monitor

status 类似,但还会检查是否存在意外状态

validate

验证资源配置

meta-data

返回有关资源代理的 XML 格式的信息

创建 OCF RA 的常规过程大概如下:

  1. 将文件 /usr/lib/ocf/resource.d/pacemaker/Dummy 装载为模板。

  2. 为每个新资源代理创建新的子目录,以避免发生命名冲突。例如,如果您的一个资源组 kitchen 具有资源 coffee_machine,可将此资源添加到目录 /usr/lib/ocf/resource.d/kitchen/。要访问此资源代理,请执行命令 crm

    configureprimitive coffee_1 ocf:coffee_machine:kitchen ...
  3. 实施其他外壳功能,并用不同名称保存文件。

可在 http://linux-ha.org/wiki/Resource_Agents 中找到有关写入 OCF 资源代理的更多细节。在第 1 章 产品概述中可以找到有关若干概念的特殊信息。

8.3. OCF 返回码和故障恢复

根据 OCF 规范,有一些关于操作必须返回的退出代码的严格定义。群集会始终检查返回代码与预期结果是否相符。如果结果与预期值不匹配,则将操作视为失败,并将启动恢复操作。有三种类型的故障恢复:

表 8.1. 故障恢复类型

恢复类型

描述

群集执行的操作

发生临时错误。

重启动资源或将它移到新位置。

发生非临时错误。错误可能特定于当前节点。

将资源移到别处,避免在当前节点上重试该资源。

致命

发生所有群集节点共有的非临时错误。这表示指定了错误配置。

停止资源,避免在任何群集节点上启动该资源。


假定将某个操作视为已失败,下表概括了不同的 OCF 返回代码以及收到相应的错误代码时群集将启动的恢复类型。

表 8.2. OCF 返回代码

OCF 返回代码

OCF 别名

描述

恢复类型

0

OCF_SUCCESS

成功。命令成功完成。这是所有启动、停止、升级和降级命令的所需结果。

1

OCF_ERR_­GENERIC

通用出现问题错误代码。

2

OCF_ERR_ARGS

资源配置在此计算机上无效(例如,它引用了在节点上找不到的位置/工具)。

3

OCF_­ERR_­UN­IMPLEMENTED

请求的操作未实现。

4

OCF_ERR_PERM

资源代理没有足够的特权,不能完成此任务。

5

OCF_ERR_­INSTALLED

资源所需的工具未安装在此计算机上。

6

OCF_ERR_­CONFIGURED

资源配置无效(例如,缺少必需的参数)。

致命

7

OCF_NOT_­RUNNING

资源未运行。群集将不会尝试停止为任何操作返回此代码的资源。

此 OCF 返回代码可能需要或不需要资源恢复,这取决于所需的资源状态。如果出现意外,则执行恢复。

不适用

8

OCF_RUNNING_­MASTER

资源正在主节点中运行。

9

OCF_FAILED_­MASTER

资源在主节点中,但已失败。资源将再次被降级、停止再重启动(然后也可能升级)。

其他

不适用

自定义错误代码。


第 9 章屏障和 STONITH

摘要

屏蔽在 HA(高可用性)计算机群集中是一个非常重要的概念。群集有时会检测到某个节点行为异常,需要删除此节点。这称为屏蔽,通常使用 STONITH 资源实现。屏蔽可以定义为一种使 HA 群集具有已知状态的方法。

群集中的每个资源均带有状态。例如:资源 r1 已在 alice 上启动。在 HA 群集中,这种状态暗示了资源 r1 在除 alice 外的所有节点上都处于停止状态,因为群集必须确保每个资源只能在一个节点上启动。每个节点都必须报告资源发生的每个更改。这样群集状态就是资源状态和节点状态的集合。

当节点或资源的状态无法十分肯定地确立时,将进行屏蔽。即使在群集未感知到给定节点上发生的事件时,屏蔽也可确保此节点不会运行任何重要资源。

9.1. 屏蔽分类

有两类屏蔽:资源级别屏蔽和节点级别屏蔽。后者是本章的主题。

资源级别屏蔽

通过使用资源级屏蔽,群集可确保节点不能访问一个或多个资源。SAN 就是一个典型的示例,屏蔽操作更改了 SAN 交换机上的规则从而拒绝节点的访问。

通过使用要保护的资源所依赖的常规资源可以完成资源级别的屏蔽。这种资源应会拒绝在此节点上启动,所以依赖它的资源也不会在同一节点上运行。

节点级别屏蔽

节点级屏蔽可确保节点绝对不会运行任何资源。这种屏蔽通常采用简单但有点粗暴的方式来完成,即重设置或关闭节点。

9.2. 节点级别屏蔽

SUSE® Linux Enterprise High Availability Extension 中,屏障实施为 STONITH (Shoot The Other Node In The Head)。它提供节点级屏蔽。High Availability Extension 包括 stonith 命令行工具,一个能远程关闭群集中节点的可扩展界面。有关可用选项的概述,请运行 stonith --help 或参见 stonith 的手册页了解更多信息。

9.2.1. STONITH 设备

要使用节点级屏蔽,首先需要有屏蔽设备。要获取 High Availability Extension 所支持的 STONITH 设备的列表,请在任何节点上运行以下命令之一:

root # stonith -L

或者

root # crm ra list stonith

STONITH 设备可分为以下类别:

电源分配单元 (PDU)

电源分发单元是管理关键网络、服务器和数据中心设备的电源容量和功能的基本元素。它可以提供对已连接设备的远程负载监视和独立电源出口控制,以实现远程电源循环。

不间断电源 (UPS)

稳定的电源可在公用电源故障时通过从单独源供电向连接的设备提供应急电源。

刀片电源控制设备

如果是在刀片组上运行群集,则刀片外壳中的电源控制设备就是提供屏蔽的唯一候选。当然,此设备必须能够管理单个刀片计算机。

无人值守设备

无人值守设备(IBM RSA、HP iLO 和 Dell DRAC)正变得越来越普遍,在未来它们甚至可能成为现成可用计算机上的标准配置。然而,它们相比 UPS 设备有一点不足,因为它们与主机(群集节点)共享一个电源。如果节点持续断电,则认为控制该节点的设备失去作用。在这种情况下,CRM 将继续无限期地尝试屏蔽节点,而所有其他资源操作都将等待屏蔽/STONITH 操作完成。

测试设备

测试设备仅用于测试目的。它们通常对硬件更加友好。将群集投放到生产环境之前,必须以真实的屏蔽设备进行替换。

对 STONITH 设备的选择主要取决于您的预算和所用硬件的种类。

9.2.2. STONITH 实施

SUSE® Linux Enterprise High Availability Extension 的 STONITH 实施由两个组件组成:

stonithd

stonithd 是可由本地进程或通过网络访问的守护程序。它接受与屏蔽操作(重设置、关闭电源和打开电源)对应的命令。它还可以检查屏蔽设备的状态。

stonithd 守护程序在 CRM HA 群集中的每个节点上运行。在 DC 节点上运行的 stonithd 实例从 CRM 接收屏蔽请求。它会对请求作出响应,其他 stonithd 程序将执行所需的屏蔽操作。

STONITH 插件

对于每个受支持的屏蔽设备,都有一个能够控制所述设备的 STONITH 插件。STONITH 插件是屏障设备的界面。cluster-glue 包中的 STONITH 插件位于每个节点上的 /usr/lib/stonith/plugins 中(如果是 64 位体系结构,则位于 /usr/lib64/stonith/plugins 中)。如果您还安装了 fence-agents 包,该包中的插件将安装在 /usr/sbin/fence_* 中。所有 STONITH 插件看上去都与 stonithd 一样,但显著区别在于反映了屏障设备的性质。

某些插件支持多个设备。ipmilan(或 external/ipmi)就是一个典型的示例,它实施 IPMI 协议并可以控制任何支持此协议的设备。

9.3. STONITH 资源和配置

要设置屏蔽,需要配置一个或多个 STONITH 资源 - stonithd 守护程序不需要配置。所有配置都储存在 CIB 中。STONITH 资源属于 stonith 类的资源(请参见第 4.2.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

9.3.1. STONITH 资源配置示例

在以下部分中,可了解一些用 crm 命令行工具的语法编写的示例配置。要应用这些配置,请将示例放进文本文件(例如 sample.txt)并运行:

root # crm < sample.txt

有关使用 crm 命令行工具配置资源的更多信息,请参见第 7 章 配置和管理群集资源(命令行)

例 9.1. IBM RSA 无人值守设备的配置

可以如下配置 IBM RSA 无人值守设备:

configure
primitive st-ibmrsa-1 stonith:external/ibmrsa-telnet \
params nodename=alice ipaddr=192.168.0.101 \
userid=USERID passwd=PASSW0RD
primitive st-ibmrsa-2 stonith:external/ibmrsa-telnet \
params nodename=bob ipaddr=192.168.0.102 \
userid=USERID passwd=PASSW0RD
location l-st-alice st-ibmrsa-1 -inf: alice
location l-st-bob st-ibmrsa-2 -inf: bob
commit

在此示例中,由于以下原因使用了位置约束:STONITH 操作始终有失败的可能性。因此,在同时兼作执行程序的节点上操作 STONITH 并不可靠。如果重设置节点,则它将无法发送有关屏蔽操作结果的通知。唯一的方法是假设操作会成功并提前发送通知。不过,如果操作失败,可能会出现问题。因此,按惯例 stonithd 会拒绝终止其主机。


例 9.2. UPS 屏蔽设备的配置

UPS 类型屏蔽设置的配置类似于上面的示例。此处不作详细介绍。所有 UPS 设备均使用相同的机制屏蔽。访问设备的方式有所不同。旧的 UPS 设备只有一个串行端口,通常使用特殊的串行电缆以 1200 波特的速率进行连接。许多新的 UPS 设备仍有一个串行端口,但它们一般还使用 USB 或以太网接口。可以使用的连接类型取决于插件支持的连接。

例如,通过使用 stonith -t stonith 设备类型 -n 命令比较 apcmasterapcsmart 设备:

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

使用

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 产品线都支持此协议。


例 9.3. Kdump 设备的配置

使用 stonith:fence_kdump 资源代理(由 fence-agents 包提供)来监视已启用 kdump 功能的所有节点。下面提供了资源的配置示例:

configure
     primitive st-kdump stonith:fence_kdump \
     params nodename="alice "\ 1
     params pcmk_host_check="dynamic-list" \
     params pcmk_reboot_action="off" \
     params pcmk_monitor_action="metadata" \
     params pcmk_reboot_retries="1" \
     params timeout="60"
     commit

1

要屏蔽的节点的名称。如果您需要监视多个节点,请配置更多 STONITH 资源。要防止特定节点使用屏蔽设备,请添加位置约束。

当资源超时后,屏蔽操作将会启动。

在每个节点上的 /etc/sysconfig/kdump 中,将 KDUMP_POSTSCRIPT 配置为在 kdump 进程完成后向所有节点发送通知。例如:

 /usr/lib64/fence_kdump_send -i INTERVAL -p PORT -c 1 alice bob charly [...]

执行 kdump 的节点将在完成 kdump 后自动重启动。请记得在防火墙中为 fence_kdump 资源打开一个端口。默认端口为 7410


9.4. 监视屏蔽设备

与任何其他资源一样,STONITH 类代理还支持使用监视操作检查状态。

[Note]监视 STONITH 资源

请定期而谨慎地监视 STONITH 资源。对于大多数设备而言,至少 1800 秒(30 分钟)的监视间隔应已足够。

屏蔽设备是 HA 群集不可缺少的组成部分,但越少需要使用它们越好。电源管理设备常常会受广播流量过多的影响。某些设备无法处理每分钟多于十个左右连接的情况。如果两个客户端同时尝试进行连接,一些设备会分辨不清。大多数设备不能同时处理多个会话。

通常,每隔几小时检查一次屏蔽设备的状态应已足够。需要执行屏蔽操作和电源开关故障的情况是较少的。

有关如何配置监视操作的详细信息,对于 GUI 方法请参见过程 6.3, “添加或修改元属性和实例属性”,对于命令行方法请参见第 7.3.8 节 “配置资源监视”

9.5. 特殊的屏蔽设备

除了处理真实 STONITH 设备的插件外,还有特殊用途的 STONITH 插件。

[Warning]仅供测试

下面提到的一些 STONITH 插件仅供演示和测试之用。不要在实际情境中使用以下任何设备,因为这可能导致数据损坏和无法预料的结果:

  • external/ssh

  • ssh

fence_kdump

此插件检查节点上是否正在进行内核转储。如果有,它将返回 true,并按节点已被屏蔽那样进行操作。在转储过程中,此节点不能运行任何资源。这可避免屏蔽已关闭但正在进行转储的节点,从而节省屏蔽所需时间。此插件必须与另一个实际 STONITH 设备一同使用。

有关配置细节,请参见例 9.3 “Kdump 设备的配置”

external/sbd

这是一个自屏蔽设备。它对可以插入共享磁盘的所谓的毒药作出反应。当中断共享储存区连接时,它将停止节点运行。要了解如何使用此 STONITH 代理实施基于储存的屏蔽,请参见第 17.1.3.5 节 “配置屏蔽资源”。有关更多细节,另请参见 http://www.linux-ha.org/wiki/SBD_Fencing

[Important]external/sbd 和 DRBD

external/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 命令重引导它运行所处的节点。这需要节点的操作系统的操作,在某些情况下可能失败。因此,如果可能,请避免使用此设备。然而,在单节点群集上使用此设备是很安全的。

suicideI do not shoot my host(我自己不关闭我的主机)规则的唯一例外。

9.6. 基本建议

请查看以下建议列表以避免常见错误:

  • 不要并行配置多个电源开关。

  • 要测试 STONITH 设备及其配置,请从每个节点拔出一次插头,并校验该节点是否会被屏蔽。

  • 在负载状态下测试资源,并校验超时值是否合适。超时值设置得过短会触发(不必要的)屏蔽操作。有关详细信息,请参见第 4.2.9 节 “超时值”

  • 对您的设置使用合适的屏蔽设备。有关细节,另请参见第 9.5 节 “特殊的屏蔽设备”

  • 配置一个或多个 STONITH 资源。默认情况下,全局群集选项 stonith-enabled 设置为 true。如果未定义任何 STONITH 资源,群集将拒绝启动任何资源。

  • 不要将全局群集选项 stonith-enabled 设置为 false,原因如下:

    • 未启用 STONITH 的群集不受支持。

    • DLM/OCFS2 将会阻止一直等待不会发生的屏蔽操作。

  • 不要将全局群集选项 startup-fencing 设置为 false。默认情况下,会因以下原因将其设置为 true:如果节点在群集启动期间状态未知,则它将会被屏蔽一次以明确其状态。

9.7. 更多信息

/usr/share/doc/packages/cluster-glue

在已安装系统中,此目录包含多个 STONITH 插件和设备的自述文件。

http://www.linux-ha.org/wiki/STONITH

High Availability Linux 项目主页上有关 STONITH 的信息。

http://www.clusterlabs.org/doc/
  • Pacemaker Explained(Pacemaker 配置说明):说明用于配置 Pacemaker 的概念。包含全面而非常详细的信息供参考。

http://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html

说明 HA 群集中节点分裂、法定票数和屏蔽的概念的文章。

第 10 章访问控制列表

摘要

crm 外壳 (crmsh)、Hawk 或 Pacemaker GUI 等群集管理工具可由 root 用户或 haclient 组内的任何用户使用。默认情况下,这些用户具有完全读/写访问权。要限制访问权或指派更加细化的访问权限,可以使用访问控制列表 (ACL)。

访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。

[Note]CIB 验证版本和 ACL 的差异

仅当您的 CIB 是使用 pacemaker-2.0 或更高 CIB 语法版本验证的情况下,此 ACL 文档才适用。有关如何查验这一点以及升级 CIB 版本的细节,请参见升级 CIB 语法版本

如果您已从 SUSE Linux Enterprise High Availability Extension 11 SP3 升级并保留了以前的 CIB 版本,请参见《SUSE Linux Enterprise High Availability Extension 11 SP3 高可用性指南》中的“访问控制列表”一章。网址:http://www.suse.com/documentation/

10.1. 要求和先决条件

开始对群集使用 ACL 之前,确保满足了以下条件:

  • 请使用 NIS、Active Directory 或者通过手动方式将相同用户添加到所有节点,来确保群集中所有节点上的用户一致。

  • 您要使用 ACL 修改其访问权限的所有用户都必须属于 haclient 组。

  • 所有用户都需要使用 crmsh 的绝对路径 /usr/sbin/crm 运行 crmsh。

  • 如果非特权用户想要运行 crmsh,则需要使用 /usr/sbin 扩展其 PATH 变量。

[Important]默认访问权限
  • ACL 是可选功能。默认情况下,ACL 处于禁用状态。

  • 如果未启用 ACL,则 root 用户以及属于 haclient 组的所有用户都将拥有对群集配置的完全读/写访问权。

  • 即使启用并配置了 ACL,root 和默认 CRM 拥有者 hacluster始终对群集配置拥有完全访问权。

要使用 ACL,需要具备一些关于 XPath 的知识。XPath 是在 XML 文档中选择节点所用的语言。请参见 http://en.wikipedia.org/wiki/XPath 或查找位于 http://www.w3.org/TR/xpath/ 的规范。

10.2. 在群集中启用 ACL

在开始配置 ACL 之前,需要先启用 ACL。要执行此操作,请在 crmsh 中使用以下命令:

root # crm configure property enable-acl=true

也可以根据过程 10.1, “使用 Hawk 启用 ACL”中所述使用 Hawk。

过程 10.1. 使用 Hawk 启用 ACL

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集属性

  3. CRM 配置组中,从空下拉框中选择 enable-acl 属性,然后单击加号图标添加该属性。

  4. 要设置 enable-acl=true,请激活 enable-acl 旁边的复选框,并确认您所做的更改。

10.3. ACL 的基本原理

访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。ACL 角色是用于描述对 CIB 访问权限的一组规则。规则包括以下组成部分:

  • 访问权限,例如拒绝

  • 规则应用位置的规范。此规范可以是类型、ID 参照或 XPath 表达式。

通常,方便的做法是在角色中捆绑 ACL 并将特定角色指派给系统用户(ACL 目标)。创建 ACL 规则的方法有两种:

10.3.1. 通过 XPath 表达式设置 ACL 规则

要通过 XPath 管理 ACL 规则,需要知道基础 XML 的结构。可使用以下命令来检索结构(该命令将显示 XML 格式的群集配置,请参见例 10.1):

root # crm configure show xml

例 10.1. XML 格式群集配置摘录

<num_updates="59" 
      dc-uuid="175704363"
      crm_feature_set="3.0.9"
      validate-with="pacemaker-2.0"
      epoch="96"
      admin_epoch="0"
      cib-last-written="Fri Aug  8 13:47:28 2014"
      have-quorum="1">
  <configuration>
    <crm_config>
       <cluster_property_set id="cib-bootstrap-options">
        <nvpair name="stonith-enabled" value="true" id="cib-bootstrap-options-stonith-enabled"/>
        <nvpair name="no-quorum-policy" value="ignore" id="cib-bootstrap-options-no-quorum-policy"/>
         [...]
      </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 文档中查找节点。例如,要选择 root 节点 (cib),则使用 XPath 表达式 /cib。要查找全局群集配置,则使用 XPath 表达式 /cib/configuration/crm_config

例如,表 10.1 “Operator 角色 - 访问类型和 XPath 表达式”显示了用于创建操作员角色的参数(访问类型和 XPath 表达式)。具有此角色的用户只能执行第二列中所述的任务 - 他们既不能重新配置任何资源(例如,更改参数或操作),也不能更改共置约束或顺序约束的配置。

表 10.1. Operator 角色 - 访问类型和 XPath 表达式

类型

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

查看群集的状态。


10.3.2. 通过缩写设置 ACL 规则

对于不想使用 XML 结构的用户,有一种更简单的方法。

例如,请考虑以下 XPath:

//*[@id='rsc1']

它会查找 ID 为 rsc1 的所有 XML 节点。

缩写语法与以下内容类似:

ref:"rsc1"

这同样适用于约束。这是详细的 XPath:

//constraints/rsc_location

缩写语法与以下内容类似:

type:"rsc_location"

可以在 crmsh 和 Hawk 中使用缩写语法。CIB 守护程序知道如何将 ACL 规则应用到匹配的对象。

10.4. 使用 Pacemaker GUI 配置 ACL

以下过程说明如何通过定义 monitor 角色并将其指派给用户,来配置对群集配置的只读访问权。您也可以根据第 10.5 节 “使用 Hawk 配置 ACL”过程 10.4, “使用 crmsh 添加 Monitor 角色并指派用户”所述使用 Hawk 或 crmsh 来实现此目的。

过程 10.2. 使用 Pacemaker GUI 添加监视者角色和指派用户

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录。

  2. 单击配置树中的 ACL 条目。

  3. 单击添加。将显示一个对话框。选择 ACL 目标ACL 角色

  4. 定义 ACL 角色:

    1. 选择 ACL 角色。将打开一个窗口,可在其中添加配置选项。

    2. ID 文本字段中添加唯一标识符,例如 monitor

    3. 单击添加并选择权限(拒绝)。本示例中选择

    4. Xpath 文本字段中输入 XPath 表达式 /cib。单击确定继续。

      旁注:如果具有资源或约束,还可使用第 10.3.2 节 “通过缩写设置 ACL 规则”中所述的缩写语法。

    5. 如果有其他条件,请重复步骤(步骤 4.c步骤 4.d)。在本例中,并没有其他条件,因此角色完成,可以按确定关闭窗口。

  5. 将角色指派给用户:

    1. 单击添加按钮。一个对话框即会显示,您可在其中选择 ACL 目标ACL 角色

    2. 选择 ACL 目标。将打开一个窗口,可在其中添加配置选项。

    3. ID 文本字段中输入用户名。确保此用户属于 haclient 组。

    4. 单击并使用步骤 4.b中指定的角色名称。

10.5. 使用 Hawk 配置 ACL

以下过程说明如何通过定义 monitor 角色并将其指派给用户,来配置对群集配置的只读访问权。您也可以根据过程 10.4, “使用 crmsh 添加 Monitor 角色并指派用户”中所述使用 crmsh 来实现此目的。

过程 10.3. 使用 Hawk 添加 Monitor 角色并指派用户

  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择访问控制列表。视图将显示已定义的角色用户

  3. 定义 ACL 角色:

    1. 选择角色类别,然后单击加号图标。

    2. 输入唯一的角色 ID,例如 monitor

    3. 本示例是要定义一个 monitor 角色,因此请从权限下拉框中选择

    4. Xpath 文本框中,输入 Xpath 表达式 /cib 并单击创建角色

      这将会创建名为 monitor 的新角色,为其设置权限并通过使用 XPath 表达式 /cib 将其应用到 CIB 中的所有元素。

    5. 如果需要,可以通过单击加号图标并指定相应的参数,来添加更多的访问权限和 XPath 自变量。确认更改。

  4. 将角色指派给用户:

    1. 选择用户类别,然后单击加号图标。

      创建用户视图中会显示可用的角色。此外,该视图中还包含一个附加行用于配置该用户的个别 ACL 规则。在该视图中,您可以向用户指派一个或多个角色,或者为该用户定义一个或多个不同的规则。选择某个角色后各规则对应的行将会消失;取消选择后,该行将会显示。无法同时指派角色和定义各个规则。

    2. 输入唯一的用户 ID,例如 tux。确保此用户属于 haclient 组。

    3. 要将角色指派给用户,请从角色中选择相应的条目。对于本示例,请选择您创建的 monitor 角色。

      要取消选择一个或多个角色,请再次单击相应的条目。如果未选择任何角色,用于定义各规则的行会再次显示。

      图 10.1. Hawk - 向用户指派角色或规则

      Hawk - 向用户指派角色或规则

    4. 如果想要定义单个规则,请选择权限并为该规则输入相应的 Xpath 参数。单击加号图标可定义更多规则。

    5. 确认您的选择,然后单击创建用户将角色或规则指派给用户。

要配置资源或约束的访问权限,还可使用第 10.3.2 节 “通过缩写设置 ACL 规则”中所述的缩写语法。

10.6. 使用 crmsh 配置 ACL

以下过程说明如何通过定义 monitor 角色并将其指派给用户,来配置对群集配置的只读访问权。

过程 10.4. 使用 crmsh 添加 Monitor 角色并指派用户

  1. root 身份登录。

  2. 启动 crmsh 的交互模式:

    root # crm configure
    crm(live)configure# 
  3. 定义 ACL 角色:

    1. 使用 role 命令定义新角色:

      crm(live)configure# role monitor read xpath:"/cib"

      上面的命令会创建名为 monitor 的新角色,为其设置权限并通过使用 XPath 表达式 /cib 将其应用到 CIB 中的所有元素。如有必要,可添加更多访问权限和 XPath 自变量。

    2. 根据需要添加其他角色。

  4. 将角色指派给一个或多个 ACL 目标,即相应的系统用户。确保这些目标属于 haclient 组。

    crm(live)configure# acl_target tux monitor
  5. 检查更改:

    crm(live)configure# show
  6. 提交更改:

    crm(live)configure# commit

要配置资源或约束的访问权限,还可使用第 10.3.2 节 “通过缩写设置 ACL 规则”中所述的缩写语法。

第 11 章网络设备绑定

对于许多系统,需要实施高于典型以太网设备的标准数据安全性或可用性要求的网络连接。在这些情况下,可以将多个以太网设备聚合到单个绑定设备。

联接设备的配置通过联接模块选项来完成。其行为取决于联接设备的模式。默认情况下是 mode=active-backup,即如果活动从属设备发生故障,则其他从属设备将变成为活动设备。

使用 OpenAIS 时,联接设备并不是通过群集软件管理的。因此,必须在每个可能需要访问联接设备的群集节点上配置联接设备。

11.1. 使用 YaST 配置联接设备

要配置联接设备,您必须有多个可以聚合到单独一个联接设备的以太网设备。按如下所示继续:

  1. root 用户身份启动 YaST 并选择网络设备+网络设置

  2. 网络设置中,切换到概述选项卡以显示可用的设备。

  3. 检查要聚合到联接设备的以太网设备是否有指定的 IP 地址。如果有,更改此地址:

    1. 选择要更改的设备,然后单击编辑

    2. 在打开的网卡设置对话框的地址选项卡中,选择无链接和 IP 设置(绑定从属)选项。

    3. 单击下一步,返回到网络设置对话框中的概述选项卡。

  4. 添加新联接设备:

    1. 单击添加并将设备类型更改为绑定。按下一步继续。

    2. 选择如何为联接设备指派 IP 地址。有三种方法可供选择:

      • 无链接和 IP 设置(绑定从属)

      • 动态地址(使用 DHCP 或 Zeroconf)

      • 静态指派的 IP 地址

      使用最适合您环境的方法。如果使用 OpenAIS 管理虚拟 IP 地址,请选择静态指派的 IP 地址,并为接口指派一个 IP 地址。

    3. 切换到绑定从属选项卡。

    4. 它会显示在步骤 3.b 中已配置为绑定从属的所有以太网设备。要选择需要加入绑定的以太网设备,请激活相关绑定从属前面的复选框。

    5. 编辑联接驱动程序选项。可以使用以下模式:

      balance-rr

      提供负载平衡和容错,但会使包传输变得混乱无序。这可能会导致 TCP 重组等操作出现延迟。

      active-backup

      提供容错。

      balance-xor

      提供负载平衡和容错。

      broadcast

      提供容错。

      802.3ad

      提供动态链接集合(如果连接的交换机支持动态链接集合)。

      balance-tlb

      为外发的通讯量提供负载平衡。

      balance-alb

      为进来的和外发的通讯量提供负载平衡(如果使用的网络设备允许在使用中修改网络设备的硬件地址)。

    6. 务必向联接驱动程序选项添加参数 miimon=100。如果不指定此参数,则不会定期检查链路,因此,绑定驱动程序可能会持续在有故障的链路上丢包。

  5. 单击下一步,将 YaST 保留为确定,完成联接设备的配置。YaST 将配置写入 /etc/sysconfig/network/ifcfg-bondDEVICENUMBER

11.2. 联接从属的热插拔

在某些情况下,例如相应的网络设备不断出现故障时,必须使用另一个接口来取代绑定的从属接口。解决方案是为联接从属设置热插拔,此外还需要更改 udev 规则,以便按总线 ID(而非 MAC 地址)匹配该设备。这样,有缺陷的硬件(同一槽内具有不同 MAC 地址的网卡)允许更换的话,您便可以更换该硬件。

过程 11.1. 使用 YaST 为绑定从属配置热插拔

如果您想改用手动配置,请在《SUSE Linux Enterprise Server 11 管理指南》中参考“基础网络”一章内的“绑定从属的热插拔”部分。

  1. root 用户身份启动 YaST 并选择网络设备+网络设置

  2. 网络设置中,切换到概述选项卡以显示已配置的设备。如果已配置绑定从属,则会显示在备注栏中。

  3. 对于已经聚合到联接设备的每个以太网设备,请执行以下步骤:

    1. 选择要更改的设备,然后单击编辑网卡设置对话框随即打开。

    2. 切换到常规选项卡,确保将激活设备设置为在热插拔时

    3. 切换到硬件选项卡。

    4. 针对 Udev 规则,单击更改并选择 BusID 选项。

    5. 单击确定下一步,返回到网络设置对话框中的概述选项卡。如果您现在单击以太网设备项,底部窗格会显示设备的详细信息,包括总线 ID。

  4. 单击确定确认您的更改,并退出网络设置。

在引导时,/etc/init.d/network 不会等待热插拔从属接口,而是等待绑定准备就绪,而这需要至少有一个从属接口可用。当从系统中去除一个从属接口时(从 NIC 驱动程序拆开绑定、执行 NIC 驱动程序的 rmmod 命令或 PCI 热插拔去除为 true),内核会自动从绑定中将其去除。当向系统添加新网卡时(替换插槽中的硬件),udev 会应用基于总线的永久名称规则对新网卡进行重命名,并为其调用 ifupifup 命令会自动调用以将新网卡加入联接。

11.3. 更多信息

Linux Ethernet Bonding Driver HOWTO》(Linux 以太网绑定驱动程序操作指南)中详细介绍了所有模式和其他许多选项。安装包 kernel-source 后,您可以在 /usr/src/linux/Documentation/networking/bonding.txt 下找到该文件。

对于高可用性设置,本指南中所述的以下选项特别重要:miimonuse_carrier

第 12 章Linux 虚拟服务器的负载平衡

Linux 虚拟服务器 (LVS) 的目标是提供一个基本框架,将网络连接定向到共享其工作负载的多台服务器。Linux 虚拟服务器是服务器群集(一个或多个负载平衡器及多台用于运行服务的真实的服务器),对于外部客户端显示为一台大型的快速服务器。这种看上去像是单台服务器的服务器被称为虚拟服务器。Linux 虚拟服务器可用于构建可灵活缩放并具有高可用性的网络服务,如 Web、缓存、邮件、FTP、媒体和 VoIP 服务。

真实的服务器和负载平衡器可通过高速 LAN 或地理位置分散的 WAN 互相连接。负载平衡器可将请求发送到不同的服务器。它们使群集的并行服务看似单个 IP 地址(虚拟 IP 地址,即VIP)上的虚拟服务。发送请求时可使用 IP 负载平衡技术或应用程序级的负载平衡技术。系统的可伸缩性通过在群集中透明地添加或删除节点来实现。高可用性通过检测节点或守护程序故障并相应地重配置系统来提供。

12.1. 概念概述

以下部分概述了 LVS 主要组件和概念。

12.1.1. 定向器

LVS 的主要组件是 ip_vs(也称 IPVS)内核代码。它在 Linux 内核(第 4 层交换)中实施传输层负载平衡。运行包含 IPVS 代码的 Linux 内核的节点称为定向器。控制器上运行的 IPVS 代码是 LVS 的基本功能。

当客户端连接到定向器时,进来的请求在所有群集节点间是负载平衡的:定向器使用一组能使 LVS 正常工作的修改过的路由规则,将包转发到真实服务器。例如,连接不会在定向器上发起或终止,它也不会发送确认。定向器相当于将包从最终用户转发到真实服务器(运行用于处理请求的应用程序的主机)的专用路由器。

默认情况下,内核不需要安装 IPVS 模块。IPVS 内核模块包含在 cluster-network-kmp-default 包中。

12.1.2. 用户空间控制器和守护程序

ldirectord 守护程序是一个用户空间守护程序,用于管理 Linux 虚拟服务器并监视负载平衡虚拟服务器的 LVS 群集中的真实服务器。配置文件 /etc/ha.d/ldirectord.cf 指定虚拟服务及其关联的真实服务器,并告知 ldirecord 如何将此服务器配置为 LVS 重定向器。守护程序初始化时,将为群集创建虚拟服务。

ldirectord 守护程序通过定期请求已知的 URL 并检查响应来监视真实服务器的运行状况。如果真实服务器发生故障,将从负载平衡器的可用服务器列表中删除它。如果服务监视程序检测到发生故障的服务器已恢复并重新运行,则它会将此服务器重新添加到可用服务器列表中。如果出现所有真实服务器关闭的情况,则可以指定一台将 Web 服务重定向到的回退服务器。备用服务器通常是本地主机,它会显示一个应急页面,说明 Web 服务暂时不可用。

ldirectord 使用 ipvsadm 工具(包 ipvsadm)来操作 Linux 内核的虚拟服务器表。

12.1.3. 包的转发

定向器可采用三种不同方法将包从客户端发送到真实服务器:

网络地址转换 (NAT)

进来的请求到达虚拟 IP,然后通过将目标 IP 地址和端口更改为所选真实服务器的 IP 地址和端口将进来的请求转发到真实服务器。真实服务器向负载平衡器发送响应,负载平衡器再更改目标 IP 地址并将响应发回客户端。因此,最终用户就能从预期的源收到回复了。由于所有通讯都要流经负载平衡器,它通常会成为群集的瓶颈。

IP 隧道通讯进程(IP-IP 封装)

IP 隧道通讯进程允许将发送到某个 IP 地址的包重定向到可能处于其他网络上的另一个地址。LVS 通过 IP 隧道(重定向到其他 IP 地址)向真实服务器发送请求,然后真实服务器使用自己的路由选择表直接回复到客户端。群集成员可以处于不同的子网中。

直接路由选择

来自最终用户的包将直接转发到真实服务器。IP 包未经修改,因此必须配置真实服务器以接受虚拟服务器 IP 地址的通讯。来自真实服务器的响应会直接发送到客户端。真实服务器和负载平衡器需处于同一物理网络段中。

12.1.4. 调度算法

确定将哪台真实服务器用于客户端请求的新连接,是使用不同算法来实现的。这些算法以模块的形式提供,可进行调整以适应特定需要。有关可用模块的概述,请参见 ipvsadm(8) 手册页。从客户端接收到连接请求时,控制器会根据日程表将一台真实的服务器指派给此客户端。调度程序是 IPVS 内核代码中的一部分,它决定哪台真实的服务器将获取下一个新连接。

12.2. 使用 YaST 配置 IP 负载平衡

可使用 YaST IP 负载平衡模块配置基于内核的 IP 负载平衡。它是 ldirectord 的前端。

要访问“IP 负载平衡”对话框,请以 root 用户身份启动 YaST 并选择 High Availability+IP 负载平衡。或者,以 root 用户身份使用 yast2 iplb 从命令行启动 YaST 群集模块。

YaST 模块会将其配置写入 /etc/ha.d/ldirectord.cf。YaST 模块中的可用选项卡对应于 /etc/ha.d/ldirectord.cf 配置文件的结构,此配置文件用于定义全局选项和虚拟服务的选项。

有关配置示例以及负载平衡器和真实服务器之间产生的进程,请参见例 12.1 “简单的 ldirectord 配置”

[Note]全局参数和虚拟服务器参数

如果在虚拟服务器部分和全局部分都指定了某个参数,那么在虚拟服务器部分中定义的值将覆盖在全局部分中定义的值。

过程 12.1. 配置全局参数

以下过程描述了如何配置最重要的全局参数。有关个别参数(以及此处未提及的参数)的更多细节,请单击帮助或参见 ldirectord 手册页。

  1. 通过检查间隔定义 ldirectord 连接到每台真实服务器以检查它们是否仍处于联机状态的间隔。

  2. 通过检查超时设置真实服务器应该在多长时间内响应上次检查。

  3. 通过失败计数定义在检查被视为失败前 ldirectord 可尝试向真实服务器发送多少次请求。

  4. 通过协商超时定义协商检查经过多少秒后应视为超时。

  5. 回退中,输入当所有真实服务器都停机时,要将 Web 服务重定向到的 Web 服务器的主机名或 IP 地址。

  6. 如果希望系统在任何真实服务器的连接状态发生改变时均发送警报,请在电子邮件警报中输入有效的电子邮件地址。

  7. 通过电子邮件警报频率定义经过多少秒后,如果任何真实服务器仍无法访问,应重复发出电子邮件警报。

  8. 电子邮件警报状态中指定应发送电子邮件警报的服务器状态。如果要定义多个状态,请使用逗号分隔的列表。

  9. 通过自动重新装载定义 ldirectord 是否应连续监视配置文件有无修改。如果设置为 yes,则将在发生更改时自动重新装载配置。

  10. 通过 Quiescent 开关定义是否应从内核的 LVS 表中删除发生故障的真实服务器。如果设置为,则不会删除发生故障的服务器。而是将其权重设置为 0,表示不接受新连接。已建立的连接将继续存在,直到超时为止。

  11. 如果要使用备用路径进行日志记录,请在日志文件中指定日志的路径。默认情况下,ldirectord 会将其日志写入 /var/log/ldirectord.log

图 12.1. YaST IP 负载平衡 - 全局参数

YaST IP 负载平衡 - 全局参数

过程 12.2. 配置虚拟服务

可通过为每种虚拟服务定义若干参数来配置一个或多个虚拟服务。以下过程描述了如何配置虚拟服务最重要的参数。有关个别参数(以及此处未提及的参数)的更多细节,请单击帮助或参见 ldirectord 手册页。

  1. 在 YaST IP 负载平衡模块中,切换到虚拟服务器配置选项卡。

  2. 添加新虚拟服务器或编辑现有虚拟服务器。一个新对话框将显示可用选项。

  3. 虚拟服务器中,输入负载平衡器和真实服务器可作为 LVS 访问的共享虚拟 IP 地址(IPv4 或 IPv6)和端口。还可以指定主机名和服务来代替 IP 地址和端口号。或者,也可以使用防火墙标记。防火墙标记是一种将任意 VIP:port 服务的集合聚合到一个虚拟服务中的方法。

  4. 要指定真实服务器,需要输入服务器的 IP 地址(IPv4、IPv6 或主机名)、端口(或服务名称)以及转发方法。转发方法必须是 gateipipmasq 中的一种,请参见第 12.1.3 节 “包的转发”

    单击添加按钮,为每台真实服务器输入需要的自变量。

  5. 检查类型中选择用于测试真实服务器是否仍然活动的检查类型。例如,要发送请求并检查响应是否包含预期的字符串,请选择 Negotiate

  6. 如果已将检查类型设置为 Negotiate,则还需定义要监视的服务类型。从服务下拉列表中进行选择。

  7. 请求中输入检查间隔期间每台真实服务器上所请求对象的 URI。

  8. 如果要检查来自真实服务器的响应是否包含特定字符串(如 I'm alive 消息),请定义需要匹配的正则表达式。将正则表达式输入到接收中。如果来自真实服务器的响应包含此表达式,则认为真实服务器处于活动状态。

  9. 根据您在步骤 6 中选定的服务类型,您还必须为身份验证指定更多参数。切换到授权类型选项卡,输入登录口令数据库机密等详细信息。有关更多信息,请参见 YaST 帮助文本或 ldirectord 手册页。

  10. 切换至其他选项卡。

  11. 选择用于负载平衡的调度程序。有关可用调度程序的信息,请参见 ipvsadm(8) 手册页。

  12. 选择要使用的协议。如果将虚拟服务指定为 IP 地址和端口,则它必须是 tcpudp。如果将虚拟服务指定为防火墙标记,则协议必须是 fwm

  13. 如果需要,可定义其他参数。单击确定确认配置。YaST 会将此配置写入 /etc/ha.d/ldirectord.cf

图 12.2. YaST IP 负载平衡 - 虚拟服务

YaST IP 负载平衡 - 虚拟服务

例 12.1. 简单的 ldirectord 配置

图 12.1 “YaST IP 负载平衡 - 全局参数”图 12.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

1

定义 ldirectord 应连续检查配置文件有无修改。

2

ldirectord 连接到每台真实服务器以检查它们是否仍处于联机状态的间隔。

3

真实服务器必须在上次检查后多长时间内作出响应。

4

定义不要从内核的 LVS 表中删除发生故障的真实服务器,而是将其权重设置为 0

5

LVS 的虚拟 IP 地址 (VIP)。可通过端口 80 访问 LVS。

6

用于测试真实服务器是否仍处于活动状态的检查类型。

7

此服务的所有真实服务器都宕机时,要将 Web 服务重定向到的服务器。

8

要使用的协议。

9

定义了两台真实服务器,均可通过端口 80 访问。包的转发方法是 gate,表示使用直接路由选择。

10

需要在真实服务器的响应字符串中匹配的正则表达式。

11

检查间隔期间每台真实服务器上所请求对象的 URI。

12

用于负载平衡的所选调度程序。

13

要监视的服务类型。

此配置将导致以下进程流:ldirectord 每 5 秒连接一次每台真实服务器 (2),并按 911 中指定的方式请求 192.168.0.110:80/test.html192.168.0.120:80/test.html。如果上次检查后 3 秒内 (3) 未收到来自真实服务器的预期的 still alive 字符串 (10),它会将此真实服务器从可用池中删除。但是,由于 quiescent=yes 设置 (4),真实服务器不会从 LVS 表中删除,但权重将设置为 0,这样就不会接受此真实服务器的新连接。已建立的连接将继续存在,直到超时为止。


12.3. 其他设置

除了使用 YaST 配置 ldirectord 外,还需要确保满足以下条件,才能完成 LVS 设置:

  • 正确设置真实服务器以提供所需服务。

  • 负载平衡服务器(或服务器)必须能够使用 IP 转发将通讯路由到真实服务器。真实服务器的网络配置取决于选择的包转发方法。

  • 为避免负载平衡服务器(或服务器)成为整个系统的单个故障点,需要设置负载平衡器的一个或多个备份。在群集配置中配置 ldirectord 的原始资源,以便在发生硬件故障时,ldirectord 可以故障转移到其他服务器。

  • 由于负载平衡器的备份也需要 ldirectord 配置文件才能完成其任务,因此请确保 /etc/ha.d/ldirectord.cf 在要用作负载平衡器备份的所有服务器上都可用。可以按第 3.5.4 节 “将配置传送到所有节点”中所述使用 Csync2 同步配置文件。

12.4. 更多信息

要了解更多有关 Linux 虚拟服务器的信息,请参见 http://www.linuxvirtualserver.org/ 上的项目主页。

有关 ldirectord 的更多信息,请参见其综合性手册页。

第 13 章地域群集(多站点群集)

摘要

除本地群集和城域群集外,SUSE® Linux Enterprise High Availability Extension 11 SP4 还支持地理位置分散的群集(地域群集,有时也称为多站点群集)。这意味着,每个本地群集可以有多个地域分散的站点。这些群集之间的故障转移由更高级的实体、所谓的 booth 进行协调。对地域群集的支持是作为 Geo Clustering for SUSE Linux Enterprise High Availability Extension 的一个独立扩展提供。有关如何使用和设置地域群集的细节,请参见《Quick Start Geo Clustering for SUSE Linux Enterprise High Availability Extension》(Geo Clustering for SUSE Linux Enterprise High Availability Extension 快速入门)。可以从 http://www.suse.com/documentation/ 或者所安装系统的 /usr/share/doc/manual/sle-ha-geo-manuals_en/ 下找到该文档。

部分 III. 储存和数据复制

第 14 章OCFS2

摘要

Oracle Cluster File System 2 (OCFS2) 是一个自 Linux 2.6 内核以来完全集成的通用日记文件系统。OCFS2 可将应用程序二进制文件、数据文件和数据库储存到共享储存设备。群集中的所有节点对文件系统都有并行的读和写权限。用户空间控制守护程序(由克隆资源管理)提供与 HA 堆栈的集成,尤其是与 OpenAIS/Corosync 和分布式锁管理器 (DLM) 的集成。

14.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 支持,提高了数据库性能。

14.2. OCFS2 包和管理实用程序

OCFS2 内核模块(ocfs2)自动安装到 SUSE® Linux Enterprise Server 11 SP4 中的 High Availability Extension 上。要使用 OCFS2,请确保在群集中的每个节点上安装以下包:ocfs2-tools 和与内核匹配的 ocfs2-kmp-* 包。

ocfs2-tools 包提供以下实用程序,用于管理 OFS2 卷。有关语法信息,请参见其手册页。

表 14.1. OCFS2 实用程序

OCFS2 实用程序

描述

debugfs.ocfs2

为了调试检查 OCFS 文件系统的状态

fsck.ocfs2

检查文件系统的错误并进行选择性的修改。

mkfs.ocfs2

在某个设备上创建 OCFS2 文件系统,通常是共享物理或逻辑磁盘上的某个分区。

mounted.ocfs2

检测并列出群集系统上所有的 OCFS2 卷。检测并列出已经安装了 OCFS2 设备的系统上的所有节点或列出所有的 OCFS2 设备。

tunefs.ocfs2

更改 OCFS2 文件系统参数,包括卷标、节点槽号、所有节点槽的日志大小和卷大小。


14.3. 配置 OCFS2 服务和 STONITH 资源

您在可以创建 OCFS2 卷之前,必须在群集中配置以下资源作为服务:DLM、O2CB 和 STONITH 资源。OCFS2 使用运行于用户空间中的 Pacemaker 提供的群集成员资格服务。因此,DLM 和 O2CB 需要配置为存在于群集中每个节点上的克隆资源。

以下过程使用 crm 外壳配置群集资源。或者,您还可以使用 Pacemaker GUI 配置该资源。

[Note]cLVM 和 OCFS2 的 DLM 资源

cLVM 和 OCFS2 需要一个在群集中的所有节点上运行的 DLM 资源,因此通常被配置为克隆资源。如果您的设置中既包含 OCFS2 也包含 cLVM,则为 OCFS2 和 cLVM 配置一个 DLM 资源就足够了。

过程 14.1. 配置 DLM 和 O2CB 资源

这种配置由包含多个原始资源的基本组和一个基本克隆构成。基本组和基本克隆随后可以用于各种方案(例如,用于 OCFS2 和 cLVM)。您只需根据需要用相应的原始资源扩展基本组。由于基本组具有内部共置和排序功能,您不必指定许多单个组、克隆及其依赖性,方便了总体设置。

对群集中的一个节点执行以下步骤:

  1. 启动壳层,并以 root 用户身份或同等身份登录。

  2. 运行 crm configure

  3. 输入以下命令创建 DLM 和 O2CB 的原始资源:

    crm(live)configure# primitive dlm ocf:pacemaker:controld \
          op monitor interval="60" timeout="60"
    primitive o2cb ocf:ocfs2:o2cb \
          op monitor interval="60" timeout="60"
    

    dlm 克隆资源会控制分布式锁管理器服务,并确保此服务在群集中的所有节点上都启动。由于基本组具有内部共置和排序功能,o2cb 服务仅在已有一个 dlm 服务副本在运行的节点上启动。

  4. 输入以下命令以创建基本组和基本克隆:

    crm(live)configure# group base-group dlm o2cb 
    clone base-clone base-group \
          meta interleave="true"
  5. 使用 show 复查更改。

  6. 如果全部都正确,请使用 commit 提交更改,并使用 exit 退出 crm 当前配置。

过程 14.2. 配置 STONITH 资源

[Note]所需的 STONITH 设备

您需要配置屏蔽设备。没有一个适当的 STONITH 机制(如 external/sbd),则配置会失败。

  1. 启动壳层,并以 root 用户身份或同等身份登录。

  2. 第 17.1.3.1 节 “创建 SBD 分区”中所述,创建 SBD 分区。

  3. 运行 crm configure

  4. 在将 /dev/sdb2 作为共享储存区上用于检测信号和屏蔽的专用分区的同时,将 external/sdb 配置为屏蔽设备:

    crm(live)configure# primitive sbd_stonith stonith:external/sbd \
          params pcmk_delay_max="15" \
          op monitor interval="15" timeout="15"
  5. 使用 show 复查更改。

  6. 如果全部内容都正确,请使用 commit 提交更改,并使用 exit 退出 crm 当前配置。

14.4. 创建 OCFS2 卷

第 14.3 节 “配置 OCFS2 服务和 STONITH 资源”中所述将 DLM 和 O2CB 配置为群集资源后,配置系统以使用 OCFS2 并创建 OCFs2 卷。

[Note]适用于应用程序和数据文件的 OCFS2 卷

我们建议您通常将应用程序文件和数据文件储存在不同的 OCFS2 卷上。如果应用程序卷和数据卷具有不同的装入要求,则必须将它们储存在不同的卷上。

开始之前要准备计划用于 OCFS2 卷的块设备。将这些设备留作可用空间。

然后,按过程 14.3, “创建并格式化 OCFS2 卷”中所述使用 mkfs.ocfs2 创建和格式化 OCFS2 卷。此命令最重要的参数列于表 14.2 “重要的 OCFS2 参数”中。有关此命令的更多信息和命令语法,请参见 mkfs.ocfs2 手册页。

表 14.2. 重要的 OCFS2 参数

OCFS2 参数

描述和建议

卷标 (-L)

卷的描述性名称能够在不同节点上安装卷时唯一标识它。使用 tunefs.ocfs2 实用程序根据需要修改该卷标。

群集大小 (-C)

群集大小是分配给文件以保存数据的最小空间单元。有关可用选项和推荐的信息,请参见 mkfs.ocfs2 手册页。

节点槽数 (-N)

可以同时安装卷的最大节点数。OCFS2 会为每个节点创建单独的系统文件(如日记)。访问卷的节点可以是小尾端结构(如 x86 x86-64 和 ia64)和大尾端结构(如 ppc64 和 s390x)的组合。

特定于节点的文件作为本地文件。节点槽号附加到该本地文件。例如:journal:0000 属于指派到槽号 0 的所有节点。

根据预期有多少个节点并行装入卷,在创建卷时设置每个卷的最大节点槽数。使用 tunefs.ocfs2 实用程序根据需要增加节点槽数。请注意,此值不能减小。

块大小 (-b)

文件系统可寻址的最小空间单元创建卷时请指定块大小。有关可用选项和推荐的信息,请参见 mkfs.ocfs2 手册页。

打开/关闭特定功能 (--fs-features)

可以提供功能标志的逗号分隔列表,mkfs.ocfs2 会尝试根据此列表创建具有那些功能的文件系统。要打开某功能,请将其加入列表。要关闭某功能,请在其名称前加 no

有关所有可用标志的概述,请参见 mkfs.ocfs2 手册页。

预定义功能 (--fs-feature-level)

允许您从一组预定义文件系统功能中进行选择。有关可用选项的信息,请参见 mkfs.ocfs2 手册页。


如果使用 mkfs.ocfs2 创建和格式化卷时未指定任何特定功能,则默认情况下将启用以下功能:backup-supersparseinline-dataunwrittenmetaeccindexed-dirsxattr

过程 14.3. 创建并格式化 OCFS2 卷

只在群集节点之上执行以下步骤。

  1. root 用户身份打开终端窗口并登录。

  2. 使用命令 crm status 检查群集是否联机。

  3. 使用 mkfs.ocfs2 实用程序创建并格式化卷。有关此命令语法的信息,请参见 mkfs.ocfs2 手册页。

    例如,要在 /dev/sdb1 上创建最多支持 32 个群集节点的新 OCFS2 文件系统,请输入以下命令:

    root #  mkfs.ocfs2 -N 32 /dev/sdb1

14.5. 装入 OCFS2 卷

可以手动装入 OCFS2 卷,也可以按过程 14.5, “使用群集管理器装入 OCFS2 卷”中所述使用群集管理器将其装入。

过程 14.4. 手动装入 OCFS2 卷

  1. root 用户身份打开终端窗口并登录。

  2. 使用命令 crm status 检查群集是否联机。

  3. 使用 mount 命令从命令行装入卷。

[Warning]手动装入的 OCFS2 设备

如果因方便测试而手动安装了 OCFS2 文件系统,则请务必在通过 OpenAIS 启动使用该文件系统之前再次将其卸载。

过程 14.5. 使用群集管理器装入 OCFS2 卷

要为 High Availability 软件安装 OCFS2 卷,请在群集中配置 ocf 文件系统资源。以下过程使用 crm 外壳配置群集资源。或者,您还可以使用 Pacemaker GUI 配置该资源。

  1. 启动壳层,并以 root 用户身份或同等身份登录。

  2. 运行 crm configure

  3. 配置 Pacemaker 以在群集中的每个节点上装入 OCFS2 文件系统:

    crm(live)configure# primitive ocfs2-1 ocf:heartbeat:Filesystem \
          params device="/dev/sdb1" directory="/mnt/shared" fstype="ocfs2" options="acl" \
          op monitor interval="20" timeout="40"
  4. 将文件系统原始资源添加到您在过程 14.1, “配置 DLM 和 O2CB 资源”中配置的基本组:

    1. 输入

      crm(live)configure# edit base-group
    2. 在打开的 vi 编辑器中,如下所示修改组并保存更改:

      crm(live)configure# group base-group dlm o2cb ocfs2-1

      由于基本组具有内部共置和排序功能,Pacemaker 将仅在也有 o2cb 资源已在运行的节点上启动 ocfs2-1 资源。

  5. 使用 show 复查更改。要检查是否配置了所有需要的资源,另请参考附录 C, OCFS2 和 cLVM 的示例配置

  6. 如果全部都正确,则使用 commit 提交更改,并使用 exit 退出 crm 当前配置。

14.6. 在 OCFS2 文件系统上使用定额

要在 OCFS2 文件系统上使用定额,请分别使用相应的定额功能或装入选项创建和装入文件系统:ursquota(用于单独用户的定额)或 grpquota(用于组的定额)。这些功能也可以稍后使用 tunefs.ocfs2 在未装入的文件系统上启用。

文件系统启用了相应的定额功能后,它会跟踪其元数据,查看每个用户(或组)使用的空间和文件数。由于 OCFS2 将定额信息视为文件系统内部元数据,因此您无需运行 quotacheck(8) 程序。所有功能都内置到 fsck.ocfs2 和文件系统驱动程序中。

要实施强加于每个用户或组的限制,请如同在任何其他文件系统上一样运行 quotaon(8)。

由于性能原因,每个群集节点都会在本地执行定额会计,并每 10 秒将此信息与通用中央储存同步一次。此间隔可使用 tunefs.ocfs2usrquota-sync-intervalgrpquota-sync-interval 选项调整。因此,定额信息可能不会始终都准确,因而在几个群集节点上并行操作时,用户或组可以稍微超出其定额限制。

14.7. 更多信息

有关 OCFS2 的更多信息,请参见以下链接:

http://oss.oracle.com/projects/ocfs2/

Oracle 上的 OCFS2 项目主页。

http://oss.oracle.com/projects/ocfs2/documentation

项目文档主页上的 OCFS2 User's Guide(《OCFS2 用户指南》)

第 15 章DRBD

摘要

通过分布式复制块设备 (DRBD*),您可以为位于 IP 网络上两个不同站点的两个块设备创建镜像。当和 OpenAIS 一起使用时,DRBD 支持分布式高可用性 Linux 群集。本章说明如何安装和设置 DRBD。

15.1. 概念概述

DRBD 以确保数据的两个副本保持相同的方式将主设备上的数据复制到次设备上。将其视为联网的 RAID 1。它实时对数据进行镜像,以便连续复制。应用程序不需要知道实际上它们的数据储存在不同的磁盘上。

[Important]未加密数据

镜像之间的数据通讯是不加密的。为实现安全数据交换,您应为连接部署虚拟专用网 (VPN) 解决方案。

DRBD 是 Linux 内核模块,位于下端的 I/O 调度程序与上端的文件系统之间,请参见图 15.1 “DRBD 在 Linux 中的位置”。要与 DRBD 通讯,用户需使用高级别命令 drbdadm。为了提供最大的灵活性,DRBD 附带了低级别工具 drbdsetup

图 15.1. DRBD 在 Linux 中的位置

DRBD 在 Linux 中的位置

DRBD 允许使用 Linux 支持的任何块设备,通常包括:

  • 硬盘分区或完整硬盘

  • 软件 RAID

  • 逻辑卷管理器 (LVM)

  • 企业卷管理系统 (EVMS)

默认情况下,DRBD 使用 TCP 端口 7788 及更高端口进行 DRBD 节点间的通讯。请确保您的防火墙不会阻止所用端口上的通讯。

在 DRBD 设备上创建文件系统之前,必须先设置 DRBD 设备。与用户数据相关的所有操作都应通过 /dev/drbd_N 设备单独执行而不是在原始设备上执行,因为 DRBD 会将原始设备的最后一个部分用于存储元数据。使用原始设备会导致数据不一致。

借助 udev 集成,您还可以获取 /dev/drbd/by-res/RESOURCES 格式的符号链接,这种链接更易于使用,而且还能防范在记错设备次要编号的情况下出现安全问题。

例如,如果原始设备大小为 1024 MB,则 DRBD 设备仅有 1023 MB 可用于数据存储,而大约保留 70 KB 的隐藏容量用于存储元数据。通过 /dev/drbdN 访问剩余 KB 的任何尝试都会失败,因为这些 KB 不可用于存储用户数据。

15.2. 安装 DRBD 服务

要安装 DRBD 所需的包,请按第 I 部分 “安装和设置”中所述在联网群集中的两台 SUSE Linux Enterprise Server 计算机上安装 High Availability Extension 附加产品。安装 High Availability Extension 时还安装 DRBD 程序文件。

如果不需要完整群集堆栈而只需使用 DRBD,请参考表 15.1 “DRBD RPM 包”。它包含用于 DRBD 的所有 RPM 程序包的列表。近来,drbd 包已分为单独的包。

表 15.1. DRBD RPM 包

文件名

说明

drbd

简易包,分为其他包

drbd-bash-completion

针对 drbdadm 的可编程 bash completion 支持

drbd-heartbeat

DRBD 的 Heartbeat 资源代理(仅 Heartbeat 需要)

drbd-kmp-default

DRBD 的内核模块(需要)

drbd-kmp-xen

DRBD 的 Xen 内核模块

drbd-udev

DRBD 的 udev 集成脚本,管理指向 /dev/drbd/by-res/dev/drbd/by-disk 中的 DRBD 设备的 symlink

drbd-utils

DRBD 的管理实用程序(需要)

drbd-pacemaker

DRBD 的 Pacemaker 资源代理

drbd-xen

DRBD 的 Xen 块设备管理脚本

yast2-drbd

YaST DRBD 配置(建议)


要简化 drbdadm 的处理,可使用 RPM 程序包 drbd-bash-completion 中的 Bash 补全支持。如果要在当前外壳会话中启用它,请插入以下命令:

root # source /etc/bash_completion.d/drbdadm.sh

要将其永久用于 root,请创建或扩展文件 /root/.bashrc 并插入上一行。

15.3. 配置 DRBD 服务

[Note]所需的调整

以下过程使用服务器名称 alice 和 bob,以及群集资源名称 r0。它将 alice 设置为主节点,并使用 /dev/sda1 储存数据。确保修改这些说明,以使用您自己的节点和文件名。

开始配置 DRBD 之前,确保 Linux 节点中的块设备已就绪且已分区(如果需要)。以下过程假定您有两个节点 alice 和 bob,它们应使用 TCP 端口 7788。确保此端口在防火墙中处于打开状态。

要手动设置 DRBD,请按如下操作:

过程 15.1. 手动配置 DRBD

  1. 如果群集已在使用 DRBD,请将群集置于维护模式:

    root # crm configure property maintenance-mode=true

    当群集已使用 DRBD 时,如果您跳过此步骤,当前配置中的语法错误会导致服务关闭。

  2. root 用户身份登录。

  3. 更改 DRBD 的配置文件:

    1. 打开文件 /etc/drbd.conf 并插入以下行(如果尚不存在):

      include "drbd.d/global_common.conf";
      include "drbd.d/*.res";

      从 DRBD 8.3 开始,配置文件分为单独的文件,位于目录 /etc/drbd.d/ 下。

    2. 打开文件 /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;
      }

      这些选项用于在引导时减少超时,有关更多细节,请参见 http://www.drbd.org/users-guide-emb/re-drbdconf.html

    3. 创建文件 /etc/drbd.d/r0.res,根据具体情况更改行,然后保存:

      resource r0 { 1
        device /dev/drbd0; 2
        disk /dev/sda1; 3
        meta-disk internal; 4
        on alice { 5
          address  192.168.1.10:7788; 6
        }
        on bob { 5
          address 192.168.1.11:7788; 6
        }
        syncer {
          rate  7M; 7
        }
      }

      1

      方便与需要这些资源的服务建立某种关联的名称。例如 nfshttpmysql_0postgres_wal 等。

      2

      DRBD 的设备名及其次要编号。

      在以上示例中,为 DRBD 使用了次要编号 0。udev 集成脚本将提供符号链接 /dev/drbd/by-res/nfs/0。也可以在配置中忽略设备节点名称,改为使用以下行:

      drbd0 minor 0/dev/ 是可选的)或 /dev/drbd0

      3

      在节点间复制的原始设备。请注意,在本例中,两个节点上的设备相同。如果需要不同的设备,请将 disk 参数移到 on 主机中。

      4

      元磁盘参数通常包含值 internal,但可以明确指定一个设备来保存元数据。有关详细信息,请参见http://www.drbd.org/users-guide-emb/ch-internals.html#s-metadata

      5

      on 部分指定了此配置语句要应用到的主机。

      6

      各个节点的 IP 地址和端口号。每个资源都需要单独的端口,通常从 7788 开始。

      7

      同步率。将其设置为磁盘和网络带宽中较小者的三分之一。它仅限制重新同步,而不限制复制。

  4. 检查配置文件的语法。如果以下命令返回错误,请校验文件:

    root # drbdadm dump all
  5. 如果您已配置 Csync2(这应该是默认设置),则 DRBD 配置文件已包含在需要同步的文件的列表中。要同步文件,请使用以下命令:

    root # csync2 -xv /etc/drbd.d/

    如果您不具有 Csync2(或不想使用它),请将 DRBD 配置文件手动复制到其他节点:

    root # scp /etc/drbd.conf bob:/etc/
    scp /etc/drbd.d/*  bob:/etc/drbd.d/
  6. 通过在每个节点上输入以下命令,初始化两个系统上的元数据:

    root # drbdadm create-md r0
    root # rcdrbd start

    如果磁盘已包含不再需要的文件系统,请使用以下命令清空文件系统结构,然后重复此步骤:

    root #  dd if=/dev/zero of=/dev/sda1 count=16 bs=1M
  7. 通过在每个节点上输入以下命令,监视 DRBD 状态:

    root # rcdrbd status

    应得到类似以下内容的输出:

    [... version string omitted ...]
    m:res  cs         ro                   ds                         p  mounted  fstype
    0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C
  8. 在所需的主节点(本例中为 alice)上启动重新同步过程:

    root # drbdadm -- --overwrite-data-of-peer primary r0
  9. 再次使用 rcdrbd status 检查状态,将得到:

    
    
    ...
    m:res  cs         ro                 ds                 p  mounted  fstype
    0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C

    ds 行中的状态(磁盘状态)在两个节点上都必须为 UpToDate。

  10. 在 DRBD 设备上创建文件系统,例如:

    root # mkfs.ext3 /dev/drbd/by-res/r0/0
  11. 装入文件系统并使用它:

    root # mount /dev/drbd /mnt/
  12. 重设置群集的维护模式标志:

    root # crm configure property maintenance-mode=false

或者,要使用 YaST 配置 DRBD,请按照以下操作继续:

过程 15.2. 使用 YaST 配置 DRBD

  1. 启动 YaST 并选择配置模块 High Availability+DRBD。如果您已有 DRBD 配置,YaST 会向您发出警告。YaST 会更改您的配置,并将旧的 DRBD 配置文件另存为 *.YaSTsave 文件。

    启动配置+引导中的引导标志保留原样(默认情况下为 off);请不要更改此项设置,因为 Pacemaker 会管理此服务。

  2. 资源的实际配置可在资源配置中完成(请参见图 15.2 “资源配置”)。

    图 15.2. 资源配置

    资源配置

    添加可创建新资源。需要设置以下参数两次:

    资源名称

    资源的名称(必需)

    名称

    相关节点的主机名

    地址:端口

    相应节点的 IP 地址和端口号(默认值 7788)

    设备

    用于访问复制数据的块设备路径。如果设备包含次要编号,则关联的块设备通常命名为 /dev/drbdX,其中的 X 是设备次要编号。如果设备不包含次要编号,请务必在设备名称后面添加 minor 0

    磁盘

    在两个节点之间进行复制的设备。

    元磁盘

    可将元磁盘的值设为 internal,或明确指定一个由索引扩展的设备来保存 DRBD 所需的元数据。

    实际设备也可用于多个 drbd 资源。例如,如果第一个资源的元磁盘/dev/sda6[0],则可以将 /dev/sda6[1] 用于第二个资源。但是,必须为此磁盘上的每个资源保留至少 128 MB 空间。固定的元数据大小会限制可复制的最大数据大小。

    所有这些选项在 /usr/share/doc/packages/drbd-utils/drbd.conf 文件的示例和 drbd.conf(5) 的手册页中均有说明。

  3. 如果您已配置 Csync2(这应该是默认设置),则 DRBD 配置文件已包含在需要同步的文件的列表中。要同步文件,请使用以下命令:

    root # csync2 -xv /etc/drbd.d/

    如果您没有 Csync2(或不想使用它),请手动将 DRBD 配置文件复制到另一个节点(本例中是名为 bob 的另一个节点):

    root # scp /etc/drbd.conf bob:/etc/
    scp /etc/drbd.d/*  bob:/etc/drbd.d/
  4. 通过在每个节点上输入以下命令,初始化并启动两个系统上的 DRBD 服务:

    root # drbdadm create-md r0
    root # rcdrbrd start
  5. 通过在 alice 上输入以下命令,将 alice 配置为主节点:

    root # drbdsetup /dev/drbd0 primary --overwrite-data-of-peer
  6. 通过在每个节点上输入以下命令,检查 DRBD 服务状态:

    rcdrbd status

    继续之前,等待两个节点上的块设备完全同步。重复 rcdrbd status 命令以跟踪同步进度。

  7. 两个节点上的块设备都完全同步之后,使用首选文件系统格式化主节点上的 DRBD 设备。可以使用任何 Linux 文件系统。建议使用 /dev/drbd/by-res/RESOURCE 名称。

15.4. 测试 DRBD 服务

如果安装和配置过程和预期一样,则您就准备好运行 DRBD 功能的基本测试了。此测试还有助于了解该软件的工作原理。

  1. 在 alice 上测试 DRBD 服务。

    1. 打开终端控制台,然后以 root 用户身份登录。

    2. 在 alice 上创建一个安装点,如 /srv/r0

      root # mkdir -p /srv/r0
    3. 装入 drbd 设备:

      root # mount -o rw /dev/drbd0 /srv/r0
    4. 从主节点创建文件:

      root # touch /srv/r0/from_alice
    5. 卸载 alice 上的磁盘:

      root # umount /srv/r0
    6. 通过在 alice 上键入以下命令,降级 alice 上的 DRBD 服务:

      root # drbdadm secondary
  2. 在 bob 上测试 DRBD 服务。

    1. 在 bob 上打开终端控制台,然后以 root 身份登录。

    2. 在 bob 上,将 DRBD 服务升级为主服务:

      root # drbdadm primary
    3. 在 bob 上,检查 bob 是否为主节点:

      root # rcdrbd status
    4. 在 bob 上,创建一个安装点,如 /srv/r0mount

      root # mkdir /srv/r0mount
    5. 在 bob 上,装入 DRBD 设备:

      root # mount -o rw /dev/drbd_r0 /srv/r0mount
    6. 校验在 alice 上创建的文件是否存在:

      root # ls /srv/r0

      /srv/r0mount/from_alice 文件应该会列出。

  3. 如果该服务在两个节点上都运行正常,则 DRBD 安装即已完成。

  4. 再次将 alice 设置为主节点。

    1. 通过在 bob 上键入以下命令,卸下 bob 上的磁盘:

      root # umount /srv/r0
    2. 通过在 bob 上键入以下命令,降级 bob 上的 DRBD 服务:

      root # drbdadm secondary
    3. 在 alice 上,将 DRBD 服务升级为主服务:

      root # drbdadm primary
    4. 在 alice 上,检查 alice 是否为主节点:

      rcdrbd status
  5. 要使服务在服务器有问题时自动启动并实现故障转移,可以使用 OpenAIS 将 DRBD 设置为高可用性服务。有关为 SUSE Linux Enterprise 11 安装和配置 OpenAIS 的信息,请参见第 II 部分 “配置和管理”

15.5. 调整 DRBD

可使用几种方式调整 DRBD:

  1. 对元数据使用外部磁盘。这可能会有所帮助,不过会降低维护便捷性。

  2. 创建 udev 规则以更改 DRBD 设备的预读。将以下行保存在文件 /etc/udev/rules.d/82-dm-ra.rules 中,并将 read_ahead_kb 值更改为工作负载:

    ACTION=="add", KERNEL=="dm-*", ATTR{bdi/read_ahead_kb}="4100"

    此行只有在使用 LVM 时才生效。

  3. 通过 sysctl 更改接收和发送缓冲区设置,以优化网络连接。

  4. 在 DRBD 配置中更改 max-buffers 和/或 max-epoch-size

  5. 根据 IO 模式增大 al-extents 值。

  6. 如果您有一个配备了 BBU(电池备份单元)的硬件 RAID 控制器,设置 no-disk-flushesno-disk-barrier 和/或 no-md-flushes 可能会有所帮助。

  7. 根据工作负载启用读平衡。有关详细信息,请参见http://blogs.linbit.com/p/256/read-balancing/

15.6. DRBD 查错

DRBD 设置涉及很多不同的组件,因此产生问题的来源可能多种多样。以下各部分包括多个常用方案和多种建议解决方案。

15.6.1. 配置

如果初始 DRBD 设置不符合预期,说明配置中可能有错误。

获取关于配置的信息:

  1. 打开终端控制台,然后以 root 用户身份登录。

  2. 通过运行 drbdadm(带 -d 选项),测试配置文件。输入以下命令:

    root # drbdadm -d adjust r0

    adjust 选项的干运行中,drbdadm 将 DRBD 资源的实际配置与您的 DRBD 配置文件进行比较,但它不会执行这些调用。检查输出以确保您了解任何错误的根源。

  3. 如果 /etc/drbd.d/*drbd.conf 文件中存在错误,请先更正,然后再继续。

  4. 如果分区和设置正确,请在不使用 -d 的情况下再次运行 drbdadm

    root # drbdadm adjust r0

    这会将配置文件应用到 DRBD 资源。

15.6.2. 主机名

对于 DRBD,主机名区分大小写(Node0node0 是不同的主机),并将与内核中储存的主机名进行比较(参见 uname -n 输出)。

如果有多个网络设备,且想要使用专用网络设备,可能不会将主机名解析为所用的 IP 地址。在这种情况下,可使用参数 disable-ip-verification

15.6.3. TCP 端口 7788

如果系统无法连接到对等体,说明本地防火墙可能有问题。默认情况下,DRBD 使用 TCP 端口 7788 访问另一个节点。确保在两个节点上该端口均可访问。

15.6.4. DRBD 设备在重引导后损坏

如果 DRBD 不知道哪个实际设备保管了最新数据,它就会变为节点分裂状态。在这种情况下,DRBD 子系统将分别成为次系统,并且互不相连。在这种情况下,可以在日志记录数据中找到以下讯息:

Split-Brain detected, dropping connection!

要解决此问题,请在要丢弃其数据的节点上输入以下命令:

root # drbdadm secondary r0 
root # drbdadm -- --discard-my-data connect r0

在具有最新数据的节点上输入以下命令:

root # drbdadm connect r0

通过使用对等体的数据重写一个节点的数据,以此确保两个节点上的视图保持一致,该问题可得到解决。

15.7. 更多信息

以下开放源代码资源可用于 DRBD:

  • 项目主页:http://www.drbd.org

  • 请参见 Highly Available NFS Storage with DRBD and Pacemaker (↑Highly Available NFS Storage with DRBD and Pacemaker)。

  • Linux Pacemaker 群集堆栈项目的 http://clusterlabs.org/wiki/DRBD_HowTo_1.0

  • DRBD 的以下手册页可用于分发:drbd(8)drbddisk(8)drbdsetup(8)drbdsetup(8)drbdadm(8)drbd.conf(5)

  • 可在 /usr/share/doc/packages/drbd/drbd.conf 中查找注释过的 DRBD 示例配置

  • 此外,为了更方便地在整个群集中进行储存管理,请参见 http://blogs.linbit.com/p/666/drbd-manager 上有关 DRBD-Manager 的最新声明。

第 16 章群集式逻辑卷管理器 (cLVM)

摘要

当管理群集上的共享储存区时,所有节点必须收到有关对储存子系统所做更改的通知。Linux 卷管理器 2 (LVM2) 广泛用于管理本地储存,已扩展为支持对整个群集中的卷组进行透明管理。可使用与本地储存相同的命令来管理群集卷组。

16.1. 概念概述

群集 LVM 集成了不同工具:

分布式锁管理器(DLM)

集成了对 cLVM 的磁盘访问。

逻辑卷管理器 2 (LVM2)

支持将一个文件系统灵活分布到多个磁盘上。LVM 可提供磁盘空间虚拟池。

群集式逻辑卷管理器 (cLVM)

集成了对 LVM2 元数据的访问,以使每个节点都了解相关更改。cLVM 未集成对共享数据本身的访问;要使 cLVM 可执行此操作,必须在 cLVM 管理的储存区上配置 OCFS2 或其他群集感知应用程序。

16.2. cLVM 配置

根据具体情况,可使用具有以下层的 cLVM 创建 RAID 1 设备:

  • LVM.  这是非常灵活的解决方案,可用于增大或减小文件系统大小、添加更多物理储存空间或创建文件系统快照。有关此方法的描述,请参见第 16.2.3 节 “方案:iSCSI 在 SAN 上的 cLVM”

  • DRBD.  此解决方案仅提供 RAID 0(分段)和 RAID 1(镜像)。有关上一方法的描述,请参见第 16.2.4 节 “方案:使用 DRBD 的 cLVM”

  • MD 设备(Linux Software RAID 或 mdadm).  虽然此解决方案可提供所有 RAID 级别,但它尚不支持群集。

尽管 MD 设备(Linux 软件 RAID 或 mdadm)提供所有 RAID 级别,但它尚不支持群集。因此,以上列表并未包含此类设备。

请确保已满足以下先决条件:

  • 共享储存设备是可用的,如通过光纤通道、FCoE、SCSI、iSCSI SAN 或 DRBD* 提供的共享储存设备。

  • 如果是 DRBD,那么两个节点都必须是主节点(如以下过程中所述)。

  • 检查 LVM2 的锁定类型是否为群集感知。/etc/lvm/lvm.conf 中的关键字 locking_type 必须包含值 3(应是默认值)。如果需要,将此配置复制到所有节点。

[Note]先创建群集资源

首先如第 16.2.2 节 “创建群集资源”中所述创建群集资源,然后创建 LVM 卷。否则,稍后将无法删除卷。

16.2.1. 配置 Cmirrord

要跟踪群集中的镜像日志信息,可以使用 cmirrord 守护程序。如果此守护程序未运行,则无法处理群集镜像。

假定 /dev/sda/dev/sdb 是共享储存设备。必要时请使用您自己的设备名称替换上述名称。按如下所示继续:

  1. 创建一个至少包含两个节点的群集。

  2. 配置群集以运行 dlmclvmd 和 STONITH:

    root # crm configure
    crm(live)configure# primitive clvmd ocf:lvm2:clvmd \
            op stop interval="0" timeout="100" \
            op start interval="0" timeout="90" \
            op monitor interval="20" timeout="20"
    crm(live)configure# primitive dlm ocf:pacemaker:controld \
            op start interval="0" timeout="90" \
            op stop interval="0" timeout="100" \
            op monitor interval="60" timeout="60"
    crm(live)configure# primitive sbd_stonith stonith:external/sbd
    crm(live)configure# group base-group dlm clvmd
    crm(live)configure# clone base-clone base-group \
            meta interleave="true"
  3. 使用 exit 退出 crmsh 并提交更改。

  4. 创建群集卷组 (VG):

    root # pvcreate /dev/sda /dev/sdb
    root # vgcreate -cy vg /dev/sda /dev/sdb
  5. 在群集中创建镜像日志逻辑卷 (LV):

    root # lvcreate -nlv -m1 -l10%VG vg --mirrorlog mirrored
  6. 使用 lvs 显示进度。如果百分数已达到 100%,则表示镜像磁盘已成功同步。

  7. 要测试群集卷 /dev/vg/lv,请执行下列步骤:

    1. 读取或写入到 /dev/vg/lv

    2. 使用 lvchange -an 停用 LV。

    3. 使用 lvchange -ay 激活 LV。

    4. 使用 lvconvert 将镜像日志转换为磁盘日志。

  8. 在其他群集 VG 中创建镜像日志 LV。此卷组与先前的卷组不同。

当前的 cLVM 在每个镜像端只能处理一个物理卷 (PV)。如果一个镜像实际由多个需要连接或拆分的 PV 组成,则 lvcreate 无法了解此情况。因此,lvcreatecmirrord 元数据需要了解 PV 在其中一端的分组,以便有效地支持 RAID10。

为支持 RAID10 处理 cmirrord,请使用以下过程(假定 /dev/sda/dev/sdb 是共享储存设备):

  1. 创建卷组 (VG):

    root # pvcreate /dev/sda /dev/sdb
    root # vgcreate vg /dev/sda /dev/sdb
  2. 打开文件 /etc/lvm/lvm.conf 并转到 allocation 部分。设置下列行并保存文件:

    mirror_legs_require_separate_pvs = 1
  3. 将标记添加到 PV:

    root # pvchange --addtag @a /dev/sda
    root # pvchange --addtag @b /dev/sdb

    标记是无序的关键字或指派给储存对象元数据的术语。使用标记功能可以采用您认为有用的方式将无序的标记列表附加到 LVM 储存对象元数据,从而对储存对象集合进行分类。

  4. 列出标记:

    root # pvs -o pv_name,vg_name,pv_tags /dev/sd{a,b}

    您应收到以下输出结果:

      PV         VG     PV Tags
      /dev/sda vgtest a
      /dev/sdb vgtest b

如需有关 LVM 的更多信息,请参见《SUSE Linux Enterprise Server 11 SP4 储存管理指南》中的“LVM 配置”一章,网址:http://www.suse.com/documentation/

16.2.2. 创建群集资源

准备群集以便使用 cLVM 包括以下基本步骤:

过程 16.1. 创建 DLM 资源

[Note]cLVM 和 OCFS2 的 DLM 资源

cLVM 和 OCFS2 都需要一个在群集中的所有节点上运行的 DLM 资源,因而通常配置为一个克隆。如果设置既包括 OCFS2 也包括 cLVM,则为 OCFS2 和 cLVM 配置一个 DLM 资源就足够了。

  1. root 用户身份启动外壳并登录。

  2. 运行 crm configure

  3. 使用 show 检查群集资源的当前配置。

  4. 如果已经配置 DLM 资源(及相应的基本组和基本克隆),则继续过程 16.2, “创建 LVM 和 cLVM 资源”

    否则,如过程 14.1, “配置 DLM 和 O2CB 资源”中所述配置 DLM 资源和相应的基本组和基本克隆。

  5. 使用 exit 保留 crm 当前配置。

过程 16.2. 创建 LVM 和 cLVM 资源

  1. root 用户身份启动外壳并登录。

  2. 运行 crm configure

  3. 如下所示配置 cLVM 资源:

    crm(live)configure# primitive clvm ocf:lvm2:clvmd \
          params daemon_timeout="30"
  4. 如下所示为卷组配置 LVM 资源:

    crm(live)configure# primitive vg1 ocf:heartbeat:LVM \
          params volgrpname="cluster-vg" \
          op monitor interval="60" timeout="60"
  5. 如果希望仅在一个节点上激活卷组,则如下所述配置 LVM 资源并忽略步骤 6

    crm(live)configure# primitive vg1 ocf:heartbeat:LVM \
          params volgrpname="cluster-vg" exclusive="yes" \
          op monitor interval="60" timeout="60"

    在这种情况下,cLVM 将保护 VG 内的所有逻辑卷,防止它们在多个节点上激活,这也是非群集应用程序的一种附加保护措施。

  6. 要确保在群集范围内激活 cLVM 和 LVM 资源,请向在过程 14.1, “配置 DLM 和 O2CB 资源”中创建的基本组添加这两个原始资源:

    1. 输入

      crm(live)configure# edit base-group
    2. 在打开的 vi 编辑器中,如下所示修改组并保存更改:

      crm(live)configure# group base-group dlm clvm vg1 ocfs2-1
      [Important]无 OCFS2 的设置

      如果设置不包括 OCFS2,则忽略基本组中的 ocfs2-1 原始资源。但不管是否使用 OCFS2,都可配置 oc2cb 原始资源并在组中包括该资源。

  7. 使用 show 复查更改。要检查是否配置了所有需要的资源,另请参考附录 C, OCFS2 和 cLVM 的示例配置

  8. 如果全部都正确,则使用 commit 提交更改,并使用 exit 退出 crm 当前配置。

16.2.3. 方案:iSCSI 在 SAN 上的 cLVM

以下方案使用两个 SAN 盒,将其 iSCSI 目标导出到多个客户端。大致想法如图 16.1 “设置使用 cLVM 的 iSCSI”所示。

图 16.1. 设置使用 cLVM 的 iSCSI

设置使用 cLVM 的 iSCSI

[Warning]数据丢失

以下过程将损坏磁盘上的所有数据!

首先只配置一个 SAN 盒。每个 SAN Box 都需要导出自己的 iSCSI 目标。按如下所示继续:

过程 16.3. 配置 iSCSI 目标 (SAN)

  1. 运行 YaST,然后单击网络服务+iSCSI 目标以启动 iSCSI 服务器模块。

  2. 如果要在计算机引导时启动 iSCSI 目标,请选择引导时,否则请选择手动

  3. 如果正在运行防火墙,请启用打开防火墙中的端口

  4. 切换到全局选项卡。如果需要身份验证,请启用进来的和/或出去的身份验证。在本例中,我们选择无身份验证

  5. 添加新的 iSCSI 目标:

    1. 切换到目标选项卡。

    2. 单击添加

    3. 输入目标名称。名称需要采用如下所示的格式:

      iqn.DATE.DOMAIN

      有关格式的更多信息,请参见 3.2.6.3.1. Type "iqn." (iSCSI Qualified Name)(3.2.6.3.1.“iqn.”(iSCSI 限定名称)类型)一节,网址:http://www.ietf.org/rfc/rfc3720.txt

    4. 如果需要描述性更强的名称,可以进行更改,但要确保不同目标之间的标识符是唯一的。

    5. 单击添加

    6. 路径中输入设备名,并使用 Scsiid

    7. 单击下一步两次。

  6. 出现警告框时单击进行确认。

  7. 打开配置文件 /etc/iscsi/iscsi.conf,并将参数 node.startup 更改为 automatic

现在按如下方式设置 iSCSI 发起程序:

过程 16.4. 配置 iSCSI 发起程序

  1. 运行 YaST,然后单击网络服务+iSCSI 发起程序

  2. 如果要在计算机引导时启动 iSCSI 发起程序,请选择引导时,否则请将其设置为手动

  3. 切换到发现选项卡并单击发现按钮。

  4. 添加 iSCSI 目标的 IP 地址和端口(请参见过程 16.3, “配置 iSCSI 目标 (SAN)”)。通常,可以保留端口并使用其默认值。

  5. 如果使用身份验证,请插入进来的和出去的用户名和口令,否则请激活无身份验证

  6. 选择下一步。找到的连接随即显示在列表中。

  7. 要测试 iSCSI 发起程序是否已成功启动,请选择显示的目标之一,然后单击登录

过程 16.5. 创建 LVM 卷组

  1. 打开已按过程 16.4, “配置 iSCSI 发起程序”运行 iSCSI 发起程序的一个节点上的 root 外壳。

  2. 使用命令 pvcreate 在磁盘 /dev/sdd/dev/sde 上准备 LVM 的物理卷:

    root # pvcreate /dev/sdd
    root # pvcreate /dev/sde
  3. 在这两个磁盘上创建群集感知卷组:

    root # vgcreate --clustered y clustervg /dev/sdd /dev/sde
  4. 根据需要创建逻辑卷:

    root # lvcreate --name clusterlv --size 500M clustervg
  5. 使用 pvdisplay 检查物理卷:

      --- Physical volume ---
          PV Name               /dev/sdd
          VG Name               clustervg
          PV Size               509,88 MB / not usable 1,88 MB
          Allocatable           yes
          PE Size (KByte)       4096
          Total PE              127
          Free PE               127
          Allocated PE          0
          PV UUID               52okH4-nv3z-2AUL-GhAN-8DAZ-GMtU-Xrn9Kh
          
          --- Physical volume ---
          PV Name               /dev/sde
          VG Name               clustervg
          PV Size               509,84 MB / not usable 1,84 MB
          Allocatable           yes
          PE Size (KByte)       4096
          Total PE              127
          Free PE               127
          Allocated PE          0
          PV UUID               Ouj3Xm-AI58-lxB1-mWm2-xn51-agM2-0UuHFC
  6. 使用 vgdisplay 检查卷组:

      --- Volume group ---
          VG Name               clustervg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  1
          VG Access             read/write
          VG Status             resizable
          Clustered             yes
          Shared                no
          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

创建卷并启动资源后,会显示一个名为 /dev/dm-* 的新设备。建议使用 LVM 资源上的群集文件系统,例如 OCFS。有关详细信息,请参见第 14 章 OCFS2

16.2.4. 方案:使用 DRBD 的 cLVM

如果数据中心位于城市、国家/地区或大洲的不同区域,则可使用以下方案。

过程 16.6. 创建使用 DRBD 的群集感知卷组

  1. 创建主/主 DRBD 资源:

    1. 首先,按过程 15.1, “手动配置 DRBD”中所述将 DRBD 设备设置为主/从模式。确保两个节点上的磁盘状态均为 up-to-date。使用 cat /proc/drbdrcdrbd status 检查情况是否如此。

    2. 将以下选项添加到配置文件(通常类似 /etc/drbd.d/r0.res):

      resource r0 {
        startup {
          become-primary-on both;
        }
      
        net {
           allow-two-primaries;
        }
        ...
      }
    3. 将更改的配置文件复制到另一个节点,例如:

      root # scp /etc/drbd.d/r0.res venus:/etc/drbd.d/
    4. 两个节点上运行以下命令:

      root # drbdadm disconnect r0
      root # drbdadm connect r0
      root # drbdadm primary r0
    5. 检查节点的状态:

      root # cat /proc/drbd
      ...
       0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r----
  2. 将 clvmd 资源作为克隆品包含在 Pacemaker 配置中,并让它依赖于 DLM 克隆资源。有关详细指示信息,请参见过程 16.1, “创建 DLM 资源”。继续之前,请确认这些资源已在群集上成功启动。可以使用 crm_mon 或 Web 界面检查正在运行的服务。

  3. 使用命令 pvcreate 准备 LVM 的物理卷。例如,在设备 /dev/drbd_r0 上,命令应类似于:

    root # pvcreate /dev/drbd_r0
  4. 创建群集感知卷组:

    root # vgcreate --clustered y myclusterfs /dev/drbd_r0
  5. 根据需要创建逻辑卷。您可能想要更改逻辑卷的大小。例如,使用以下命令创建 4 GB 的逻辑卷:

    root # lvcreate --name testlv -L 4G myclusterfs
  6. 现在 VG 内的逻辑卷可作为文件系统装入或原始用法提供。确保使用逻辑卷的服务具备适当的依赖性,以便在激活 VG 后对它们进行共置和排序。

完成这些配置步骤后,即可像在任何独立工作站中一样进行 LVM2 配置。

16.3. 显式配置合格的 LVM2 设备

当若干设备看似共享同一物理卷签名(多路径设备或 DRBD 可能发生这种情况)时,建议显式配置 LVM2 扫描 PV 的设备。

例如,如果命令 vgcreate 使用的是物理设备而不是镜像块设备,DRBD 将会感到困惑,并可能导致 DRBD 的裂脑情况。

要停用 LVM2 的单个设备,请执行以下操作:

  1. 编辑文件 /etc/lvm/lvm.conf 并搜索以 filter 开头的行。

  2. 其中的模式作为正则表达式来处理。前面的a表示接受扫描的设备模式,前面的r表示拒绝遵守该设备模式的设备。

  3. 要删除名为 /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/.*/" ]
  4. 编写配置文件并将它复制到所有群集节点。

16.4. 更多信息

可从 http://www.clusterlabs.org/wiki/Help:Contents 处的 pacemaker 邮件列表中获取完整信息。

官方 cLVM 常见问题可在以下网址中找到:http://sources.redhat.com/cluster/wiki/FAQ/CLVM

第 17 章储存保护

摘要

高可用性群集堆栈的首要任务是保护数据的完整性。这是通过避免未经协调而并发访问数据储存来实现的:例如,Ext3 文件系统只在群集中装入一次;只有在与其他群集节点协调后才会装入 OCFS2 卷。在功能良好的群集中,Pacemaker 会检测资源活动是否超出其并发限制,并启动恢复。此外,其策略引擎绝不会超出这些限制。

但是,网络分区或软件故障可能导致选出若干协调程序的情况。如果允许出现这种所谓的“节点分裂”情况,则可能会发生数据损坏。因此,在群集堆栈中增加了若干保护层,以缓解这种情况。

为实现此目标,起作用的主要组件是 IO 屏蔽/STONITH,它可确保在储存激活之前终止所有其他访问。其他机制有 cLVM2 排它激活或 OCFS2 文件锁定支持,以保护系统免受管理或应用程序错误的影响。有了这些机制,再配合进行设置后,就能可靠地避免节点分裂情况所造成的危害。

本章介绍利用储存区本身的 IO 屏蔽机制,后面是对附加保护层(用于确保对储存区的排它访问)的描述。这两套机制可以结合起来使用,以提供更高的保护级别。

17.1. 基于储存区的屏蔽

您可以使用一个或多个 STONITH 块设备 (SBD)、watchdog 支持和 external/sbd STONITH 代理来可靠地避免节点分裂状况。

17.1.1. 概述

在所有节点都可访问共享储存的环境中,设备的某个小分区会格式化,以用于 SBD。该分区的大小取决于所用磁盘的块大小(对于块大小为 512 字节的标准 SCSI 磁盘,该分区大小为 1 MB;块大小为 4 KB 的 DASD 磁盘需要 4 MB)。配置完相应的守护程序后,它在其余群集堆栈启动之前将在每个节点上都处于联机状态。它在所有其他群集组件都关闭之后才终止,从而确保了群集资源绝不会在没有 SBD 监督的情况下被激活。

此守护程序会自动将分区上的消息槽之一分配给其自身,并持续监视其中有无发送给它自己的消息。收到消息后,守护程序会立即执行请求,如启动关闭电源或重引导循环以进行屏蔽。

此守护程序会持续监视与储存设备的连接性,并在无法连接分区时自行终止。这就保证了它不会从屏蔽消息断开连接。如果群集数据驻留在不同分区中的同一逻辑单元上,这不是额外的故障点:如果与储存区的连接已丢失,工作负载总是要终止的。

额外的保护是通过 watchdog 支持提供的。新式系统支持硬件检查包,此功能需由软件组件来激发馈送数据。软件组件(通常是守护程序)会定期将服务脉冲写入检查包 - 如果守护程序停止供给检查包,则硬件会强制执行系统重启动。这可防止出现 SBD 进程本身的故障,如失去响应或由于 IO 错误而卡住。

如果 Pacemaker 集成已激活,则当设备大多数节点丢失时,SBD 将不会进行自我屏蔽。例如,您的群集包含 3 个节点:A、B 和 C。由于网络分隔,A 只能看到它自己,而 B 和 C 仍可相互通讯。在此案例中,有两个群集分区,一个因节点占多数(B 和 C)而具有法定票数,而另一个则不具有 (A)。如果发生此情况,当无法访问屏蔽设备的大多数节点时,则节点 A 会立即自我关闭,而节点 B 和 C 将会继续运行。

17.1.2. SBD 设备的数量

SBD 支持使用 1 到 3 个设备:

一个设备

最简单的实施。适用于所有数据位于同一个共享储存的群集。

两个设备

此配置主要用于使用基于主机的镜像但未提供第三个存储设备的环境。SBD 在丢失对某个镜像分支的访问权后将自我终止,以允许群集继续运行。但是,由于 SBD 不具备足够的知识可以检测到存储区的不对称分裂,因此在只有一个镜像分支可用时它不会屏蔽另一个分支。如此一来,就无法在存储阵列中的一个关闭时对第二个故障自动容错。

三个设备

最可靠的配置。它具有从一个设备中断(可能是因为故障或维护)的情况中恢复的能力。在有一个以上设备丢失时 SBD 才会自我终止。当至少有两个设备仍可访问时,可成功传送屏蔽消息。

此配置适用于存储未限制为单个阵列的更为复杂的环境。基于主机的镜像解决方案可以每个镜像分支拥有一个 SBD(不自我镜像),并在 iSCSI 上有一个额外的决定项。

17.1.3. 设置基于储存区的保护

以下步骤是设置基于储存区的保护所必需的:

以下所有过程都必须以 root 身份来执行。开始前应确保满足以下要求:

[Important]要求
  • 环境中必须有所有节点均可到达的共享储存区。

  • 该共享储存段不得使用基于主机的 RAID、cLVM2 或 DRBD*。

  • 但是,建议使用基于储存区的 RAID 和多路径,以提高可靠性。

17.1.3.1. 创建 SBD 分区

建议在设备启动时创建一个 1MB 的分区。如果 SBD 设备驻留在多路径组上,则需要调整 SBD 所用的超时,因为 MPIO 的沿路径检测可能导致一些等待时间。msgwait 超时后,将假定此消息已传递到节点。对于多路径,这应是 MPIO 检测路径故障并切换到下一个路径所需的时间。您可能需要在自己的环境中对此进行测试。如果节点上运行的 SBD 守护程序未足够快速地更新检查包计时器,则节点会自行终止。在特定的环境中测试选择的超时。如果只对一个 SBD 设备使用多路径储存,请密切关注发生的故障转移延迟。

[Note]SBD 分区的设备名称

在下文中,此 SBD 分区由 /dev/SBD 引用。将它替换为实际路径名,例如 /dev/sdc1

[Important]覆盖现有数据

确保要用于 SBD 的设备未保存任何数据。sdb 命令不再进一步请求确认就覆盖设备。

  1. 使用以下命令初始化 SBD 设备:

    root # sbd -d /dev/SBD create

    此操作会将报头写入设备,并创建最多可供 255 个节点以默认时序共享此设备的槽。

    如果要为 SBD 使用一个以上的设备,请多次指定 -d 选项来提供设备,例如:

    root # sbd -d /dev/SBD1 -d /dev/SBD2 -d /dev/SBD3 create
  2. 如果 SBD 设备驻留在多路径组中,请调整 SBD 所用的超时。这可以在初始化 SBD 设备时指定(所有超时的单位都是秒):

    root # /usr/sbin/sbd -d /dev/SBD -4 1801 -1 902 create

    1

    -4 选项用于指定 msgwait 超时。 在以上示例中,超时设置为 180 秒。

    2

    -1 选项用于指定 watchdog 超时。在以上示例中,超时设置为 90 秒。

  3. 使用以下命令检查已写入设备的内容:

    root # sbd -d /dev/SBD dump 
    Header version     : 2
    Number of slots    : 255
    Sector size        : 512
    Timeout (watchdog) : 5
    Timeout (allocate) : 2
    Timeout (loop)     : 1
    Timeout (msgwait)  : 10

正如您看到的,超时数也储存在报头中,以确保所有参与的节点在这方面都一致。

17.1.3.2. 设置软件检查包

在未被其他软件使用的情况下,检查包可以在出现 SBD 故障时保护系统。

[Important]访问检查包计时器

不能有其他任何软件在访问检查包计时器。有些硬件供应商交付的系统管理软件(例如 HP ASR 守护程序)会使用检查包来进行系统重设置。如果 SBD 使用了检查包,请禁用此类软件。

SUSE Linux Enterprise High Availability Extension 中,默认会启用内核中的检查包支持:本产品随附了多个不同的内核模块,可提供特定于硬件的检查包驱动程序。High Availability Extension 使用 SBD 守护程序作为供给检查包的软件组件。如果按第 17.1.3.3 节 “启动 SBD 守护程序”中进行了配置,使用 rcopenais start 将相应节点联机时会自动启动 SBD 守护程序。

在系统引导过程中,一般会自动装载适用于您硬件的检查包驱动程序。softdog 是最通用的驱动程序,但建议使用带有实际硬件集成的驱动程序。例如:

  • 在 HP 硬件上,这是 hpwdt 驱动程序。

  • 对于使用 Intel TCO 的系统,可使用 iTCO_wdt 驱动程序。

有关选项列表,请参见 /usr/src/内核版本/drivers/watchdog。也可以使用以下命令列出与您的内核版本一起安装的驱动程序:

root # rpm -ql kernel-VERSION | grep watchdog

大多数检查包驱动程序名称都包含 wdwdtdog 等字符串,所以可使用以下命令检查当前装载的驱动程序:

root # lsmod | egrep "(wd|dog)" 

要自动装载检查包驱动程序,请创建文件 /etc/modules-load.d/watchdog.conf,并在其中包含含有驱动程序名称的一行。有关详细信息,请参见 modules-load.d 手册页。

如果更改检查包的超时,则必须也要更改另外两个值(msgwaitstonith-timeout)。检查包超时主要取决于您的储存延迟。此值指定大多数设备必须在此时间范围内成功完成其读操作。否则,节点会自我屏蔽。

以下公式大致表达了这三个值之间的关系:

例 17.1. 使用 SBD 作为 STONITH 设备的群集计时

Timeout (msgwait) = (Timeout (watchdog) * 2)
stonith-timeout = Timeout (msgwait) + 20%

例如,如果将超时检查包设置为 120,则需要将 msgwait 设置为 240,将 stonith-timeout 设置为 288。您可以使用 cs_make_sbd_devices 检查输出:

root # cs_make_sbd_devices --dump
==Dumping header on disk /dev/sdb
Header version     : 2.1
UUID               : 619127f4-0e06-434c-84a0-ea82036e144c
Number of slots    : 255
Sector size        : 512
Timeout (watchdog) : 20
Timeout (allocate) : 2
Timeout (loop)     : 1
Timeout (msgwait)  : 40
==Header on disk /dev/sdb is dumped

如果您要设置新群集,sleha-init 命令会考虑上述因素。

如需 SBD 相关计时变量的更多细节,请参见 https://www.suse.com/support/kb/doc.php?id=7011346 上的《SBD Operation Guidelines for HAE Clusters》(HAE 群集的 SBD 操作指南)。

17.1.3.3. 启动 SBD 守护程序

SBD 守护程序是群集堆栈的关键部分。只要群集堆栈正在运行,此守护程序就必须运行,即使群集堆栈的一部分已崩溃时也是如此,这样才能屏蔽节点。

  1. 运行 sleha-init。此脚本可确保正确配置 SBD,并将配置文件 /etc/sysconfig/sbd 添加到需要与 Csync2 同步的文件列表。

    如果要手动配置 SBD,请执行以下步骤:

    要启动 OpenAIS init 脚本和停止 SBD,请编辑 /etc/sysconfig/sbd 文件,搜索下面的行,搜索时将 SBD 替换为您的 SBD 设备:

    SBD_DEVICE="/dev/SBD"

    如果您需要在第一行指定多个设备,请使用分号分隔设备(设备顺序无关紧要):

    SBD_DEVICE="/dev/SBD1; /dev/SBD2; /dev/SBD3"

    如果无法访问 SBD 设备,守护程序将不能启动和禁止 OpenAIS 启动。

    [Note]引导时启动服务

    如果 SBD 设备变得从某个节点无法访问,这会导致此节点进入无限的重引导循环。从技术上来看,此行为是正确的,但根据您的具体管理策略,很可能是令人讨厌的。在这种情况下,最好不要在引导时自动启动 OpenAIS。

  2. 在继续下一步之前,请通过执行 rcopenais restart 确保所有节点上都启动了 SBD。

17.1.3.4. 测试 SBD

  1. 以下命令会将节点槽及其当前消息从 SBD 设备进行转储:

    root # sbd -d /dev/SBD list

    现在,您应该看到此处列出了使用 SBD 启动过的所有群集节点,并且消息槽应显示 clear

  2. 尝试将测试消息发送到节点之一:

    root # sbd -d /dev/SBD message alice test
  3. 此节点将在系统日志文件中确认收到了该讯息:

    Aug 29 14:10:00 alice sbd: [13412]: info: Received command test from bob

    这就确认了 SBD 确实在节点上正常运行,并已准备好接收消息。

17.1.3.5. 配置屏蔽资源

要完成 SBD 设置,请将 SBD 配置为 CIB 中的 STONITH/屏蔽机制。

[Tip]双节点群集的 STONITH 配置

在双节点群集(以及 no-quorum-policy 设置为 ignore 的其他群集)中,经常会发生不合时宜的屏蔽,因为这两个节点会在发生节点分裂时相互屏蔽。要避免这种双重屏蔽,请将 pcmk_delay_max 参数添加到 STONITH 资源的配置中。这样,网卡正常运行的服务器就更有机会得以幸存。

  1. 登录到其中一个节点,然后使用 crm configure 启动交互式 crmsh。

  2. 输入以下内容:

    crm(live)configure# property stonith-enabled="true"
    crm(live)configure# property stonith-timeout="40s" 1
    crm(live)configure# primitive stonith_sbd stonith:external/sbd \
       pcmk_delay_max="30" 2

    不需要克隆资源。由于节点槽是自动分配的,因此无需定义手动主机列表。

    1

    stonith-timeout 设置哪个值取决于 msgwait 超时。msgwait 超时应大于底层 IO 系统的最大允许超时。例如,普通 SCSI 磁盘的最大允许超时为 30 秒。如果您将 msgwait 超时设置为 30 秒,则将 stonith-timeout 设置为 40 秒比较合适。

    2

    pcmk_delay_max 参数将为屏蔽设备上的 STONITH 操作启用随机延迟。该参数的值指定在执行 STONITH 设备的启动操作之前需要等待的最长时间。由于检测环故障、成为 DC 和启动 STONITH 资源需要花费一定的时间,因此,请不要将此值设得太小(否则,先前的 DC 总是会先启动屏蔽操作)。

  3. 提交更改:

    crm(live)# configure commit
  4. 禁用以前可能配置过的任何其他屏蔽设备,因为现在用于此功能的是 SBD 机制。

资源启动后,群集的共享储存屏蔽配置即告成功,群集将在需要屏蔽节点时使用此方法。

17.2. 确保储存区的排它激活

此部分将介绍另一种低级别机制:sfex,可将对共享储存区的访问以排它的方式锁定于一个节点。请注意,sfex 不会替代 STONITH。由于 sfex 需要共享储存区,因此建议将上述 external/sbd 屏蔽机制用于储存区的另一个分区。

根据设计意图,sfex 不能用于需要执行并发操作的工作负载(如 OCFS2),而是用作传统故障转移式工作负载的保护层。这实际上与 SCSI-2 保留相类似,但更具一般性。

17.2.1. 概述

在共享储存环境中,储存区的一个小分区专门设置为储存一个或多个锁。

在获取受保护资源之前,节点必须先获取保护锁。此顺序由 Pacemaker 强制实施,sfex 组件可确保即使 Pacemaker 遇到了节点分裂的情况,也不会多次授予锁。

这些锁必须定期刷新,这样某个节点的终止才不会永久性地阻止此锁,其他节点仍可继续操作。

17.2.2. 设置

以下内容可帮助您了解如何创建用于 sfex 的共享分区以及如何为 CIB 中的 sfex 锁配置资源。单个 sfex 分区可保存任意数量的锁,默认值为 1,需要为每个锁分配 1 KB 的储存空间。

[Important]要求
  • sfex 的共享分区应和要保护的数据位于同一逻辑单元上。

  • 共享的 sfex 分区不得使用基于主机的 RAID 或 DRBD。

  • 可以使用 cLVM2 逻辑卷。

过程 17.1. 创建 sfex 分区

  1. 创建用于 sfex 的共享分区。注意此分区的名称,并用它替代下面的 /dev/sfex

  2. 使用以下命令创建 sfex 元数据:

    root # sfex_init -n 1 /dev/sfex
  3. 校验元数据已正确创建:

    root # sfex_stat -i 1 /dev/sfex ; echo $?

    此操作应返回 2,因为当前未保存锁。

过程 17.2. 为 sfex 锁配置资源

  1. 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"
  2. 要通过 sfex 锁保护资源,请在保护对象和 sfex 资源之间创建强制顺序和放置约束。如果受保护资源的 ID 是 filesystem1

    crm(live)configure# order order-sfex-1 inf: sfex_1 filesystem1
    crm(live)configure# colocation colo-sfex-1 inf: filesystem1 sfex_1
  3. 如果使用组语法,请将 sfex 资源添加为组内的第一个资源:

    crm(live)configure# group LAMP sfex_1 filesystem1 apache ipaddr

17.3. 更多信息

请参见 http://www.linux-ha.org/wiki/SBD_Fencingman sbd

第 18 章Samba 群集

摘要

群集 Samba 服务器提供异构网络的高可用性解决方案。本章说明了一些背景信息以及如何设置群集 Samba 服务器。

18.1. 概念概述

Samba 使用 Trivial Database (TDB) 已经许多年了。它允许多个应用程序同时写入。为确保所有写操作都成功执行而不会彼此冲突,TDB 使用内部锁定机制。

Cluster Trivial Database (CTDB) 是现有的 TDB 的小扩展。项目对 CTDB 的描述是:Samba 和其他项目用于储存临时数据的 TDB 数据库的群集实现

每个群集节点都运行本地 CTDB 守护程序。Samba 与其本地 CTDB 守护程序通讯,而非直接写入其 TDB。守护程序通过网络交换元数据,但实际的读写操作是在快速储存的本地副本上进行的。CTDB 的概念如图 18.1 “CTDB 群集的结构”中所示。

[Note]CTDB 仅用于 Samba

CTDB 资源代理的当前实现将 CTDB 配置为只管理 Samba。任何其他功能,包括 IP 故障转移,都应使用 Pacemaker 进行配置。

CTDB 仅支持完全同类的群集。例如,群集中的所有节点都必须有相同的体系结构,不能混合 i586 与 x86_64。

图 18.1. CTDB 群集的结构

CTDB 群集的结构

群集 Samba 服务器必须共享某些数据:

  • 将 Unix 用户和组 ID 与 Windows 用户和组关联的映射表。

  • 用户数据库必须在所有节点间同步。

  • Windows 域中的成员服务器的连接信息必须在所有节点上都可用。

  • 元数据(如活动 SMB 会话、共享连接和各种锁)必须在所有节点上都可用。

目标是:具有 N+1 个节点的群集 Samba 服务器比只有 N 个节点的快。一个节点不会比非群集 Samba 服务器慢。

18.2. 基本配置

[Note]已更改的配置文件

CTDB 资源代理会自动更改 /etc/sysconfig/ctdb/etc/samba/smb.conf。使用 crm ra info CTDB 列出可为 CTDB 资源指定的所有参数。

要设置群集 Samba 服务器,请按如下操作:

过程 18.1. 设置基本的群集 Samba 服务器

  1. 准备群集:

    1. 按照本指南的第 II 部分 “配置和管理”中所述配置群集(OpenAIS、Pacemaker、OCFS2)。

    2. 配置共享文件系统(如 OCFS2),并将其装入例如 /shared 的位置。

    3. 要打开 POSIX ACL,请启用它:

      • 对新的 OCFS2 文件系统,使用:

        root # mkfs.ocfs2 --fs-features=xattr ...
      • 对现有 OCFS2 文件系统,使用:

        root # tunefs.ocfs2 --fs-feature=xattrDEVICE

        确保在文件系统资源中指定了 acl 选项。按如下方式使用 crm 外壳:

        crm(live)configure#  primary ocfs2-3 ocf:heartbeat:Filesystem options="acl" ...
    4. 确保服务 ctdbsmbnmbwinbind 已禁用:

      root # chkconfig ctdb off
      chkconfig smb off
      chkconfig nmb off
      chkconfig winbind off
  2. 在共享文件系统上为 CTDB 锁定创建一个目录:

    root # mkdir -p /shared/samba/
  3. /etc/ctdb/nodes 中插入包含群集中每个节点的所有私用 IP 地址的所有节点:

    192.168.1.10
    192.168.1.11
  4. 使用 csync2 将配置文件复制到您的所有节点:

    root # csync2 -xv

    有关详细信息,请参见 过程 3.10, “使用 Csync2 同步配置文件”

  5. 将 CTDB 资源添加到群集:

    crm configure
    crm(live)configure# primitive ctdb ocf:heartbeat:CTDB params \
        ctdb_manages_winbind="false" \ 
        ctdb_manages_samba="true" \
        ctdb_recovery_lock="/shared/samba/ctdb.lock" \
          op monitor interval="10" timeout="20" \
          op start interval="0" timeout="90" \
          op stop interval="0" timeout="100"
    crm(live)configure# clone ctdb-clone ctdb \
        meta globally-unique="false" interleave="true"
    crm(live)configure# colocation ctdb-with-fs inf: ctdb-clone fs-clone
    crm(live)configure# order start-ctdb-after-fs inf: fs-clone ctdb-clone
    crm(live)configure# commit
  6. 添加群集 IP 地址:

    crm(live)configure# primitive ip ocf:heartbeat:IPaddr2 params ip=192.168.2.222 \
      clusterip_hash="sourceip-sourceport" op monitor interval=60s
    crm(live)configure# clone ip-clone ip meta globally-unique="true"
    crm(live)configure# colocation ip-with-ctdb inf: ip-clone ctdb-clone
    crm(live)configure# order start-ip-after-ctdb inf: ctdb-clone ip-clone
    crm(live)configure# commit
  7. 检查结果:

    root # crm status
    Clone Set: dlm-clone
         Started: [ hex-14 hex-13 ]
     Clone Set: o2cb-clone
         Started: [ hex-14 hex-13 ]
     Clone Set: c-ocfs2-3
         Started: [ hex-14 hex-13 ]
     Clone Set: ctdb-clone
         Started: [ hex-14 hex-13 ]
     Clone Set: ip-clone (unique)
         ip:0       (ocf::heartbeat:IPaddr2):       Started hex-13
         ip:1       (ocf::heartbeat:IPaddr2):       Started hex-14
  8. 从客户端计算机进行测试。在 Linux 客户端上,添加一个用于访问 Samba 的用户:

    root # smbpasswd -a USERNAME
  9. 测试您是否可以连接到该新用户的主目录:

    root # smbclient -u USERNAME//192.168.2.222/USERNAME

18.3. 加入 Active Directory 域

Active Directory (AD) 是 Windows Server 系统的一项目录服务。

下列说明概述了如何将 CTDB 群集加入到 Active Directory 域:

  1. 有关如何设置 Active Directory 域的说明,请参考 Windows Server 文档。在此示例中,使用以下参数:

    AD 和 DNS 服务器

    win2k3.2k3test.example.com

    AD 域

    2k3test.example.com

    群集 AD 成员 NETBIOS 名称

    CTDB-SERVER
  2. 过程 18.2, “配置 CTDB”

  3. 过程 18.3, “加入 Active Directory”

下一步是配置 CTDB:

过程 18.2. 配置 CTDB

  1. 确保您已按第 18.2 节 “基本配置”中所示配置群集。

  2. 停止一个节点上的 CTDB 资源:

    root #  crm resource stop ctdb-clone
  3. 打开 /etc/samba/smb.conf 配置文件、添加 NetBIOS 名称,然后关闭该文件:

    [global
        netbios name = CTDB-SERVER

    安全性、工作组等其他设置通过 YaST 向导添加。

  4. 更新所有节点上的 /etc/samba.conf 文件:

    root # csync2 -xv
  5. 重启动 CTDB 资源:

    root # crm resource start ctdb-clone

最后,将群集加入 Active Directory 服务器:

过程 18.3. 加入 Active Directory

  1. 请确保 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 的配置 Csync2 模块,请参见第 3.5.4 节 “将配置传送到所有节点”

  2. 按照过程 18.1, “设置基本的群集 Samba 服务器”中所述创建 CTDB 资源。

  3. 运行 YaST 并从网络服务项中打开 Windows 域成员资格模块。

  4. 输入域或工作组设置然后单击确定完成设置。

18.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。它会对群集文件系统执行一致性和性能之类的特定测试(请参见 http://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 表。

有关更多信息,请参见 http://wiki.wireshark.org/Gratuitous_ARP

要测试群集文件系统的某些方面,请如下继续操作:

过程 18.4. 测试群集文件系统的一致性和性能

  1. 在一个节点上启动命令 ping_pong,将占位符 N 替换为节点数 + 1。文件 ABSPATH/data.txt 在共享存储区中提供,因此在所有节点(ABSPATH 表示绝对路径)上都可以访问到:

    ping_pong ABSPATH/data.txt N

    应该会得到很高的锁定率,因为只运行一个节点。如果程序不打印锁定率,请替换群集文件系统。

  2. 使用相同的参数在另一个节点上启动 ping_pong 的第二个副本。

    应该会看到锁定率急剧下降。如果以下任意情况适用于群集文件系统,请替换它:

    • ping_pong 不打印每秒锁定率,

    • 两个实例中的锁定率并非几乎相等,

    • 启动第二个实例后锁定率未下降。

  3. 启动 ping_pong 的第三个副本。添加另一个节点,注意锁定率的变化。

  4. 逐个终止 ping_pong 命令。 应该观察到锁定率上升,直到回到单一节点的情况。如果没有看到预期行为,请参见第 14 章 OCFS2 中的详细信息。

第 19 章使用 Rear 实现灾难恢复

摘要

Relax-and-Recover(以前称为 ReaR,本章中缩写为 Rear)是由系统管理员使用的灾难恢复框架。它是一个 Bash 脚本集合,您需要根据要在发生灾难时加以保护的特定生产环境调整这些脚本。

不存在能够现成地解决问题的灾难恢复解决方案。因此,在发生任何灾难之前做好预防措施至关重要。

19.1. 概念概述

以下几节介绍了一般性的灾难恢复概念,以及使用 Rear 成功实现恢复所需执行的基本步骤。另外,还提供了一些有关 Rear 要求、当前产品附带的 Rear 版本、要注意的一些限制、各种方案和备份工具的指导。

19.1.1. 创建灾难恢复计划

在最坏的情况发生之前采取措施:分析 IT 基础结构是否存在任何重大风险,评估您的预算,并创建灾难恢复计划。如果您尚未创建灾难恢复计划,请先了解有关以下每个步骤的一些信息:

  • 风险分析.  对基础设施进行可靠的风险分析。列出所有可能的威胁并评估它们的严重性。确定这些威胁的相似程度并划分优先级。建议使用简单的分类:可能性和影响。

  • 预算计划.  分析结果是一个概述,指出哪些风险可以忍受,哪些风险对业务非常关键。请自问一下,怎样才能最大限度地降低风险,以及降低风险所需的费用。根据公司的规模,在灾难恢复方面的花费占总体 IT 预算的 2% 到 15%。

  • 灾难恢复计划开发.  制作核对清单、测试过程、建立并指派优先级以及列出 IT 基础设施库存。定义当基础设施中的一些服务失败时,如何处理问题。

  • 测试.  定义详细的计划后,测试该计划。每年至少测试一次。使用与主要 IT 基础设施相同的测试硬件。

19.1.2. 灾难恢复意味着什么?

如果生产环境中的某个系统已毁坏(可能出于任何原因 - 例如,硬件损坏、配置不当或软件问题),您需要重创建该系统。可以在相同的硬件或者兼容的替代硬件上重创建。重创建系统并不只是意味着从备份中恢复文件,还包括准备系统的储存(与文件系统、分区或安装点相关),以及重新安装引导加载程序。

19.1.3. 灾难恢复如何与 Rear 配合工作?

在系统正常运行期间,创建文件的备份并在恢复媒体上创建恢复系统。该恢复系统包含一个恢复安装程序。

如果系统已损坏,您可以更换受损的硬件(如果需要),从恢复媒体引导恢复系统,然后起动恢复安装程序。恢复安装程序会重创建系统:首先,它会准备储存(分区、文件系统、安装点),然后从备份中恢复文件。最后,它会重新安装引导加载程序。

19.1.4. Rear 要求

要使用 Rear,至少需要两个相同的系统:运行生产环境的计算机,以及相同的测试计算机。举例来说,这里所说的相同是指您可以将一块网卡替换为使用相同内核驱动程序的另一块网卡。

[Warning]需要相同的驱动程序

如果某个硬件组件使用的驱动程序不同于生产环境中所用的驱动程序,则 Rear 不会将该组件视为相同。

19.1.5. Rear 版本

SUSE Linux Enterprise High Availability Extension 11 SP4 附带了两个 Rear 版本:

  • Rear 版本 1.10.0(包含在 RPM 包 rear 中)。有关此 Rear 版本的文档,请参见《SUSE Linux Enterprise High Availability Extension 11 SP3 高可用性指南》。网址:http://www.suse.com/documentation/

  • Rear 版本 1.16(包含在 RPM 包 rear116 中)。本章将会介绍此版本。

[Important]

如果您通过 Rear 版本 1.10.0 实现的灾难恢复过程已经过测试并且功能完好,则需要升级该版本。在这种情况下,请保留该 Rear 包,并且不要更改您的灾难恢复方法!

但是,如果 Rear 版本 1.10.0 不能满足您的特定需求(另请参见第 19.1.6 节),您可以手动升级到 Rear 版本 1.16。rearrear116 包有意被设置为相互冲突,以防安装的版本意外被另一个版本替换。

每次升级 Rear 版本时,都必须仔细重新验证您的特定灾难恢复过程是否仍可发挥作用。

19.1.6. 针对 Btrfs 的限制

如果您使用 Btrfs,请注意以下限制。

您的系统包括子卷,但不包括快照子卷

需要 Rear 版本 1.16。此版本支持重创建正常的Btrfs 子卷结构(不包括快照子卷)。

您的系统包括快照子卷
[Warning]

无法照常使用基于文件的备份软件备份和恢复 Btrfs 快照子卷。

尽管 Btrfs 文件系统上的子卷中的最新快照几乎不占用任何磁盘空间(因为 Btrfs 具有写入时复制功能),但在使用基于文件的备份软件时,这些文件将作为完整文件进行备份。在备份中,这些文件的大小是其原始文件大小的两倍。因此,也就无法将快照恢复到它们以前在原始系统上的状态。

19.1.7. 方案和备份工具

Rear 能够创建可从本地媒体(例如硬盘、闪存盘、DVD/CD-R)或通过 PXE 引导的灾难恢复系统(包括一个特定的恢复安装程序)。可以根据例 19.1所述,将备份数据储存在网络文件系统中,如 NFS。

Rear 不会替换文件备份,而是对它进行补充。默认情况下,Rear 支持常规 tar 命令和若干第三方备份工具(例如 Tivoli Storage Manager、QNetix Galaxy、Symantec NetBackup、EMC NetWorker 或 HP DataProtector)。有关将 Rear 与用作备份工具的 EMC NetWorker 配合使用的示例配置,请参见例 19.2

19.1.8. 基本步骤

要在发生灾难时使用 Rear 成功进行恢复,需要执行以下基本步骤:

设置 Rear 和您的备份解决方案

这会涉及到一些任务,例如,编辑 Rear 配置文件、调整 Bash 脚本,以及配置您要使用的备份解决方案。

创建恢复安装系统

在要保护的系统正常运行期间,使用 rear mkbackup 命令创建文件备份,并生成包含特定于系统的 Rear 恢复安装程序的恢复系统。

测试恢复过程

每当使用 Rear 创建灾难恢复媒体后,都要全面测试灾难恢复过程。所用测试计算机上的硬件必须与生产环境中的硬件相同。有关细节,请参见第 19.1.4 节 “Rear 要求”

从灾难中恢复

灾难发生后,更换任何受损的硬件(如果需要)。然后,引导 Rear 恢复系统,并使用 rear recover 命令启动恢复安装程序。

19.2. 设置 Rear 和您的备份解决方案

要设置 Rear,您至少需要编辑 Rear 配置文件 /etc/rear/local.conf,此外可以根据需要编辑属于 Rear 框架一部分的 Bash 脚本。

具体而言,您需要定义 Rear 应该执行的以下任务:

  • 如何备份文件以及如何创建和储存灾难恢复系统.  这需要在 /etc/rear/local.conf 中配置。

  • 需要重创建的确切对象(分区、文件系统、安装点,等等). 这可以在 /etc/rear/local.conf 中定义(例如,要排除哪些对象)。要重创建非标准系统,您可能需要增强 Bash 脚本。

  • 恢复过程的工作方式. 要更改 Rear 生成恢复安装程序的方式,或者要改编 Rear 恢复安装程序执行的操作,您必须编辑 Bash 脚本。

要配置 Rear,请将您的选项添加到 /etc/rear/local.conf 配置文件中(以前的配置文件 /etc/rear/sites.conf 已从包中去除。但是,如果您有来自以前设置环境中的此文件,Rear 会继续使用该文件)。

/usr/share/rear/conf/default.conf 中提供了默认的 Rear 配置供您参考。同一目录中还提供了其他示例配置 (*example.conf)。请在 Rear 手册页中了解详细信息。

更改 Rear 配置文件后,运行以下命令并检查该命令的输出:

rear dump

例 19.1. 使用 NFS 服务器储存文件备份

Rear 可在多种情境下使用。以下示例使用 NFS 服务器作为文件备份的储存。


  1. 按照《SUSE Linux Enterprise Server 11 SP4 管理指南》中的“通过 NFS 共享文件系统”一章所述,使用 YaST 设置 NFS 服务器。网址:http://www.suse.com/documentation/

  2. /etc/exports 文件中定义 NFS 服务器的配置。确保 NFS 服务器上的目录(要储存备份数据的位置)具有适当的装入选项。例如:

    /srv/nfs *(fsid=0,crossmnt,rw,no_root_squash,sync,no_subtree_check)

    如果需要,请将 /srv/nfs 替换为 NFS 服务器上备份数据的路径,并调整装入选项。您可能需要使用 no_root_squash 来访问备份数据,因为 rear mkbackup 命令是以 root 身份运行的。

  3. 调整各个 BACKUP 参数(在配置文件 /etc/rear/local.conf 中),以便 Rear 将文件备份储存在相应的 NFS 服务器上。已安装系统中的 /usr/share/rear/conf/SLE11-ext3-example.conf 下提供了示例。

例 19.2. 使用 EMC NetWorker 等第三方备份工具

要使用第三方备份工具代替 tar,您需要在 Rear 配置文件中进行相应的设置。

以下是 EMC NetWorker 的示例配置。将此配置片段添加到 /etc/rear/local.conf 中,并根据您的设置进行调整:

BACKUP=NSR
    OUTPUT=ISO
    BACKUP_URL=nfs://host.example.com/path/to/your/rear/backup
    OUTPUT_URL=nfs://host.example.com/path/to/your/rear/backup
    NSRSERVER=backupserver.example.com
    RETENTION_TIME="Month"

19.3. 创建恢复安装系统

根据第 19.2 节所述配置 Rear 后,使用以下命令创建恢复安装系统(包括 Rear 恢复安装程序)和文件备份:

rear -d  -D mkbackup

该命令将执行以下步骤:

  1. 分析目标系统并收集信息,尤其是有关磁盘布局(分区、文件系统、安装点)和引导加载程序的信息。

  2. 使用第一步收集的信息创建一个可引导恢复系统。生成的 Rear 恢复安装程序特定于在发生灾难时要保护的系统。使用该安装程序只能重创建这个特定的系统。

  3. 调用配置的备份工具来备份系统和用户文件。

19.4. 测试恢复过程

创建恢复系统之后,在具有相同硬件的测试计算机上测试恢复过程。另请参见第 19.1.4 节 “Rear 要求”。确保测试计算机已正确设置,并可替代主计算机。

[Warning]在相同硬件上执行全面测试

必须在计算机上全面测试灾难恢复过程。请定期测试恢复过程,确保一切按预期运行。

过程 19.1. 在测试计算机上执行灾难恢复

  1. 将您在第 19.3 节中创建的恢复系统刻录到 DVD 或 CD 中,以创建恢复媒体。或者,您可以通过 PXE 使用网络引导。

  2. 从恢复媒体引导测试计算机。

  3. 从菜单中选择恢复

  4. root 用户身份登录(无需密码)。

  5. 输入以下命令启动恢复安装程序:

    rear -d -D recover

    有关在此过程中 Rear 所执行的步骤的细节,请参见恢复过程

  6. 恢复过程完成后,检查是否已成功地重创建系统,并且该系统可在生产环境中替代原始系统运作。

19.5. 从灾难中恢复

如果灾难已发生,请根据需要更换任何受损的硬件。然后按照过程 19.1所述,使用已修复的计算机(或使用已经过测试可替代原始系统运作的相同计算机)继续操作。

rear recover 命令将执行以下步骤:

恢复过程

  1. 恢复磁盘布局(分区、文件系统和安装点)。

  2. 从备份中恢复系统和用户文件。

  3. 恢复引导加载程序。

19.6. 更多信息

部分 IV. 附录

第 20 章查错

摘要

用户可能会遇到奇怪而不易理解的问题,特别是刚开始尝试使用 High Availability 时。不过,有一些实用程序可用来仔细地观察 High Availability 的内部进程。本章将推荐各种解决方案。

20.1. 安装及初始步骤

对安装包或使群集联机的过程中遇到的问题查错。

是否安装了 HA 包?

配置和管理群集所需的包位于 High Availability Extension 提供的 High Availability 安装模式中。

根据中所述,检查是否将 High Availability Extension 作为 SUSE Linux Enterprise Server 11 SP4 的附件安装在每个群集节点上,以及每台计算机上是否安装了 High Availability第 3.3 节 “作为外接式附件安装” 模式。

所有群集节点的初始配置是否相同?

第 3.5 节 “手动群集设置 (YaST)”中所述,为了相互通讯,属于同一个群集的所有节点需要使用相同的 bindnetaddrmcastaddrmcastport

检查 /etc/corosync/corosync.conf 中配置的通讯通道和选项是否对所有群集节点都相同。

如果使用加密通讯,请检查 /etc/corosync/authkey 文件是否在所有群集节点上都可用。

nodeid 以外的所有 corosync.conf 设置都必须相同;所有节点上的 authkey 文件都必须相同。

防火墙是否允许通过 mcastport 进行通讯?

如果用于群集节点之间通讯的 mcastport 由防火墙阻止,这些节点将无法相互可见。根据第 3.5 节 “手动群集设置 (YaST)”第 3.4 节 “自动群集设置 (sleha-bootstrap)”中所述使用 YaST 或引导脚本配置初始设置时,防火墙设置通常会自动调整。

要确保 mcastport 不被防火墙阻止,请检查每个节点上的 /etc/sysconfig/SuSEfirewall2 中的设置。或者,在每个群集节点上启动 YaST 防火墙模块。在单击允许的服务+高级后,将 mcastport 添加到允许的 UDP 端口列表中并确认更改。

是否在每个群集节点上启动了 OpenAIS?

使用 /etc/init.d/openais status 检查每个群集节点上的 OpenAIS 状态。如果 OpenAIS 未运行,执行 /etc/init.d/openais start 命令来启动它。

20.2. 日志记录

我启用了监视,但为什么日志文件中没有监视操作的任何跟踪信息?

除非发生错误,否则 lrmd 守护程序不会记录重现的监视操作。记录所有重现的操作会产生太多噪音。因此,只会每小时记录一次重现的监视操作。

我只收到了一条失败讯息。有可能收到更多信息吗?

在命令中添加 --verbose 参数。如果多次执行该操作,调试输出会变得相当详细。请参见 /var/log/messages 了解有用提示。

如何获取所有节点和资源的概述?

使用 crm_mon 命令。下面显示了资源操作的历史记录(选项 -o)和处于不活动状态的资源 (-r):

root # crm_mon -o -r

状态改变时,显示内容会刷新(要取消,请按 Ctrl+C)。示例可能显示如下:

例 20.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 barett-2
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:

http://www.clusterlabs.org/doc/ 上《Pacemaker Explained》(Pacemaker 说明)PDF 文件中的“How are OCF Return Codes Interpreted?”(如何解释 OCF 返回代码?)部分中介绍了三种不同的恢复类型。

如何创建包含所有群集节点分析的报告?

在 crm 外壳中,使用 crm_reporthb_report 创建报告。这些工具用于编译:

  • 群集范围内的日志文件,

  • 包状态,

  • DLM/OCFS2 状态,

  • 系统信息,

  • CIB 历史记录,

  • 内核转储报告的分析(如果安装了 debuginfo 包)。

通常需要结合以下命令运行 hb_report

root # crm_report -f 0:00 -n jupiter -n venus

该命令将提取主机 jupiter 和 venus 上从凌晨 0 点开始的所有信息,并在当前目录中创建名为 crm_report-日期.tar.bz2*.tar.bz2 存档,例如 crm_report-Wed-03-Mar-2012。如果您只对特定时间段感兴趣,请使用 -t 选项添加结束时间。

[Warning]删除敏感信息

crm_report 工具会尝试去除 CIB 和 peinput 文件中的所有敏感信息,但是,它并不是万能的。如果您有许多敏感信息,请提供更多模式。日志文件以及 crm_monccm_toolcrm_verify 输出不会被清理。

以任何方式共享数据之前,请检查存档并删除不想泄露的所有信息。

使用其他选项自定义命令执行。例如,如果有 OpenAIS 群集,则一定想要添加选项 -A。如果还有一个用户(除 roothacluster 以外)对该群集拥有权限,可使用 -u 选项并指定此用户。如果您有一个非标准 SSH 端口,请使用 -X 选项添加该端口(例如,如果端口为 3479,则使用 -X "-p 3479")。要了解更多选项,请参见 crm_report 的手册页。

crm_report 分析完所有相关日志文件并创建目录(或存档)后,请检查日志文件中有无大写的 ERROR 字符串。位于报告顶层目录中的最重要的文件有:

analysis.txt

比较在所有节点上都应保持一致的文件。

crm_mon.txt

包含 crm_mon 命令的输出。

corosync.txt

包含 Corosync 配置文件的副本。

description.txt

包含您节点上的所有群集包版本。另有节点特定的 sysinfo.txt 文件。它会链接到顶层目录。

节点特定的文件将存储在以节点名称命名的子目录中。

20.3. 资源

如何清理我的资源?

使用以下命令:

root # crm resource list
crm resource cleanup rscid [node]

如果遗漏此节点,则资源将在所有节点上清除。更多信息可以在第 7.4.2 节 “清理资源”中找到。

如何列出当前已知的资源?

使用命令 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 可获取必需参数和可选参数的列表,例如:

root # crm ra info ocf:heartbeat:IPaddr

运行 ocf-tester 之前,请确保资源不受群集管理。

资源为什么不故障转移,为什么没有错误?

如果群集为双节点群集,则终止一个节点,另一个节点仍不能达到法定票数。除非将 no-quorum-policy 属性设置为 ignore,否则不会发生任何操作。对于双节点群集,您需要:

property no-quorum-policy="ignore"

另一个可能性是终止的节点被视为未清理。这样就必须屏蔽它。如果 STONITH 资源不可运行或不存在,则剩余的节点将等待屏蔽发生。屏蔽超时值通常比较大,因此可能需要很长一段时间才能看到问题的明显迹象(如有)。

另一种可能的解释是仅仅是不允许资源在此节点上运行。这可能是由于未清理过去发生的失败所致。或者可能是先前的管理操作(即,添加了分数为负值的位置约束)所致。例如,此类位置约束是通过 crm resource migrate 命令插入的。

我为什么从不知道资源将在何处运行?

如果资源没有位置约束,则其放置取决于(几乎)随机节点选择。建议您始终明确表示资源的首选节点。这并不意味着您需要指定所有资源的位置自选设置。一个自选设置就能满足一组相关(共置)资源的需要。节点自选设置类似如下:

location rsc-prefers-alice rsc 100: alice

20.4. STONITH 和屏蔽

我的 STONITH 资源为什么不启动?

启动(或启用)操作包括检查设备的状态。如果设备未就绪,STONITH 资源将无法启动。

同时系统将要求 STONITH 插件生成主机列表。如果此列表为空,则运行无法关闭任何节点的 STONITH 资源将毫无意义。运行 STONITH 的主机的名称是从列表中滤除的,因为节点不能自我关闭。

如果要使用单主机管理设备(如无人值守设备),请确保允许 STONITH 资源在应当屏蔽的节点上运行。使用无限负位置节点自选设置(约束)。群集会将 STONITH 资源移到其他可以启动的位置,但不会未通知您就移动。

为什么尽管我有 STONITH 资源,却没有发生屏蔽?

每个 STONITH 资源都必须提供主机列表。此列表可能在 STONITH 资源配置过程中手动插入,也可能从设备自身获取,例如,从输出名称获取。这取决于 STONITH 插件的性质。stonithd 使用此列表来查找可以屏蔽目标节点的 STONITH 资源。只有出现在该列表中的节点 STONITH 资源才能关闭(屏蔽)。

如果 stonithd 在运行中的 STONITH 资源提供的任何主机列表中找不到该节点,它将询问其他节点上的 stonithd 实例。如果目标节点未显示在其他 stonithd 实例的主机列表中,则屏蔽请求将以超时在源节点上结束。

我的 STONITH 资源为什么会偶尔失败?

如果广播通讯量过大,电源管理设备可能会停止运行。隔开监视操作。如果只是偶尔(最好是从不)需要屏蔽,则每隔几小时检查一次设备状态就已足够。

另外,其中的一些设备可能会拒绝同时与多方通讯。如果在群集尝试测试状态时将终端或浏览器会话保持打开状态,则这可能会产生问题。

20.5. 杂项

如何在所有群集节点上运行命令?

使用 pssh 命令可完成此任务。如果需要,可安装 pssh。创建一个文件(例如 hosts.txt),将要访问的所有 IP 地址或主机名都收集在其中。确保可以使用 ssh 登录到 hosts.txt 文件中列出的每台主机。如果一切准备就绪,请执行 pssh 并使用 hosts.txt 文件(选项 -h)和交互模式(选项 -i),如此例所示:

pssh -i -h hosts.txt "ls -l /corosync/*.conf"
[1] 08:28:32 [SUCCESS] root@venus.example.com
-rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf
[2] 08:28:32 [SUCCESS] root@192.168.2.102
-rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf
我的群集状态是什么?

要检查群集的当前状态,请使用程序 crm_moncrm status 之一。这将显示当前的 DC 以及当前节点已知的所有节点和资源。

为什么群集的多个节点看不到彼此?

这可能有几个原因:

  • 先查看配置文件 /etc/corosync/corosync.conf。检查群集中每个节点的多路广播或单路广播地址是否相同(使用关键字 mcastaddrinterface 部分中查找)。

  • 检查您的防火墙设置。

  • 检查您的交换机是否支持多路广播或单路广播地址。

  • 检查节点间的连接是否已断开。这通常是错误配置防火墙的结果。这也可能是节点分裂情况(其中群集已分区)的原因。

为什么不能装入 OCFS2 设备?

检查 /var/log/messages 中的以下行:

Jan 12 09:58:55 alice lrmd: [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-defaultocfs2-kmp-paeocfs2-kmp-xen

错误:RNG 纲要不支持标记

请参见升级 CIB 语法版本

20.6. 更多信息

有关 Linux 上的高可用性的更多信息(包括配置群集资源以及管理和自定义高可用性群集),请参见 http://clusterlabs.org/wiki/Documentation

附录 A. 命名约定

本指南针对群集节点和名称、群集资源与约束使用以下命名约定。

群集节点

群集节点使用人名:

alice、bob、charly、doro 和 eris

群集站点名称

群集站点按城市命名:

amsterdam、berlin、canberra、dublin、fukuoka、gizeh、hanoi 和 istanbul

群集资源

原始资源

无前缀

前缀 g-

克隆资源

前缀 cl-

多状态资源

前缀 ms-

限制

顺序约束

前缀 o-

位置约束

前缀 loc-

共置约束

前缀 col-

附录 B. 设置简单测试资源的示例

本章提供了配置简单资源:IP 地址的基本示例。它演示了两种方法来完成资源配置:使用 Pacemaker GUI 或 crm 命令行工具。

对于以下示例,我们假定您已按第 3 章 安装和基本设置中所述设置群集,且群集包括至少两个节点。有关如何使用 Pacemaker GUI 和 crm 外壳配置群集资源的简介和概述,请参见以下章节:

B.1. 使用 GUI 配置资源

创建样本群集资源并将它迁移到其他服务器可帮助您进行测试,以确保群集运行正确。要配置和迁移的简单资源就是 IP 地址。

过程 B.1. 创建 IP 地址群集资源

  1. 第 6.1.1 节 “登录到群集”中所述,启动 Pacemaker GUI 并登录到群集。

  2. 在左窗格中,切换到 Resources(资源)视图;在右窗格中,选择要修改的组并单击 Edit(编辑)。下一个窗口将显示为该资源定义的基本组参数以及元属性和原始资源。

  3. 单击 Primitives(原始)选项卡并单击 Add(添加)。

  4. 在下一个对话框中,若要将 IP 地址添加为组的子资源,请设置以下参数:

    1. 输入唯一的 ID,例如 myIP

    2. Class(类)列表中,选择 ocf 作为资源代理类。

    3. 在 OCF 资源代理的 Provider(提供程序)中,选择 heartbeat

    4. Type(类型)列表中,选择 IPaddr 作为资源代理。

    5. 单击 Forward(前进)。

    6. 实例属性选项卡中,选择 IP 项并单击编辑(或双击 IP 项)。

    7. 输入所需的 IP 地址作为(例如,10.10.0.1)并单击确定

    8. 添加新的实例属性,并将名称指定为 nic,将指定为 eth0,然后单击确定

      名称和值取决于您的硬件配置和安装 High Availability Extension 软件期间选择的媒体配置。

  5. 根据意愿设置所有参数后,请单击确定完成此资源的配置。配置对话框关闭,主窗口显示已修改的资源。

要使用 Pacemaker GUI 启动资源,请在左侧窗格中选择管理。在右侧窗格中,右键单击资源并选择启动(或从工具栏启动资源)。

要将 IP 地址资源迁移到其他节点 (saturn),请按如下操作:

过程 B.2. 将资源迁移到其他节点

  1. 切换到左侧窗格中的管理视图,然后右键单击右侧窗格中的 IP 地址资源,并选择迁移资源

  2. 在新窗口中,从目标节点下拉列表中选择 saturn 以将选定的资源移到节点 saturn 上。

  3. 如果只想临时迁移资源,请激活持续时间并输入时间范围,在该时间段内资源应迁移到新的节点。

  4. 单击确定确认迁移。

B.2. 手动配置资源

计算机提供的任何类型的服务都称为资源。当它们可能由 RA(资源代理)(为 LSB 脚本或 OCF 脚本)控制时,High Availability 即会知晓这些资源。所有资源都可以使用 crm 命令进行配置,或在 CIB(群集信息库)的 resources 部分配置为 XML。

要将 IP 地址 10.10.0.1 作为资源添加到当前配置中,请使用 crm 命令:

过程 B.3. 创建 IP 地址群集资源

  1. 打开外壳并转换为 root 用户。

  2. 输入 crm configure 打开内壳。

  3. 创建 IP 地址资源:

    crm(live)configure# resourceprimitive myIP ocf:heartbeat:IPaddr params ip=10.10.0.1
[Note]

使用 High Availability 配置资源时,不应通过 init 初始化相同的资源。高可用性负责所有服务的启动或停止操作。

如果配置成功,新资源将显示在 crm_mon 中,它在群集的随机节点上启动。

要将资源迁移到其他节点,请执行以下操作:

过程 B.4. 将资源迁移到其他节点

  1. 启动壳层并成为 root 用户。

  2. 将资源 myip 迁移到节点 saturn

    crm resource migrate myIP saturn

附录 C. OCFS2 和 cLVM 的示例配置

下面是可帮助您设置资源以便使用 OCFS2 和/或 cLVM 的示例配置。下面的配置并不是完整群集配置,只是摘录,其中包括 OCFS2 和 cLVM 需要的所有资源,并忽略您可能需要的任何其他资源。属性和属性值可能需要根据特定设置调整。

例 C.1. OCFS2 和 cLVM 的群集配置

primitive clvm ocf:lvm2:clvmd \
     params daemon_timeout="30" 
primitive dlm ocf:pacemaker:controld \
     op monitor interval="60" timeout="60"
primitive o2cb ocf:ocfs2:o2cb \
     op monitor interval="60" timeout="60"
primitive ocfs2-1 ocf:heartbeat:Filesystem \
     params device="/dev/sdb1" directory="/mnt/shared" fstype="ocfs2" options="acl" \
     op monitor interval="20" timeout="40"
primitive sbd_stonith stonith:external/sbd \
     params pcmk_delay_max="15" \
     op monitor interval="15" timeout="15"
primitive vg1 ocf:heartbeat:LVM \
     params volgrpname="cluster-vg" \
     op monitor interval="60" timeout="60"
group base-group dlm o2cb clvm vg1 ocfs2-1
clone base-clone base-group \
     meta interleave="true"
  

配置如果采用基本组(包括若干原始基元)和基本克隆,则可简化总体设置:基本组有内部共置和排序功能并始终保持不变,但以下两个资源除外:

  • vg1 - 卷组的资源。只有在设置包含 cVLM 时才配置此资源。否则在群集配置和基本组中忽略该资源。

  • ocfs2-1 - 用于装入 OCFS2 文件系统的资源。只有在设置包含 OCFS2 时才配置此资源。否则在群集配置和基本组中忽略该资源。

例 C.1 “OCFS2 和 cLVM 的群集配置”中提及的所有其他资源都可配置并在群集中运行,无论设置如何。

附录 D. 群集管理工具

High Availability Extension 附带了一套全面的工具,帮助您从命令行管理群集。本章主要介绍管理 CIB 中的群集配置和群集资源所需的工具。用于管理资源代理的其他命令行工具或用于调试设置(和查错)的工具在第 20 章 查错中有所介绍。

[Note]使用 crmsh

此工具仅供专家使用。通常,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 Extension 才能正常工作。crm_verify 可帮助创建新的或已修改的配置。您可以本地复制运行的群集中的 CIB,编辑它,使用 crm_verify 验证它,然后使用 cibadmin 使新配置生效。有关对此工具的用法及命令语法的详细介绍,请参见 crm_verify 手册页。

管理资源配置

crm_resource 命令可在群集上执行各种资源相关的操作。它可以修改已配置资源的定义,启动和停止资源,删除资源或在节点间迁移资源。有关对此工具的用法及命令语法的详细介绍,请参见 crm_resource 手册页。

管理资源故障计数

crm_failcount 命令可查询指定节点上每个资源的故障计数。此工具还可用于重设置故障计数,同时允许资源在它多次失败的节点上再次运行。有关对此工具的用法及命令语法的详细介绍,请参见 crm_failcount 手册页。

管理节点的备用状态

crm_standby 命令可操作节点的备用属性。备用模式中的所有节点都不再具备主管资源的资格,并且必须移动那里的所有资源。备用模式对执行维护任务(如内核更新)非常实用。从节点删除备用属性,使之再次成为群集中完全处于活动状态的成员。有关对此工具的用法及命令语法的详细介绍,请参见 crm_standby 手册页。

附录 E. 升级群集和更新软件包

摘要

本章介绍两种不同方案:将群集升级为 SUSE® Linux Enterprise High Availability Extension 的另一个版本(主要版本或服务包),以及更新各群集节点上的单个包。

E.1. 术语

下面介绍本章中使用的最重要术语的定义:

主要版本, 正式发布 (GA) 版本

SUSE Linux Enterprise(或任何软件产品)的主要版本是一个新版本,其中会引入一些新功能和工具,去除之前弃用的组件,并进行一些不向后兼容的更改。

服务包 (SP)

将几个增补程序合并到便于安装或部署的一个组织体中。服务包是有编号的并通常包含安全性修复、更新、升级或程序增强。

更新

安装包的更新次要版本。

升级

安装包或分发包的更新主要版本,引入新功能

E.2. 将群集升级到最新产品版本

至于支持哪种升级路径以及如何执行升级,取决于运行群集的当前产品版本,以及您要迁移到的目标版本。有关一般信息,请参见《SUSE Linux Enterprise Server 11 部署指南》中的“更新 SUSE Linux Enterprise”一章。可通过 http://www.suse.com/documentation/ 获得。

[Important]升级前必须满足的先决条件
  • 确保系统备份为最新的且可恢复。

  • 请先在群集设置的临时实例上测试升级过程,然后再在生产环境中执行该过程。

    这样,您便可以估算出维护期所需的时间段。这还有助于检测和解决可能会出现的任何意外问题。

E.2.1. 从 SLES 10 升级到 SLE HA 11

[Important]需要将群集置于脱机状态

如果要从 SUSE Linux Enterprise Server 10 迁移到 SUSE Linux Enterprise Server 11(任何服务包),则所有群集节点必须处于脱机状态,并且该群集必须整体迁移,系统不支持即有在 SUSE Linux Enterprise Server 10 上运行,又有在 SUSE Linux Enterprise Server 11 上运行的节点的混合群集。

为了方便起见,SUSE Linux Enterprise High Availability Extension 提供了一个 hb2openais.sh 脚本,用于在从 Heartbeat 移到 OpenAIS 群集堆栈时转换您的数据。脚本会分析储存在 /etc/ha.d/ha.cf 中的配置,并为 OpenAIS 群集堆栈生成新的配置文件。此外,它会调整 CIB 以匹配 OpenAIS 约定、转换 OCFS2 文件系统以及将 EVMS 替换为 cLVM。任何 EVMS2 容器都将转换为 cLVM2 卷。对于 CIB 中现有资源所引用的卷组,将创建新的 LVM 资源。

要想将群集成功地从 SUSE Linux Enterprise Server 10 SP4 迁移到 SUSE Linux Enterprise Server 11,需要执行以下步骤:

成功完成转换后,可以让升级后的群集再次连接网络。

[Note]升级后还原

升级到 SUSE Linux Enterprise Server 11 后,系统支持还原到 SUSE Linux Enterprise Server 10。

E.2.1.1. 准备和备份

将群集升级为下一个产品版本并相应地转换数据之前,需要准备当前群集。

过程 E.1. 准备 SUSE Linux Enterprise Server 10 SP4 群集

  1. 登录到群集。

  2. 查看检测信号配置文件 /etc/ha.d/ha.cf 并检查是否所有通讯媒体都支持多路广播。

  3. 确保以下文件在所有节点上都是相同的:/etc/ha.d/ha.cf/var/lib/heartbeat/crm/cib.xml

  4. 通过在每个节点上执行 rcheartbeat stop 使所有节点都处于脱机状态。

  5. 除了在更新到最新版本之前执行所推荐的常规系统备份外,另请备份以下文件,以便在升级到 SUSE Linux Enterprise Server 11 之后用来运行转换脚本:

    • /var/lib/heartbeat/crm/cib.xml

    • /var/lib/heartbeat/hostcache

    • /etc/ha.d/ha.cf

    • /etc/logd.cf

  6. 如果有 EVMS2 资源,请将非 LVM EVMS2 卷转换为 SUSE Linux Enterprise Server 10 上的兼容卷。在转换过程中(请参见第 E.2.1.3 节 “数据转换”),它们会随即转换为 LVM2 卷组。转换后,请务必使用 vgchange -c y 将每个卷组都标记为 High Availability 群集的成员。

E.2.1.2. 升级/安装

做好群集准备和文件备份后,在群集节点上全新安装 SUSE Linux Enterprise 11。

过程 E.2. 升级到 SUSE Linux Enterprise 11

  1. 在所有群集节点上全新安装 SUSE Linux Enterprise Server 11。

  2. 在所有群集节点上,安装 SUSE Linux Enterprise Server 之后随即安装 SUSE Linux Enterprise High Availability Extension 11,使之做为外接式附件。有关详细信息,请参见第 3.3 节 “作为外接式附件安装”

E.2.1.3. 数据转换

SUSE Linux Enterprise Server 11 和 High Availability Extension 均安装完成后,即可开始进行数据转换。High Availability Extension 附带的转换脚本已经过谨慎的设置,但是无法在全自动模式下处理所有设置。它会其所作更改显示警报,但是需要您进行干预和决策。您需要详细地了解群集 - 因为更改是否有意义取决于您的需求。转换脚本位于 /usr/lib/heartbeat(如果使用 64 位系统,则位于 /usr lib64/heartbeat)。

[Note]执行测试运行

要熟悉转换进程,我们强烈建议您首先测试一下转换(不作任何更改)。可以使用同一测试目录执行重复的测试运行,但是只需要复制一次文件。

过程 E.3. 测试转换

  1. 在某个节点上创建测试目录,并将备份文件复制到此测试目录:

    $ mkdir /tmp/hb2openais-testdir
    $ cp /etc/ha.d/ha.cf /tmp/hb2openais-testdir
    $ cp /var/lib/heartbeat/hostcache /tmp/hb2openais-testdir
    $ cp /etc/logd.cf /tmp/hb2openais-testdir
    $ sudo cp /var/lib/heartbeat/crm/cib.xml /tmp/hb2openais-testdir
  2. 使用以下命令开始测试运行

    $ /usr/lib/heartbeat/hb2openais.sh -T /tmp/hb2openais-testdir -U

    如果使用 64 位系统,请使用以下命令:

    $ /usr/lib64/heartbeat/hb2openais.sh -T /tmp/hb2openais-testdir -U
  3. 阅读并校验生成的 openais.confcib-out.xml 文件:

    $ cd  /tmp/hb2openais-testdir 
    $ less openais.conf 
    $ crm_verify -V -x cib-out.xml

有关转换阶段的详细信息,请参见所安装的 High Availability Extension 中的 /usr/share/doc/packages/pacemaker/README.hb2openais

过程 E.4. 转换数据

执行测试运行并检查输出后,可以立即开始数据转换。只需在一个节点上运行转换。主群集配置 (CIB) 会自动复制到其他节点。需要复制的所有其他文件会由转换脚本自动进行复制。

  1. 确保 sshd 运行于 root 有权访问的所有节点上,以便转换脚本成功地将文件复制到其他群集节点。

  2. 确保所有 ocfs2 文件系统都已卸载。

  3. High Availability Extension 随附一个默认的 OpenAIS 配置文件。如果要防止在后面的步骤中重写此默认配置,请制作 /etc/ais/openais.conf 配置文件的副本。

  4. root 身份启动转换脚本。如果使用 sudo,请使用 -u 选项指定特权用户:

    $ /usr/lib/heartbeat/hb2openais.sh -u root

    基于 /etc/ha.d/ha.cf 中所存储的配置,脚本将为 OpenAIS 群集堆栈生成新的配置文件 /etc/ais/openais.conf。由于从 Heartbeat 更改到 OpenAIS,它还会分析 CIB 配置,并让您了解是否需要更改群集配置。在转换运行的节点上完成所有文件处理,并将文件处理复制到其他节点。

  5. 按照屏幕指导执行操作。

成功完成转换后,按照第 3.5.7 节 “使群集联机”中所述启动新的群集堆栈。

升级之后,不支持还原到 SUSE Linux Enterprise Server 10。

E.2.1.4. 更多信息

有关转换脚本和转换阶段的更多细节,请参见所安装的 High Availability Extension 中的 /usr/share/doc/packages/pacemaker/README.hb2openais

E.2.2. 从 SLE HA 11 升级到 SLE HA 11 SP1

[Note]在服务包版本之间滚动升级

为了成功地将现有群集从一个服务包版本迁移到下一个服务包版本,您可以执行滚动升级,即一个接一个地升级节点。

由于主群集配置文件从 /etc/ais/openais.conf 更改为 SUSE Linux Enterprise High Availability Extension 11 SP1 的 /etc/corosync/corosync.conf,因此脚本会负责进行必要的转换。它们会在更新 openais 包时自动执行。

过程 E.5. 执行滚动升级

[Warning]在更新期间处于活动状态的群集堆栈

要更新运行中群集的成员节点上的任何软件包,请在启动软件更新前先停止该节点上的群集堆栈。在某些情况下(请参见停止群集堆栈的条件),您也可以将群集置于维护模式(自 SUSE Linux Enterprise High Availability Extension 11 SP4 开始提供此模式)。

如果在软件更新期间,群集资源管理器所在节点处于活动状态,可能会导致不可预料的结果,例如活动的节点被屏蔽。

  1. root 用户身份登录要更新的节点,然后停止 OpenAIS:

    rcopenais stop
  2. 检查系统备份是否为最新并且可恢复。

  3. 从 SUSE Linux Enterprise Server 11 升级到 SUSE Linux Enterprise Server 11 SP1,然后从 SUSE Linux Enterprise High Availability Extension 11 升级到 SUSE Linux Enterprise High Availability Extension 11 SP1。有关如何升级产品的信息,请参见《SUSE Linux Enterprise Server 11 SP1 部署指南》中的“更新 SUSE Linux Enterprise”一章。

  4. 在升级后的节点上重启动 OpenAIS/Corosync,使此节点重新加入群集:

    rcopenais start
  5. 使下一个节点处于脱机状态,并对此节点重复上述过程。

E.2.3. 从 SLE HA 11 SP1 升级到 SLE HA 11 SP2

将现有群集从 SUSE Linux Enterprise High Availability Extension 11 SP1 迁移到 11 SP2 是通过滚动升级来完成的,具体与从版本 11 升级到 11 SP2 类似。

过程 E.5, “执行滚动升级”中所述进行操作,但请注意以下两点区别:

  • 步骤 3中,从 SUSE Linux Enterprise Server 11 SP1 升级到 SUSE Linux Enterprise Server 11 SP2,并从 SUSE Linux Enterprise High Availability Extension 11 SP1 升级到 SUSE Linux Enterprise High Availability Extension 11 SP2。

    因为针对 32 位体系结构的 Xen 超级管理程序已停产,您可能需要手动解决包 drbd-xen 的依赖性。请注意,跨平台群集不受支持。

  • 由于 SP2 中附有内核更新,请在步骤 3步骤 4之间重引导节点。

[Important]滚动升级的时间限制

只有在所有群集节点升级到最新产品版本后,才可使用 SUSE Linux Enterprise High Availability Extension 11 SP2 所具有的新功能。对于 SP1/SP2 并存的群集,其在滚动升级期间受支持的时间非常短暂。请在一周内完成滚动升级。

E.2.4. 从 SLE HA 11 SP2 升级到 SLE HA 11 SP3

将现有群集从 SUSE Linux Enterprise High Availability Extension 11 SP2 迁移到 11 SP3 是通过滚动升级来完成的,具体与从版本 11 升级到 11 SP1 类似。

使用以下偏差执行过程 E.5, “执行滚动升级”中所述的步骤:在步骤 3中,从 SUSE Linux Enterprise Server 11 SP2 升级到 SUSE Linux Enterprise Server 11 SP3,然后从 SUSE Linux Enterprise High Availability Extension 11 SP2 升级到 SUSE Linux Enterprise High Availability Extension 11 SP3。

[Important]滚动升级的时间限制

只有在所有群集节点升级到最新产品版本后,才可使用 SUSE Linux Enterprise High Availability Extension 11 SP3 所具有的新功能。对于 SP2/SP3 并存的群集,其在滚动升级期间受支持的时间非常短暂。请在一周内完成滚动升级。

E.2.5. 从 SLE HA 11 SP3 升级到 SLE HA 11 SP4

将现有群集从 SUSE Linux Enterprise High Availability Extension 11 SP3 迁移到 11 SP4 是通过滚动升级来完成的,具体与从版本 11 升级到 11 SP1 类似。

使用以下偏差执行过程 E.5, “执行滚动升级”中所述的步骤:在步骤 3中,从 SUSE Linux Enterprise Server 11 SP3 升级到 SUSE Linux Enterprise Server 11 SP4,然后从 SUSE Linux Enterprise High Availability Extension 11 SP3 升级到 SUSE Linux Enterprise High Availability Extension 11 SP4。

[Note]升级 CIB 语法版本

标记(用于对资源分组)和某些 ACL 功能仅适用于 pacemaker-2.0 或更高的 CIB 语法版本。(要检查版本,请运行 cibadmin -Q |grep validate-with)。如果您已从 SUSE Linux Enterprise High Availability Extension 11 SP3 升级,则 CIB 版本默认不会升级。要手动升级到最新的 CIB 版本,请使用以下命令之一:

root # cibadmin --upgrade --force

或者

root # crm configure upgrade force
[Important]滚动升级的时间限制

只有在所有群集节点升级到最新产品版本后,才可使用 SUSE Linux Enterprise High Availability Extension 11 SP4 所具有的新功能。对于 SP3/SP4 并存的群集,其在滚动升级期间受支持的时间非常短暂。请在一周内完成滚动升级。

E.3. 更新群集节点上的软件包

[Warning]在更新期间处于活动状态的群集堆栈

要更新运行中群集的成员节点上的任何软件包,请在启动软件更新前先停止该节点上的群集堆栈。在某些情况下(请参见停止群集堆栈的条件),您也可以将群集置于维护模式(自 SUSE Linux Enterprise High Availability Extension 11 SP4 开始提供此模式)。

如果在软件更新期间,群集资源管理器所在节点处于活动状态,可能会导致不可预料的结果,例如活动的节点被屏蔽。

在节点上安装任何包更新之前,请先确认以下问题:

停止群集堆栈的条件

  • 这种更新是否会影响属于 SUSE Linux Enterprise High Availability Extension 或 Geo Clustering for SUSE Linux Enterprise High Availability Extension 外接式附件的任何包?如果是,请先在节点上停止群集堆栈,然后再开始软件更新。

    root # rcopenais stop
  • 包更新操作是否需要重引导计算机?如果是,请先在节点上停止群集堆栈,然后再开始软件更新:

    root # rcopenais stop

如果不属于上述任何一种情况,则不需要停止群集堆栈。在这种情况下,请将群集置于维护模式,然后开始软件更新:

root # crm configure property maintenance-mode=true

有关维护模式的更多细节,请参见第 4.7 节 “维护模式”

成功安装更新后,请解除群集的维护模式:

root # crm configure property maintenance-mode=true

或者使用以下命令在相应节点上重启动群集堆栈:

root # rcopenais start

E.4. 更多信息

关您要升级到的产品的任何更改和新功能的详细信息,请参见其发行说明,所在网址为 https://www.suse.com/releasenotes/

附录 F. 新增功能

以下部分概述了版本之间的最重要软件修改。此摘要指出了基本设置是否已完全重配置、配置文件是否已移至其他位置或者发生的其他重要更改等信息。

有关更多细节和最新信息,请参考各自产品版本的发行说明。可以从已安装系统中获取:/usr/share/doc/release-notes,或在线获取:https://www.suse.com/releasenotes/

F.1. 版本 10 SP3 到版本 11

使用 SUSE Linux Enterprise Server 11,群集堆栈已经从 Heartbeat 更改为 OpenAIS。OpenAIS 实施由服务可用性论坛 (Service Availability Forum) 发布的行业标准 API - 应用程序界面规范 (AIS)。已保留并大大地改进了 SUSE Linux Enterprise Server 10 中的群集资源管理器,并将其迁移到 OpenAIS 中,现被称为 Pacemaker。

有关从 SUSE® Linux Enterprise Server 10 SP3 到 SUSE Linux Enterprise Server 11 中 High Availability 组件的更改的更多详细信息,请参见以下部分。

F.1.1. 新增功能

迁移阈值和故障超时

High Availability Extension 现在新增了迁移阈值和故障超时的概念。可以对资源定义一个故障数量,达到此数量后资源将迁移到新节点。默认情况下,将不再允许节点运行出现故障的资源,直到管理员手动重设置资源的故障计数。但也可以通过设置资源的 failure-timeout 选项来使资源失效。

资源和操作默认值

现在可以设置资源选项和操作的全局默认值。

支持脱机配置更改

在以原子方式更新配置之前,通常希望预览一系列更改的效果。现在,您可以先创建可使用命令行界面编辑的配置的阴影副本,然后再提交它,从而以原子方式更改活动群集配置。

重用规则、选项和操作集

规则、instance_attributes、meta_attributes 和操作集可定义一次并在多处引用。

对 CIB 中的某些操作使用 XPath 表达式

现在 CIB 接受基于 XPath 的 createmodifydelete 操作。有关更多信息,请参见 cibadmin 帮助文本。

多维共置和排序约束

为创建一个配置资源集,以前您可以定义一个资源组(无法总是准确地表达此设计)或将每种关系定义为单独的约束,导致约束随着资源和组合的数量增长而激增。现在还可以使用共置约束的另一种形式,即定义 resource_sets

从非群集的服务器连接到 CIB

如果服务器上安装了 Pacemaker,则即使服务器本身不是群集的一部分,也可以连接到群集。

在已知时间触发重现操作

默认情况下,重现操作是根据资源启动的时间来计划的,但这并不总令人满意。要指定操作应根据的日期/时间,请设置操作的间隔-起始时间。群集使用此时间计算正确的启动-延迟,这样操作将在起始时间 +(间隔 * N)时发生。

F.1.2. 变更功能

资源和群集选项的命名约定

现在所有资源和群集选项都使用连字符 (-) 代替下划线 (_)。例如,master_max 元选项已重命名为 master-max

重命名 master_slave 资源

master_slave 资源已重命名为 master。主资源是一种特殊类型的克隆,可按两种模式之一运行。

属性的容器标记

attributes 容器标记已删除。

先决条件的操作字段

pre-req 操作字段已重命名为 requires

操作间隔

所有操作都必须有间隔。对于启动/停止操作,间隔必须设置为 0

共置和排序约束的属性

为了清晰起见,已对共置和排序约束的属性进行了重命名。

因故障而迁移的群集选项

resource-failure-stickiness 群集选项已替换为 migration-threshold 群集选项。另请参见迁移阈值和故障超时

命令行工具的自变量

已使命令行工具的自变量保持一致。另请参见资源和群集选项的命名约定

验证和分析 XML

群集配置是用 XML 编写的。现在,一种更强大的 RELAX-NG 纲要已取代文档类型定义 (DTD),用于定义结构和内容的模式。libxml2 用作分析器。

id 字段

id 字段现在是具有以下限制的 XML ID:

  • ID 不能包含冒号。

  • ID 不能以数字开始。

  • ID 必须是全局唯一的(不只是对标记唯一)。

参考其他对象

某些字段(如引用资源的限制中的字段)是 IDREF。这意味着它们必须引用现有资源或对象才能使配置有效。因此将无法删除在别处有引用的对象。

F.1.3. 删除功能

设置资源元选项

不再能将资源元选项设置为顶级属性。改为使用元属性。另请参见 crm_resource 手册页。

设置全局默认值

不再从 crm_config 读取资源和操作默认值。

F.2. 版本 11 到版本 11 SP1

群集配置文件

主群集配置文件已从 /etc/ais/openais.conf 更改为 /etc/corosync/corosync.conf。这两个文件很相似。当从 SUSE Linux Enterprise High Availability Extension 升级到 SP1 时,这些文件间的脚本有一些细微的差异。

滚动升级

为了在最短的停机时间内迁移现有的群集,SUSE Linux Enterprise High Availability Extension 允许您从 SUSE Linux Enterprise High Availability Extension 11 滚动升级到 11 SP1。一个接一个地升级节点时,群集仍处于联机状态。

自动群集部署

为了方便群集部署,AutoYaST 允许复制现有的节点。AutoYaST 是使用包含安装和配置数据的 AutoYaST 配置文件自动安装一个或多个 SUSE Linux Enterprise 系统而无需用户干预的系统。该配置文件会告知 AutoYaST 要安装的内容以及如何配置已安装好的系统,以便最终获得一个完整的即用型系统。此配置文件可用于以不同方式进行大批量部署。

配置文件的传送

SUSE Linux Enterprise High Availability Extension 附有用于复制群集中所有节点的配置文件的 Csync2。它能处理任意数量的主机,还可以只在特定主机子组间同步文件。使用 YaST 可配置主机名和应通过 Csync2 同步的文件。

群集管理的 Web 界面

High Availability Extension 现在还包括 HA Web Konsole (Hawk) - 用于管理任务的基于 Web 的用户界面。它还可用于从非 Linux 计算机监视和管理 Linux 群集。如果系统未提供或不支持图形用户界面,它还是理想的解决方案。

资源配置模板

使用命令行界面创建和配置资源时,现在可以从各种资源模板中进行选择,以更快、更方便地进行配置。

根据负载放置资源

通过定义特定节点提供的容量、特定资源需要的容量,以及通过选择群集中的若干放置策略之一,可以根据资源负载影响来布置资源,以避免降低群集性能。

群集感知的主动/主动 RAID1

现在可以使用 cmirrord 从两个独立的 SAN 创建能迅速从灾难中恢复的储存配置。

只读 GFS2 支持

为了便于从 GFS2 迁移到 OCFS2,可以采用只读模式装入 GFS2 文件系统,以将数据复制到 OCFS2 文件系统。SUSE Linux Enterprise High Availability Extension 完全支持 OCFS2。

OCFS2 的 SCTP 支持

如果配置了冗余环,OCFS2 和 DLM 可通过独立于网络设备绑定的 SCIP 自动使用冗余通讯路径。

储存保护

为提供附加安全层来保护储存的数据免受损坏,可以使用 IO 屏蔽(使用 external/sbd 屏蔽设备)和 sfex 资源代理的组合来确保对储存内容的排它访问。

Samba 群集

High Availability Extension 现在支持 CTDB - 普通数据库的群集实现。它允许您配置群集 Samba 服务器 - 为异构环境提供高可用性解决方案。

用于 IP 负载平衡的 YaST 模块

该新模块允许使用图形用户界面配置基于内核的负载平衡。它是 ldirectord 的前端,用于管理 Linux Virtual Server 和监控真实的服务器的用户空间守护程序。

F.3. 版本 11 SP1 到版本 11 SP2

地域群集(多站点群集)

除本地群集和市内区域群集外,SUSE® Linux Enterprise High Availability Extension11 SP4 还支持多站点群集。这意味着,每个本地群集可以有多个地域分散的站点。这些群集之间的故障转移由更高级的实体、所谓的 booth 进行协调。对于多站点群集的支持是 SUSE Linux Enterprise High Availability Extension 提供的一个独立选项。

访问控制列表

支持定义更精细的访问权限来访问群集配置 ACL 的各个部分。如果在 CRM 中启用了此功能,则群集管理工具中的可用功能取决于指派给用户的角色和访问权限。

自动群集设置 (sleha-bootstrap)

如需便捷地设置群集,可以使用引导脚本 sleha-initsleha-join 以便在数分钟内启动并运行单个节点群集,并相应地让其他节点加入。在引导过程中设置的任何选项都可稍后使用 YaST 群集模块进行修改。

Corosync 单播模式

虽然默认模式仍为多播,但现在还支持对节点间的通讯使用单模模式。有关更多信息,请参考第 3.5.2 节 “定义通讯通道”

HA Web Konsole (Hawk)

Hawk 的功能已经大大的扩展。现在可以配置全局群集属性、基本和高级类型的资源、约束和资源监视。为了对群集状态进行详细分析,Hawk 会生成一个群集报告 (hb_report)。您可以使用模拟器查看群集历史记录或浏览可能的故障情境。有关详细信息,请参见第 5 章 配置和管理群集资源(Web 界面)

资源模板

为了方便配置类似资源,所有群集管理工具现在都允许定义资源模板,以便在原始资源或特定类型的约束中进行引用。

虚拟化和云集成

为了根据负载影响布置资源,High Availability Extension 现在既能自动检测节点的容量,也能自动检测资源所需的容量。资源代理可以检测到虚拟机的最低要求(例如,指派给 Xen 或 KVM guest 的内存,或者 CPU 内核的数量)。利用率属性(用于定义要求或容量)将会自动添加到 CIB 中。有关更多信息,请参考第 4.4.6 节 “根据资源负载影响放置资源”

为了防止节点的网络连接由于大量并行 Xen 或 KVM 实时迁移而超载,引入了新的全局群集属性 migration-limit。它允许您限制 TE 在一个节点上可以并行执行的迁移作业数。默认情况下,此属性设置为 -1,表示并行迁移数不受限制。

conntrack 工具

为了同步群集节点之间的连接状态,High Availability Extension 会使用 conntrack-tools。使用这些工具可与内核内连接跟踪系统交互,以便对 iptables 启用有状态包检测。有关更多信息,请参考第 3.5.5 节 “同步群集节点间的连接状态”

并行 SSH (pssh)

要在所有群集节点上执行命令时无需登录每个节点,请使用 pssh。 有关更多信息,请参考第 20.5 节 “杂项”

crm resource secret

要为 STONITH 或其他独立于 cib.xml 的资源设置密码,请使用 crm resource secret。有关更多信息,请参考第 7.5 节 “设置独立于 cib.xml 的密码”

Samba 群集

加入 Active Directory 域的 CTDB 功能已得到改进。有关更多信息,请参见第 18.3 节 “加入 Active Directory 域”

使用 Rear 实现灾难恢复

Rear (Relax and Recover)是用于创建灾难恢复映像的管理员工具集。灾难恢复信息可通过网络储存,也可本地储存在硬盘、USB 设备、DVD/CD-R、磁带或类似设备上。备份数据储存在网络文件系统 (NFS) 上。

OCFS2 上的定额

要在 OCFS2 文件系统上使用定额,请选用合适的定额功能或装入选项创建并装入文件系统:ursquota(用于单个用户的定额)或 grpquota(用于组的定额)。

F.4. 版本 11 SP2 到版本 11 SP3

配置和管理群集资源(Web 界面)

Hawk 的功能已经再次扩展。例如,您可以使用 Hawk 的群集仪表板监控多个群集。Hawk 模拟器现在也允许您更改节点的状态,添加或编辑资源以及约束,或更改群集配置以便于模拟器的运行。除此之外还增强了 HA Web Konsole 的许多其他详细信息。

Pacemaker GUI

基于 X11 的 Pacemaker GUI 现在处于维护模式,在 SUSE Linux Enterprise High Availability Extension 11 的生命周期未安排接收新的功能。对于 SUSE Linux Enterprise High Availability Extension 12,HA Web Konsole (Hawk) 将会成为 High Availability Extension 的默认图形用户界面。

从现有群集中删除节点

sleha-remove 引导脚本现在更容易删除群集中的单个节点。

使用维护模式

有时候需要将单个节点设置为维护模式。如果您的群集包含 3 个以上的节点,则可以轻松地将其中一个节点设置为维护模式,而其他节点则继续执行常规操作。

配置群集资源组

crm 壳层的组命令已扩展至允许修改组,可以向组中添加资源、从组中删除资源以及更改组成员的顺序。

组的利用率属性

如果将具有利用率属性的多个资源组合或设置共置约束,则 High Availability Extension 会考虑此情况。如有可能,资源将被放置到可以满足所有容量要求的节点上。有关利用属性的详细信息,请参阅第 4.4.6 节 “根据资源负载影响放置资源”

默认探测超时

如果针对该资源的监控操作没有配置特定超时,则 CRM 即会自动计算探测超时。有关详细信息,请参见第 4.2.9 节 “超时值”。截止目前,如果没有配置特定超时,探测的默认超时会继承该群集范围默认操作超时

监视系统运行状况

为避免节点耗尽磁盘空间而使得系统不足以管理已分配给该节点的任何资源,High Availability Extension 提供了一个资源代理 ocf:pacemaker:SysInfo。使用此代理可监视节点在磁盘分区占用方面的状况。

第 4.5.1 节 “使用 Nagios 插件监视远程主机上的服务”

群集图表

crm 壳层和 Hawk 现提供显示节点的图形表示和 CIB 中配置的资源的可能性。有关细节,请参见第 7.1.7 节 “群集图表”第 5.1.2 节 “主屏幕:群集状态”

联接从属的热插拔

在某些情况下,例如相应的网络设备不断出现故障时,必须使用另一个接口来取代绑定的从属接口。解决方案是设置 YaST 现支持的绑定从属的热插拔。

配置 Cmirrord

High Availability Extension 支持 cmirrord 中的 RAID 10:现在可以为每个镜像图例添加多个物理卷。同时,系统还支持 lvcreate 命令中的镜像选项,也就是说暂时打破的镜像能更快地实现再同步。

加入 Active Directory 域

YaST 现支持 CTDB 功能加入活动目录域。

F.5. 版本 11 SP3 到版本 11 SP4

常规
  • 针对群集名称、节点名称、群集资源和约束引入了一致的命名模式,并已在文档中应用了该命名模式。参见附录 A, 命名约定。(Fate#314938)。

  • 改进了 crm 外壳示例的一致性。

  • 去除了包含代理列表的“HA OCF 代理”一章。因此,也去除了“查错和参考”部分,并将查错一章移到了附录中。

  • 已将 Geo Clustering for SUSE Linux Enterprise High Availability Extension 的文档转移到一份独立的文档 (Fate#316120)。有关如何使用和设置地理位置分散的群集的细节,请参见《Quick Start Geo Clustering for SUSE Linux Enterprise High Availability Extension》(Geo Clustering for SUSE Linux Enterprise High Availability Extension 快速入门)。可以从 http://www.suse.com/documentation/ 或者所安装系统的 /usr/share/doc/manual/sle-ha-geo-manuals_en/ 下找到该文档。

  • 更改了主-从资源的术语,在上游文档中,此类资源现在称为多状态资源。

  • 更新了屏幕截图。

  • 介绍了 hb_reportcrm_report 都可用作创建详细群集报告的命令行工具。

  • 根据技术反馈修正了手册中的许多 bug 并添加了大量内容。

第 1 章 产品概述
  • 为了保持一致,已将术语“多站点群集”更改为地理位置分散的(或地域)群集。

  • 添加了有关以外接式附件产品提供 SUSE Linux Enterprise High Availability Extension 和 Geo Clustering for SUSE Linux Enterprise High Availability Extension 的章节:第 1.1 节 “作为外接式附件/扩展提供”

第 2 章 系统要求和建议
  • 重新组织了内容。

  • 介绍了在使用非标准 SSH 端口时如何创建群集报告 (Fate#314906)。请参见 SSH

第 3 章 安装和基本设置
  • 添加了注释“No-Start-on-Boot 参数”(Fate#317778)。

第 4 章 配置和管理基础
第 5 章 配置和管理群集资源(Web 界面)
  • 更新了该章,以反映第 4 章 配置和管理基础中所述的新功能。

  • 与地域群集相关的所有 Hawk 功能的介绍已移至单独的文档。请参见 http://www.suse.com/documentation/ 上的新文档《Geo Clustering for SUSE Linux Enterprise High Availability Extension Quick Start》(Geo Clustering for SUSE Linux Enterprise High Availability Extension 快速入门)。

第 7 章 配置和管理群集资源(命令行)
第 9 章 屏障和 STONITH
  • 从示例中去除了有关克隆 STONITH 资源的内容,因为不再需要用到这些信息。

  • 去除了一些仅用于测试的 STONITH 设备。

  • 去除了 external/kdumpcheck 资源代理,并添加了 fence_kdump 资源代理的示例配置。

第 10 章 访问控制列表
第 17 章 储存保护
第 19 章 使用 Rear 实现灾难恢复

本章内容进行了彻底修订,已更新为 Rear 版本 1.16

SUSE Linux Enterprise High Availability Extension 11 SP4 附带了两个 Rear 版本:版本 1.10.0(包含在 RPM 包 rear 中)和版本 1.16(包含在 RPM 包 rear116 中)。有关 Rear 版本 1.10.0 的文档,请参见《SUSE Linux Enterprise High Availability Extension 11 SP3 高可用性指南》。网址:http://www.suse.com/documentation/

第 20 章 查错
HA OCF 代理

已去除此章。可以根据第 7.1.3 节 “显示有关 OCF 资源代理的信息”中所述,在安装的系统中查看有关 OCF 资源代理的最新信息。

附录 A, 命名约定
  • 解释文档中所用命名模式的新附录。

附录 E, 升级群集和更新软件包

术语

主动/主动、主动/被动

针对服务在节点上如何运行的一种概念。主动-被动方案表示一个或多个服务正在主动节点上运行,而被动节点则等待主动节点出现故障。主动-主动方案表示每个节点既是主动节点同时也是被动节点。例如,该节点正在运行某些服务,但也可以接管其他节点中的其他服务。它相当于 DRBD 概念中的主要/次要节点和双重主要节点。

仲裁程序

在地域群集中有助于达成一致性决定(例如,站点间的资源故障转移)的其他实例。仲裁器是一台以特殊模式运行一个或多个 booth 实例的计算机。

AutoYaST

AutoYaST 是能自动安装一个或多个 SUSE Linux Enterprise 系统而无需用户干预的系统。

bindnetaddr(绑定网络地址)

Corosync 管理器应绑定的网络地址。

booth

用于在地域群集的不同站点之间管理故障转移进程的实例。它的目标是让多站点资源在一个且只有一个的站点上保持活动。如果某个群集站点发生故障,则会使用被视为站点间故障转移域的所谓的“票据”来实现。

boothd(booth 守护程序)

地域群集中的每个参与群集和仲裁器都会运行一个服务,即 boothd。它连接到其他站点上运行的 booth 守护程序,并交换连接性细节。

CCM(一致性群集成员资格,consensus cluster membership)

CCM 确定组成群集的节点并在群集中共享此信息。任何节点或法定票数的新增和丢失都由 CCM 提供。群集的每个节点上都运行 CCM 模块。

CIB(群集信息库,cluster information base)

表示全部群集配置和状态(群集选项、节点、资源、约束和彼此之间的关系)。它会以 XML 的格式写入并驻存在内存中。主 CIB 保留并在 DC(指定的协调程序)上进行维护,并复制到其他节点。对 CIB 的常规读写操作通过主 CIB 进行排序。

群集

高性能群集是一组为更快获得结果而共享应用程序负载的计算机(实际或虚拟)。高可用性群集主要用于确保服务的最大可用性。

群集分区

当一个或多个节点与群集的剩余节点之间的通讯失败时,即会发生群集分区。群集中的各节点被分割成不同分区,但仍然处于活动状态。他们只可与同一分区的节点进行通讯,并不了解未连接的节点。由于无法确认其他分区的节点是否丢失,所以开发了一种节点分裂方案(另请参见节点分裂)。

并发性违规

资源本应只可在群集中的一个节点上运行,但实际上正在多个节点上运行。

conntrack 工具

可与内核内连接跟踪系统交互,以便对 iptables 启用有状态包检测。High Availability Extension 使用此工具来同步群集节点之间的连接状态。

CRM(群集资源管理器,cluster resource manager)

负责协调所有非本地交互的主要管理实体。High Availability Extension 使用 Pacemaker 作为 CRM。群集的每个节点都有自己的 CRM 实例,但系统会选择通过在 DC 上运行的 CRM 将决策转发给其他非本地 CRM 并处理其输入。CRM 会与多个组件交互:自身节点和其他节点上的本地资源管理器、非本地 CRM、管理命令、屏蔽功能、成员资格层和 booth。

crmd(群集资源管理器守护程序)

CRM 作为守护程序 crmd 进行实施。每个群集节点上都有一个实例。系统会选出一个 crmd 实例来充当主实例,从而实现所有群集决策制定的集中化。如果选定的 crmd 进程(或它所在的节点)失败,则会建立一个新的进程。

crmsh

命令行实用程序 crmsh 可用于管理群集、节点和资源。

有关详细信息,请参见第 7 章 配置和管理群集资源(命令行)

Csync2

可用于在群集中的所有节点间(甚至在地域群集间)复制配置文件的同步工具。

DC(指定的协调程序)

群集中的一个 CRM 会选为指定的协调程序 (DC)。DC 是群集中唯一可以决定需要在整个群集执行更改(例如节点屏蔽或资源移动)的实体。DC 同时也是用于保存 CIB 主副本的节点。所有其他节点都从当前 DC 获取他们的配置和资源分配信息。DC 是在成员资格更改后从群集的所有节点中选出的。

灾难

关键基础设施因自然因素、人为因素、硬件故障或软件 bug 而意外中断。

灾难恢复

灾难恢复是指在发生灾难后将业务功能恢复到正常、稳定状态的过程。

灾难恢复计划

在对 IT 基础设施产生最低影响的前提下,从灾难中恢复的策略。

DLM(分布式锁管理器,distributed lock manager)

DLM 协调群集文件系统的磁盘访问和管理文件锁定以提高性能和可用性。

DRBD

DRBD 是为构建高可用性群集而设计的块设备。®整个块设备通过专用网络镜像,且视作网络 RAID-1。

现有群集

术语现有群集指的是任何包括至少一个节点的群集。现有群集具有定义通讯通道的基本 Corosync 配置,但它们不一定已有资源配置。

故障转移

指资源或节点在某台服务器上出现故障、受影响的资源在另一个节点上启动的情况。

故障转移域

经过命名的一组群集节点的子集,有资格在节点出现故障时运行群集服务。

屏蔽

描述了防止隔离的或失败的群集成员访问共享资源的概念。一旦群集节点出现故障,则会关闭或重置该群集节点,防止其产生问题。这样一来,状态不确定的节点与资源隔离开来。

geo 群集(分散在不同地理位置的群集,geographically dispersed cluster)

请参见地域群集

负载平衡

能让多个服务器参与同一个服务并执行相同任务。

本地群集

一个位置的单个群集(例如,位于一个数据中心内的所有节点)。网络延迟可以忽略。储存通常由所有节点同步访问。

LRM(本地资源管理器,local resource manager)

负责对资源执行操作。它使用资源代理脚本执行这些操作。LRM 是的,它无法了解任何策略。它需要 DC 告诉它做什么。

mcastaddr(多路广播地址)

Corosync 管理器使用 IP 地址进行多路广播。IP 地址可以为 IPv4 或 IPv6。

mcastport(多路广播端口)

用于群集通讯的端口。

metro 群集

使用光纤通道连接所有站点、可跨越多个建筑物或数据中心的单个群集。网络延迟通常很短(对 20 英里左右的距离而言不到 5 毫秒)。储存频繁复制(镜像或同步复制)。

多路广播

一种用于网络内一对多通讯的技术,可用于群集通讯。Corosync 支持多路广播和单路广播。

地域群集

由多个分布于不同地理位置的站点组成,每个站点一个本地群集。站点通过 IP 通讯。站点之间的故障转移由更高级别的实体 booth 协调。地域群集需要应对有限网络带宽和高延迟问题。储存异步复制。

节点

是群集成员并对用户不可见的任何计算机(实际或虚拟)。

PE(策略引擎,policy engine)

策略引擎计算要实现 CIB 中的策略更改而需要执行的操作。PE 还生成一个转换图,包含用于达到下一个群集状态的(资源)操作和依赖性的列表。PE 始终在 DC 上运行。

法定票数

在群集中,如果群集分区具有多数节点(或投票),则它定义为具有法定票数(是具有法定票数的)。法定票数准确地区分了一个分区。它是算法的组成部分,用于防止多个断开的分区或节点继续运行而导致数据和服务损坏(节点分裂)。法定票数是屏蔽的先决条件,而屏蔽随后确保法定票数确实是唯一的。

RA(资源代理,resource agent)

脚本充当代理来管理资源(例如,启动、停止或监视资源)。High Availability Extension 支持三种不同的资源代理:OCF(开放集群框架)资源代理、LSB(Linux 标准库)资源代理(标准 LSB init 脚本)和 Heartbeat 资源代理。有关更多信息,请参见第 4.2.2 节 “支持的资源代理类”

Rear (Relax and Recover)

创建灾难恢复图像的管理员工具集。

资源

Pacemaker 已知的任何类型的服务或应用程序。例如,IP 地址、文件系统或数据库。

术语资源也适用于 DRBD,表示使用通用连接进行复制的一组块设备。

RRP(冗余环网协议,redundant ring protocol)

该协议支持使用多个冗余局域网来从部分或整体网络故障中恢复。这样,只要一个网络运行正常,群集通讯就仍可继续。Corosync 支持 Totem Redundant Ring Protocol。

SBD(STONITH 块设备,STONITH block device)

在所有节点都可访问共享储存区的环境中,有一个小分区是用于基于磁盘的屏蔽。

SFEX(共享磁盘文件排他性,shared disk file exclusiveness)

SFEX 在 SAN 上提供存储保护。

节点分裂

一种将群集节点分为两个或多个互不了解的组的方案(通过软件或硬件故障)。STONITH 防止节点分裂情况对整个群集产生不利影响。也称为分区的群集方案。

术语“节点分裂”还用于 DRBD 中,但在 DRBD 中,它表示两个节点包含不同的数据。

SPOF(单一故障点,single point of failure)

一旦群集中任何组件出现故障,则会导致整个群集出现故障。

STONITH

Shoot the other node in the head(关闭其他节点)的首字母缩写。它表示一种关闭行为异常的节点以避免其在群集中制造麻烦的屏蔽机制。

切换

根据需要有计划地将服务转移到群集中的其他节点。请参见故障转移

票证

地域群集中使用的一个组件。票据授予在特定群集站点上运行某些资源的权限。一张票据某个时间内只能由一个站点所拥有。资源可按依赖性绑定到特定票据。仅当站点有定义好的票据时,才会启动相应资源。反之亦然,如果删除了票据,将会自动停止依赖于该票据的资源。

单路广播

一种将消息发送到单个网络目标的技术。Corosync 支持多路广播和单路广播。在 Corosync 中,单路广播作为 UDP 单路广播 (UDPU) 实施。

附录 G. GNU 许可证

此附录包含 GNU 自由文档许可证版本 1.2。

G.1. 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 noncommercially. 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 in order 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 noncommercially, 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:

  1. 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.

  2. 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.

  3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

  4. Preserve all the copyright notices of the Document.

  5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

  6. 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.

  7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

  8. Include an unaltered copy of this License.

  9. 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.

  10. 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.

  11. 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.

  12. 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.

  13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

  14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

  15. 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 http://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.


SUSE Linux Enterprise High Availability Extension 高可用性指南 11 SP4