跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability 文档 / 管理指南 / 配置和管理 / 配置和管理基础知识
适用范围 SUSE Linux Enterprise High Availability 15 SP6

5 配置和管理基础知识

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

本章将介绍一些管理群集时需要了解的基本概念。以下章节介绍如何使用 SUSE Linux Enterprise High Availability 提供的各种管理工具执行主要的配置和管理任务。

5.1 使用情形

群集通常分为以下两类:

  • 双节点群集

  • 包含两个以上节点的群集。这通常表示节点数是奇数。

添加不同的拓扑可以衍生不同的用例。下面是最常见的用例:

位于一个位置的双节点群集

配置:FC SAN 或类似的共享存储,第 2 层网络。

使用情形:嵌入式群集,注重服务的高可用性,而不是实现数据冗余来进行数据复制。例如,此类设置可用于无线电台或装配生产线控制器。

位于两个位置的双节点群集(使用最广泛)

配置:对称的延伸群集,FC SAN,以及跨两个位置的第 2 层网络。

使用情形:典型的延伸群集,注重服务的高可用性和本地数据冗余。用于数据库和企业资源规划。最常用的设置之一。

位于三个位置的奇数数目的节点

配置:2×N+1 个节点,FC SAN 跨两个主要位置第三个辅助站点不部署 FC SAN,而是充当多数仲裁者。第 2 层网络至少跨两个主要位置。

使用情形:典型的延伸群集,注重服务的高可用性和数据冗余。例如数据库和企业资源规划。

5.2 仲裁判定

当一个或多个节点与群集的剩余节点之间的通讯失败时,即会发生群集分区。这些节点只能与同一分区中的其他节点通讯,并不知道被隔开的节点的存在。如果群集分区具有多数节点(或投票),则将其定义为具有仲裁(是具有法定票数的)。通过仲裁计算来获得此结果。要实现屏蔽,就必须具有仲裁。

仲裁不是由 Pacemaker 计算或确定。Corosync 可以直接处理双节点群集的仲裁,无需更改 Pacemaker 配置。

仲裁计算方式受以下因素的影响:

群集节点数

为使服务保持运行状态,包含两个以上节点的群集依赖法定票数(多数票决)来解决群集分区。根据以下公式,您可以计算群集正常运行所需的最小工作节点数目:

N ≥ C/2 + 1

N = minimum number of operational nodes
C = number of cluster nodes

例如,五节点群集至少需要三个工作节点(或两个可以故障转移的节点)。

我们强烈建议使用双节点群集或奇数数目的群集节点。双节点群集适合跨两个站点的延伸设置。所含节点数为奇数的群集可以构建于单个站点上,也可以分散在三个站点之间。

Corosync 配置

Corosync 是一个讯息交换和成员资格层,具体请参见第 5.2.1 节 “双节点群集的 Corosync 配置”第 5.2.2 节 “N 节点群集的 Corosync 配置”

5.2.1 双节点群集的 Corosync 配置

使用引导脚本时,Corosync 配置包含一个 quorum 段落,其中包含以下选项:

例 5.1︰ 双节点群集的 Corosync 配置摘录
quorum {
   # Enable and configure quorum subsystem (default: off)
   # see also corosync.conf.5 and votequorum.5
   provider: corosync_votequorum
   expected_votes: 2
   two_node: 1
}

如果设置了 two_node: 1,默认会自动启用 wait_for_all 选项。如果未启用 wait_for_all,则群集应在两个节点上并行启动。否则,第一个节点会对缺失的第二个节点执行启动屏蔽。

5.2.2 N 节点群集的 Corosync 配置

如果不使用双节点群集,我们强烈建议使用奇数数目的节点来构成 N 节点群集。在仲裁配置方面,您有以下选择:

  • 使用 crm cluster join 命令添加更多的节点,或

  • 手动调整 Corosync 配置。

如果要手动调整 /etc/corosync/corosync.conf,请使用以下设置:

例 5.2︰ N 节点群集的 Corosync 配置摘录
quorum {
   provider: corosync_votequorum 1
   expected_votes: N 2
   wait_for_all: 1 3
}

1

使用 Corosync 的仲裁服务

2

预期投票数。可以在 quorum 段落中提供此参数,或者在提供了 nodelist 段落时由系统自动计算此参数。

3

启用“等待所有节点”(WFA) 功能。如果启用了 WFA,只有在所有节点可见之后,群集才会首次具有法定票数。要避免启动时出现某些资源争用情况,可以将 wait_for_all 设置为 1。例如,在五节点群集中,每个节点有一个投票,因此 expected_votes 设置为 5。如果三个或更多个节点彼此可见,则群集分区将具有法定票数,可以开始运行。

5.3 全局群集选项

全局群集选项控制群集在遇到特定情况时的行为方式。它们被分成若干组,可通过 Hawk2 和 crm 外壳等群集管理工具来查看和修改。

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

5.3.1 全局选项 no-quorum-policy

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

可用值如下:

ignore

如果将 no-quorum-policy 设为 ignore,群集分区就会像其具有仲裁一样工作,即使情况并非如此。群集分区可以发出屏蔽命令,并继续进行资源管理。

在 SLES 11 中,建议对双节点群集使用此设置。从 SLES 12 开始,ignore 值已过时,不允许使用。Corosync 依据配置和条件为群集节点或单个节点提供仲裁 — 或者不提供仲裁。

对于双节点群集,当节点发生故障时,唯一有意义的行为就是始终做出反应。第一个步骤始终应该是尝试屏蔽丢失的节点。

freeze

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

如果群集中的某些资源依赖于与其他节点的通讯(例如,OCFS2 挂载),建议对此类群集使用此设置。在这种情况下,默认设置 no-quorum-policy=stop 不起作用,因为它将导致以下状况:既无法停止这些资源,又无法连接对等节点。任何停止资源的尝试最终都会超时,并出现 stop failure,触发升级的恢复和屏蔽。

stop(默认值)

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

suicide

如果失去法定票数,受影响群集分区中的所有节点都将被屏蔽。此选项只能与 SBD 结合使用,具体请参见第 13 章 “存储保护和 SBD

5.3.2 全局选项 stonith-enabled

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

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

重要
重要:不支持无 STONITH 的群集

不支持无 STONITH 资源的群集。

5.4 Hawk2 简介

要配置和管理群集资源,请使用 Hawk2 或 crm 外壳 (crmsh) 命令行实用程序。

Hawk2 的用户友好 Web 界面可让您从 Linux 或非 Linux 计算机监控和管理 High Availability 群集。可使用(图形)Web 浏览器从群集内外的任何计算机访问 Hawk2。

5.4.1 Hawk2 要求

仅当系统满足以下要求后,用户才能登录 Hawk2:

hawk2 软件包

要使用 Hawk2 连接的所有群集节点上都必须安装 hawk2 软件包。

Web 浏览器

在要使用 Hawk2 访问群集节点的计算机上,需要安装启用了 JavaScript 和 Cookie 的(图形)Web 浏览器才能建立连接。

Hawk2 服务

要使用 Hawk2,必须在要通过 Web 界面连接到的节点上启动相应的 Web 服务。请参见过程 5.1 “启动 Hawk2 服务”

如果您已使用 crm 外壳提供的引导脚本设置群集,那么此时 Hawk2 服务已启用。

每个群集节点上的用户名、组和口令

Hawk2 用户必须是 haclient 组的成员。安装程序将创建名为 hacluster 的 Linux 用户,该用户将添加到 haclient 组中。

使用 crm cluster init 脚本进行设置时,将为 hacluster 用户设置默认口令。在启动 Hawk2 之前,请将它更改为安全口令。如果您未使用 crm cluster init 脚本,请先为 hacluster 设置口令,或者创建属于 haclient 组的新用户。请在要使用 Hawk2 连接的所有节点上执行此操作。

通配符证书处理

通配符证书是指对多个子域有效的公共密钥证书。例如,*.example.com 的通配符证书可以保障 login.example.comwww.example.com 等域的安全。

Hawk2 支持通配符证书及可转换证书。/srv/www/hawk/bin/generate-ssl-cert 可生成自我签名的默认私用密钥和证书。

要使用您自己的证书(可转换或通配符证书),请将生成的证书(位于 /etc/ssl/certs/hawk.pem 处)替换为您自己的证书。

过程 5.1︰ 启动 Hawk2 服务
  1. 在要连接的节点上,打开外壳并以 root 用户身份登录。

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

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

    # systemctl start hawk

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

    # systemctl enable hawk

5.4.2 登录

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

您无需使用 Hawk 登录个别群集节点,而是可以将一个浮动的虚拟 IP 地址(IPaddrIPaddr22)配置为群集资源。该地址无需任何特殊配置。如此,无论 Hawk 服务在哪个物理节点上运行,客户端都可以连接到该服务。

在使用 crm 外壳提供的引导脚本设置群集时,系统会询问您是否配置虚拟 IP 以用于群集管理。

过程 5.2︰ 登录 Hawk2 Web 界面
  1. 在任一台计算机上,启动 Web 浏览器并输入以下 URL:

    https://HAWKSERVER:7630/

    使用运行 Hawk Web 服务的任何群集节点的 IP 地址或主机名替换 HAWKSERVER。如果已配置虚拟 IP 地址以使用 Hawk2 进行群集管理,请使用该虚拟 IP 地址替换 HAWKSERVER

    注意
    注意:证书警告

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

    要校验证书,请联系群集操作员获取证书细节。

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

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

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

  3. 单击登录

5.4.3 Hawk2 概述:主要元素

登录 Hawk2 后,左侧会显示一个导航栏,右侧会显示一个顶层行,其中包含若干链接。

注意
注意:Hawk2 中的可用功能

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

如果在 CRM 中启用了 ACL,Hawk2 中的可用功能取决于用户角色和指派给这些角色的访问权限。Hawk2 中的历史记录浏览器只能由用户 hacluster 来执行。

5.4.3.1 左侧导航栏

监控
  • 状态:一目了然地显示当前的群集状态(与 crmsh 上的 crm status 作用类似)。有关详细信息,请参见 第 11.1.1 节 “监控单个群集”。如果群集包含 guest nodes(运行 pacemaker_remote 守护程序的节点),这些节点也会显示。屏幕刷新频率接近实时刷新:任何节点或资源状态的更改都几乎立即可见。

  • 仪表板:可用于监控多个群集(如果您设置了 Geo 群集,还会位于多个不同站点)。有关详细信息,请参见 第 11.1.2 节 “监控多个群集”。如果群集包含 guest nodes(运行 pacemaker_remote 守护程序的节点),这些节点也会显示。屏幕刷新频率接近实时刷新:任何节点或资源状态的更改都几乎立即可见。

查错
配置

5.4.3.2 顶层行

Hawk2 的顶层行显示以下条目:

  • :单击可切换到批模式。可用于模拟和分阶段进行更改并通过单次事务应用这些更改。有关详细信息,请参见 第 5.4.7 节 “使用批模式”

  • USERNAME:可用于设置 Hawk2 的首选项(例如,Web 界面的语言,或者是否在 STONITH 处于禁用状态时显示警告)。

  • 帮助:访问 SUSE Linux Enterprise High Availability 文档、查看发行说明或报告 Bug。

  • 注销:单击可注销。

5.4.4 配置全局群集选项

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

过程 5.3︰ 修改全局群集选项
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 从左侧导航栏中,选择配置 › 群集配置

    群集配置屏幕即会打开。屏幕中显示全局群集选项及其当前值。

    要在屏幕右侧显示参数的简要描述,请将光标悬停在该参数上。

    Hawk2 - 群集配置
    图 5.1︰ Hawk2 - 群集配置
  3. 检查 no-quorum-policystonith-enabled 的值并根据需要进行调整。

    1. no-quorum-policy 设置为合适的值。有关详细信息,请参见第 5.3.1 节 “全局选项 no-quorum-policy

    2. 如果出于某些原因需要禁用屏蔽,请将 stonith-enabled 设置为 no。默认情况下,该参数设置为 true,因为执行常规的群集操作必须要使用 STONITH 设备。根据默认值,如果未配置 STONITH 资源,群集会拒绝启动任何资源。

      重要
      重要:不支持无 STONITH 的配置
      • 您必须为群集配置节点屏蔽机制。

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

    3. 要从群集配置中去除某个参数,请单击该参数旁边的减号图标。如果删除了某个参数,群集会将该参数视为采用了默认值。

    4. 要向群集配置添加新参数,请从下拉框中选择一个参数。

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

    1. 要调整某个值,请从下拉框中选择一个不同的值,或直接编辑该值。

    2. 要添加新的资源默认值或操作默认值,请从空下拉框中选择一项,然后输入值。如果有默认值,Hawk2 会自动建议这些值。

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

  5. 确认更改。

5.4.5 显示当前群集配置 (CIB)

群集管理员有时需要知道群集配置。Hawk2 可以 crm 外壳语法、XML 和图表形式显示当前配置。要查看 crm 外壳语法形式的群集配置,请从左侧导航栏中选择配置 › 编辑配置,并单击显示。要改为以原始 XML 显示配置,请单击 XML。单击示意图会以图表显示 CIB 中配置的节点和资源。它还会显示各资源之间的关系。

5.4.6 使用向导添加资源

Hawk2 向导是设置简单资源(如虚拟 IP 地址或 SBD STONITH 资源)的便捷方式。对于包含多个资源的复杂配置(例如 DRBD 块设备或 Apache Web 服务器的资源配置)而言,这种方法也十分有用。向导会引导您完成所有配置步骤,并提供您需要输入的参数的相关信息。

过程 5.4︰ 使用资源向导
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 从左侧导航栏中,选择配置 › 向导

  3. 单击各个类别旁边的向下箭头图标将其展开,然后选择所需的向导。

  4. 按照屏幕指导执行操作。完成最后的配置步骤后,校验您所输入的值。

    Hawk2 会显示它将执行的操作以及配置的最终成果。根据配置,您可能会收到提示要求输入 root 口令才能应用配置。

Hawk2 - Apache Web 服务器向导
图 5.2︰ Hawk2 - Apache Web 服务器向导

有关详细信息,请参见第 6 章 “配置群集资源

5.4.7 使用批模式

Hawk2 提供批模式,包括群集模拟器。该模式可用于以下操作:

  • 对群集进行分阶段更改并通过单次事务应用这些更改,而不是让每项更改立即生效。

  • 模拟更改和群集事件,例如,了解可能失败的情况。

例如,在创建相互依赖的资源组时,可以使用批模式。通过使用批模式,您可以避免将中间或不完整的配置应用到群集。

启用批模式后,您可以添加或编辑资源和约束,或更改群集配置。此外,还可以模拟群集中的事件,包括变为上线或下线的节点、资源操作,以及要授予或撤消的票据。有关详细信息,请参见 过程 5.6 “插入节点、资源或票据事件”

群集模拟器会在每次更改后自动运行,并在用户界面上显示预期效果。举例而言,这还意味着当您在批模式下停止某资源时,用户界面上会将该资源显示为已停止,但实际上,该资源仍在运行中。

重要
重要:实时系统的向导和更改

某些向导包含除纯群集配置以外的其他操作。在批模式下使用这些向导时,群集配置以外的任何其他更改都将立即应用到在线系统。

因此,需要 root 权限的向导无法在批模式下执行。

过程 5.5︰ 使用批模式
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 要激活批模式,请从顶层行选择

    顶层行下方即会另外显示一栏,指出批模式处于活动状态,且包含指向您可在批模式下执行的操作的链接。

    Hawk2 批模式已激活
    图 5.3︰ Hawk2 批模式已激活
  3. 当批模式处于活动状态时,对群集执行任意更改,例如添加或编辑资源和约束,或编辑群集配置。

    系统将会模拟更改,并将其显示在所有屏幕上。

  4. 要查看所做更改的细节,请从批模式栏中选择显示批模式窗口即会打开。

    对于任何配置更改,该模式会以 crmsh 语法显示实时状态与模拟更改之间的差异:以 - 字符开头的行表示当前状态,而以 + 开头的行显示的是预期状态。

  5. 要插入事件或查看更多细节,请参见过程 5.6。否则请关闭窗口。

  6. 选择丢弃应用模拟的更改,并确认您的选择。此操作还会停用批模式,使您回到正常模式。

在批模式下运行时,Hawk2 还允许您插入节点事件资源事件

节点事件

可让您更改节点的状态。可用的状态有上线下线不正常

资源事件

可让您更改资源的一些属性。例如,您可以设置操作(如 monitorstartstop)、操作要应用到的节点,以及要模拟的预期结果。

票据事件

可让您测试授予和撤消票据(用于 Geo 群集)的影响。

过程 5.6︰ 插入节点、资源或票据事件
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 如果批模式未启动,请单击顶层行上的切换到批模式。

  3. 在批模式栏中,单击显示打开批模式窗口。

  4. 要模拟节点的状态更改:

    1. 单击插入 › 节点事件

    2. 选择要操作的节点,然后选择其目标状态

    3. 确认更改。您的事件便会添加到批模式对话框中所列的事件队列中。

  5. 模拟资源操作:

    1. 单击插入 › 资源事件

    2. 选择要操作的资源和要模拟的操作

    3. 如果必要,请定义间隔

    4. 选择要运行操作的节点及目标结果。您的事件便会添加到批模式对话框中所列的事件队列中。

    5. 确认更改。

  6. 要模拟票据操作,请执行以下操作:

    1. 单击插入 › 票据事件

    2. 依次选择要操作的票据和要模拟的操作

    3. 确认更改。您的事件便会添加到批模式对话框中所列的事件队列中。

  7. 批模式对话框(图 5.4)会为每个插入的事件显示新的一行。此处列出的所有事件都会立即被模拟并反映到状态屏幕上。

    如果您还执行了任何配置更改,在线状态和模拟更改之间的差异会显示在所插入事件的下方。

    Hawk2 批模式 - 插入的事件和配置更改
    图 5.4︰ Hawk2 批模式 - 插入的事件和配置更改
  8. 要去除插入的事件,请单击该事件旁边的去除图标。Hawk2 会相应地更新状态屏幕。

  9. 要查看模拟运行的更多细节,请单击模拟器并选择以下选项之一:

    摘要

    显示详细的摘要。

    CIB(输入)/CIB(输出)

    CIB(输入)会显示初始的 CIB 状态。CIB(输出)会显示转换后 CIB 的情况。

    转换图

    显示转换的图形表示形式。

    交付

    显示转换的 XML 表示形式。

  10. 如果您已审阅模拟的更改,请关闭批模式窗口。

  11. 要退出批模式,请应用丢弃模拟的更改。

5.5 crmsh 简介

要配置和管理群集资源,可以使用 crm 外壳 (crmsh) 命令行实用程序或 Hawk2(基于 Web 的用户界面)。

本节介绍命令行工具 crmcrm 命令有多个子命令,用于管理资源、CIB、节点和资源代理等对象。它提供了全面的帮助系统,并嵌入了示例。所有示例都遵循附录 B 中所述的命名约定。

事件记录到 /var/log/crmsh/crmsh.log 中。

提示
提示:交互式 crm 提示符

使用不带参数(或只带一个 sublevel 参数)的 crm,crm 外壳将进入交互式模式。此模式由以下提示符指示:

crm(live/HOSTNAME)

为了容易阅读,我们的文档在交互式 crm 提示符中省略了主机名。仅当您需要在特定的节点(如 alice)上运行交互式外壳时,才包含主机名,例如:

crm(live/alice)

5.5.1 登录

管理群集需要有充足的权限。以下用户可以运行 crm 命令及其子命令:

  • root 用户或具有 sudo 特权的用户。这些用户通过使用 SSH 执行 crmsh 操作(例如 crm cluster initcrm cluster joincrm report)拥有所有群集节点的完整权限。他们还可以对 CIB 进行更改,例如添加资源和约束。

  • CRM 所有者用户(通常是在群集安装期间默认创建的用户 hacluster)。此用户可以对 CIB 进行更改,但执行使用 SSH 的操作(例如 crm report)的权限受到限制。

    提示
    提示:非特权用户

    使用 user 选项,您能以普通(非特权)用户身份运行 crm 及其子命令,而且必要时能使用 sudo 更改其 ID。例如,下面的命令会将 hacluster 设置为特权用户 ID:

    # crm options user hacluster

    必须设置 /etc/sudoers,这样 sudo 就不会要求提供口令。

对于使用 SSH 的操作,群集使用无口令 SSH 访问方式在节点之间进行通讯。如果使用 crm cluster init 设置群集,脚本会检查 SSH 密钥是否存在,如果尚不存在,则会生成这些密钥。如果使用 YaST 群集模块设置群集,您必须自行配置 SSH 密钥。

在大多数情况下,rootsudo 用户的 SSH 密钥必须存在于节点上(或在其上生成)。或者,sudo 用户的 SSH 密钥可以存在于本地计算机上,并通过 SSH 代理转发传递到节点。如果您需要避免在节点上存储 SSH 密钥,此方法可能很有用,不过这需要进行额外的配置。

过程 5.7︰ 使用引导脚本设置启用了 SSH 代理转发的群集
  1. 在本地计算机上,启动 SSH 代理并为其添加密钥。有关详细信息,请参见 SUSE Linux Enterprise Server 的《Security and Hardening Guide》中的 Automated public key logins with ssh-agent

  2. 以具有 sudo 特权的用户身份登录到第一个群集节点,并使用 -A 选项启用 SSH 代理转发:

    user@local > ssh -A USER@NODE1
  3. 使用 crm cluster init 脚本初始化群集:

    user@node1 > sudo --preserve-env=SSH_AUTH_SOCK \1
    crm cluster init --use-ssh-agent2

    1

    这会保留 SSH_AUTH_SOCK 环境变量,SSH 代理通讯时需要用到该变量。

    2

    指示脚本使用本地 SSH 密钥,而不是在节点上生成密钥。

  4. 初始配置完成后,退出第一个节点并使用 -A 选项登录到第二个节点。

  5. 使用 crm cluster join 脚本为群集添加第二个节点。使用 -c 选项指定之前初始化群集的用户和节点:

    user@node2 > sudo --preserve-env=SSH_AUTH_SOCK \
    crm cluster join --use-ssh-agent -c USER@NODE1

如果您是使用 YaST 而不是引导脚本设置群集的,系统将不会自动生成 SSH 密钥。要在启用 SSH 代理转发的情况下配置 SSH 密钥,可以单独使用引导脚本的 ssh 阶段。应在使用 YaST 配置群集后、在使群集上线前运行这些命令。

在第一个节点上运行以下命令:

user@node1 > sudo --preserve-env=SSH_AUTH_SOCK \
crm cluster init ssh --use-ssh-agent

在所有其他节点上运行以下命令:

user@node2 > sudo --preserve-env=SSH_AUTH_SOCK \
crm cluster join ssh --use-ssh-agent -c USER@NODE1

5.5.2 获得帮助

可通过以下方式之一访问帮助:

  • 输出 crm 及其命令行选项的用法:

    # crm --help
  • 列出所有可用的命令:

    # crm help
  • 访问其他帮助部分,而不只是命令参考:

    # crm help topics
  • 查看 configure 子命令的完整帮助文本:

    # crm configure help
  • 列显 configure 的子命令 group 的语法、用法及示例:

    # crm configure help group

    以下命令的作用相同:

    # crm help configure group

基本上 help 子命令(不要与 --help 选项混淆)的所有输出都会打开一个文本编辑器。此文本编辑器允许您向上/向下滚动,以便更加方便地阅读帮助文本。要退出文本编辑器,请按 Q 键。

提示
提示:在 Bash 和交互式外壳中使用 Tab 键补全

crmsh 不仅为交互式外壳提供 Tab 键补全,还全面支持在 Bash 中直接使用此功能。例如,键入 crm help config→| 会补全文字,就像在交互式外壳中一样。

5.5.3 执行 crmsh 的子命令

crm 命令本身可按以下方式使用:

  • 直接: 将所有子命令与 crm 结合使用,按 Enter 键,便会立即看到输出。例如,输入 crm help ra 可获取有关 ra 子命令(资源代理)的信息。

    可以缩写子命令,前提是缩写后的子命令是唯一的。例如,您可以将 status 缩写为 st,crmsh 可以识别该缩写。

    另一项功能是缩写参数。通常,您是通过 params 关键字添加参数的。如果 params 是第一个且是唯一存在的部分,则可以省略。例如,下面一行:

    # crm primitive ipaddr IPaddr2 params ip=192.168.0.55

    相当于下行:

    # crm primitive ipaddr IPaddr2 ip=192.168.0.55
  • 作为 crm 外壳脚本: 外壳脚本包含 crmcrm 的子命令。有关详细信息,请参见第 5.5.5 节 “使用 crmsh 的外壳脚本”

  • 作为 crmsh 群集脚本:此类脚本是元数据、对 RPM 包的参照、配置文件及多个 crmsh 子命令捆绑在一起并以单个描述性名称命名的集合。可以通过 crm script 命令来管理这些内容。

    请不要将它们与 crmsh 外壳脚本相混淆:尽管两者具有一些共同的目标,但 crm 外壳脚本只包含子命令,而群集脚本所包含的远远不只是简单的命令枚举。有关详细信息,请参见第 5.5.6 节 “使用 crmsh 的群集脚本”

  • 作为内部外壳交互: 输入 crm 以进入内壳。提示符会切换为 crm(live)。使用 help 可获取可用子命令的概述。由于内壳具有不同级别的子命令,您可以键入一个子命令然后按 Enter进入相应的级别。

    例如,如果输入 resource,则进入资源管理级别。提示符会切换为 crm(live)resource#。要退出该内部的外壳,请使用 quit 命令。如果需要返回上一个级别,可使用 backupendcd

    键入 crm 和相应的子命令(不带任何选项)并按 Enter,即可直接进入该级别。

    该内部外壳还支持使用 Tab 键补全子命令和资源。键入命令的开头,然后按 →| 键,crm 便会补全相应命令。

crmsh 还支持执行同步命令。使用 -w 选项可以激活该功能。如果已启动 crm 但未指定 -w,之后可以将用户首选项的 wait 设为 yes (options wait yes) 来启用它。如果此选项已启用,则 crm 将会等到事务完成为止。事务一经启用,就会打印出点以指示进度。同步命令执行仅适用于 resource start 之类的命令。

注意
注意:区分管理子命令与配置子命令

crm 工具有管理功能(子命令 resourcenode),可用于配置设置(configurecib)。

下面的小节概述了 crm 工具的重要方面。

5.5.4 显示有关 OCF 资源代理的信息

由于在群集配置中一直需要处理资源代理,crm 工具包含了 ra 命令。使用该命令可以显示有关资源代理的信息并对其进行管理(如需其他信息,另请参见第 6.2 节 “支持的资源代理类别”):

# crm ra
crm(live)ra# 

classes 命令可列出所有类别和提供方:

crm(live)ra# classes
 lsb
 ocf / heartbeat linbit lvm2 ocfs2 pacemaker
 service
 stonith
 systemd

要大致了解某个类别(和提供方)的所有可用资源,请使用 list 命令:

crm(live)ra# list ocf
AoEtarget           AudibleAlarm        CTDB                ClusterMon
Delay               Dummy               EvmsSCC             Evmsd
Filesystem          HealthCPU           HealthSMART         ICP
IPaddr              IPaddr2             IPsrcaddr           IPv6addr
LVM                 LinuxSCSI           MailTo              ManageRAID
ManageVE            Pure-FTPd           Raid1               Route
SAPDatabase         SAPInstance         SendArp             ServeRAID
...

可使用 info 查看资源代理的概述:

crm(live)ra# info ocf:linbit:drbd
This resource agent manages a DRBD* resource
as a master/slave resource. DRBD is a shared-nothing replicated storage
device. (ocf:linbit:drbd)

Master/Slave OCF Resource Agent for DRBD

Parameters (* denotes required, [] the default):

drbd_resource* (string): drbd resource name
    The name of the drbd resource from the drbd.conf file.

drbdconf (string, [/etc/drbd.conf]): Path to drbd.conf
    Full path to the drbd.conf file.

Operations' defaults (advisory minimum):

    start         timeout=240
    promote       timeout=90
    demote        timeout=90
    notify        timeout=90
    stop          timeout=100
    monitor_Slave_0 interval=20 timeout=20 start-delay=1m
    monitor_Master_0 interval=10 timeout=20 start-delay=1m

Q 退出查看器。

提示
提示:直接使用 crm

在之前的示例中,我们使用了 crm 命令的内壳。但是您不一定非要使用它。将相应子命令添加到 crm 中也可获得相同的结果。例如,在外壳中输入 crm ra list ocf 可以列出所有 OCF 资源代理。

5.5.5 使用 crmsh 的外壳脚本

Crmsh 外壳脚本提供了将 crmsh 子命令枚举到文件中的便捷方式。如此,您便可轻松地注释特定行或稍后重新运行这些行。请注意,crmsh 外壳脚本只能包含 crmsh 子命令,不允许包含任何其他命令。

您需要先创建包含特定命令的文件,然后才能使用 crmsh 外壳脚本。例如,下面的文件会列显群集的状态并提供所有节点的列表:

例 5.3︰ 简单的 crmsh 外壳脚本
# A small example file with some crm subcommands
status
node list

以井字符号 (#) 开头的所有行都是注释,系统会将其忽略。如果某行过长,可在结尾插入反斜杠 (\),然后换到下一行。为方便阅读,建议将属于特定子命令的行进行缩进。

要使用此脚本,请使用以下其中一种方法:

# crm -f example.cli
# crm < example.cli

5.5.6 使用 crmsh 的群集脚本

从所有群集节点收集信息并部署任何更改是一项关键的群集管理任务。您不必在不同的节点上手动执行相同的过程(这很容易出错),可以使用 crmsh 群集脚本来代替该过程。

请不要将它们与 crmsh 外壳脚本相混淆,第 5.5.5 节 “使用 crmsh 的外壳脚本”中对后者进行了介绍。

对比 crmsh 外壳脚本,群集脚本另外会执行如下任务:

  • 安装特定任务所需的软件。

  • 创建或修改任何配置文件。

  • 收集信息并报告群集的潜在问题。

  • 将更改部署到所有节点。

crmsh 群集脚本并不能取代其他群集管理工具,它只是提供了一种集成的方式用于在群集中执行上述任务。有关详细信息,请参见https://crmsh.github.io/scripts/

5.5.6.1 用法

要获取所有可用群集脚本的列表,请运行:

# crm script list

要查看脚本的组成部分,请使用 show 命令和群集脚本的名称,例如:

# crm script show mailto
mailto (Basic)
MailTo

 This is a resource agent for MailTo. It sends email to a sysadmin
whenever  a takeover occurs.

1. Notifies recipients by email in the event of resource takeover

  id (required)  (unique)
      Identifier for the cluster resource
  email (required)
      Email address
  subject
      Subject

show 的输出包含标题、简要说明和过程。每个过程分为一系列按给定顺序执行的步骤。

每个步骤都包含一份必要参数与可选参数及其简要说明和默认值的列表。

每个群集脚本都可识别一组通用参数。这些参数可传递给任何脚本:

表 5.1︰ 通用参数
参数参数说明
actionINDEX如果设置此参数,则只会执行单个操作(verify 会返回索引)
dry_runBOOL如果设置此参数,则只会模拟执行(默认值:no)
nodesLIST列出要对其执行脚本的节点
portNUMBER要连接的端口
statefileFILE在以单一步进方式执行时,状态将保存在给定文件中
sudoBOOL如果设置此参数,crm 会在适当的情况下提示输入 sudo 口令并使用 sudo(默认值为 no)
timeoutNUMBER以秒为单位的执行超时(默认值:600)
userUSER以给定用户的身份运行脚本

5.5.6.2 校验和运行群集脚本

在运行某个群集脚本之前,请检查该脚本将要执行的操作并校验其参数,以免出现问题。群集脚本可能会执行一系列操作,并且可能会出于各种原因而失败。因此,在运行脚本之前校验参数有助于避免出现问题。

例如,mailto 资源代理需要唯一的标识符和一个电子邮件地址。要校验这些参数,请运行:

# crm script verify mailto id=sysadmin email=tux@example.org
1. Ensure mail package is installed

        mailx

2. Configure cluster resources

        primitive sysadmin MailTo
                email="tux@example.org"
                op start timeout="10"
                op stop timeout="10"
                op monitor interval="10" timeout="10"

        clone c-sysadmin sysadmin

verify 命令会列显步骤,并将所有占位符替换为给定的参数。verify 会报告发现的任何问题。如果一切正常,请将 verify 命令替换为 run

# crm script run mailto id=sysadmin email=tux@example.org
INFO: MailTo
INFO: Nodes: alice, bob
OK: Ensure mail package is installed
OK: Configure cluster resources

使用 crm status 检查您的资源是否已集成到群集中:

# crm status
[...]
 Clone Set: c-sysadmin [sysadmin]
     Started: [ alice bob ]

5.5.7 使用配置模板

注意
注意:弃用注意事项

配置模板已弃用,将来会被去除。配置模板将由群集脚本取代。请参见 第 5.5.6 节 “使用 crmsh 的群集脚本”

配置模板可为 crmsh 提供即时可用的群集配置。请不要将其与资源模板(如第 6.8.2 节 “使用 crmsh 创建资源模板”中所述)混淆。资源模板只适用于群集,而不适用于 crm 外壳。

配置模板只需稍作更改,即可满足特定用户的需要。每次使用模板创建配置时,都会出现警告消息,提示您哪些可以稍后编辑以供将来自定义。

以下步骤显示了如何创建简单有效的 Apache 配置:

  1. root 用户身份登录,然后启动 crm 交互式外壳:

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

如果知道细节,可以更加简化命令。上述过程可汇总为外壳上的以下命令:

# crm configure template \
   new g-intranet apache params \
   configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"

如果在 crm 内壳中,可使用以下命令:

crm(live)configure template# new intranet apache params \
   configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"

但是,前一条命令仅会从配置模板创建其配置。它不会将其应用或提交到 CIB。

5.5.8 使用阴影配置进行测试

阴影配置可用于测试不同的配置方案。如果创建了多个阴影配置,则可逐一测试这些配置,以查看更改的影响。

一般的流程显示如下:

  1. root 用户身份登录,然后启动 crm 交互式外壳:

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

5.5.9 调试配置更改

将配置更改加载回群集之前,建议使用 ptest 复查更改。使用 ptest 命令可显示提交更改后产生的操作图。需要 graphviz 软件包才能显示这些图。以下示例是一个抄本,添加了监控操作:

# crm configure
crm(live)configure# show fence-bob
primitive fence-bob stonith:apcsmart \
        params hostlist="bob"
crm(live)configure# monitor fence-bob 120m:60s
crm(live)configure# show changed
primitive fence-bob stonith:apcsmart \
        params hostlist="bob" \
        op monitor interval="120m" timeout="60s"
crm(live)configure# ptest
crm(live)configure# commit

5.5.10 群集图表

要输出群集图表,请使用 crm configure graph 命令。它会在当前的窗口上显示当前配置,因此需要配备 X11。

如果您希望使用可缩放矢量图 (SVG),请使用以下命令:

# crm configure graph dot config.svg svg

5.5.11 管理 Corosync 配置

Corosync 是大多数 HA 群集的基础消息交换层。corosync 子命令提供用于编辑和管理 Corosync 配置的命令。

例如,要列出群集的状态,请使用 status

# crm corosync status
Printing ring status.
Local node ID 175704363
RING ID 0
        id      = 10.121.9.43
        status  = ring 0 active with no faults
Quorum information
------------------
Date:             Thu May  8 16:41:56 2014
Quorum provider:  corosync_votequorum
Nodes:            2
Node ID:          175704363
Ring ID:          4032
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           2
Flags:            Quorate

Membership information
----------------------
    Nodeid      Votes Name
 175704363          1 alice.example.com (local)
 175704619          1 bob.example.com

diff 命令会比较所有节点上的 Corosync 配置(如果未另行指定)并列显各节点之间的差异:

# crm corosync diff
--- bob
+++ alice
@@ -46,2 +46,2 @@
-       expected_votes: 2
-       two_node: 1
+       expected_votes: 1
+       two_node: 0

有关细节,请参见https://crmsh.nongnu.org/crm.8.html#cmdhelp_corosync

5.5.12 设置独立于 cib.xml 的口令

如果群集配置包含口令之类的敏感信息,应将其存储在本地文件中。这样的话,这些参数将永远不会记录到或导入支持报告中。

使用 secret 前,请先运行 show 命令了解一下所有资源的概况:

# crm configure show
primitive mydb mysql \
   params replication_user=admin ...

要为上面的 mydb 资源设置口令,请使用以下命令:

# crm resource secret mydb set passwd linux
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]

使用以下命令可以取回保存的密码:

# crm resource secret mydb show passwd
linux

各节点间的参数需要同步;crm resource secret 命令可用于执行此操作。强烈建议仅使用此命令来管理机密参数。

5.6 更多信息

https://crmsh.github.io/

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

https://crmsh.github.io/documentation

提供有关 crm 外壳的若干文档,包括使用 crmsh 完成基本群集设置的 Getting Started 教程,以及 crm 外壳的综合性Manual。后者可在 https://crmsh.github.io/man-2.0/ 上访问。https://crmsh.github.io/start-guide/ 上提供了相关教程。

https://clusterlabs.org/

Pacemaker 主页,Pacemaker 是 SUSE Linux Enterprise High Availability 随附的群集资源管理器。

https://www.clusterlabs.org/pacemaker/doc/

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

  • Pacemaker Explained:包含全面、详细的参考信息。

  • Colocation Explained

  • Ordering Explained