适用于 SUSE Linux Enterprise High Availability Extension 12 SP5

8 配置和管理群集资源(命令行)

摘要

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

本章介绍了命令行工具 crm,并包含此工具的概述以及如何使用模板,主要介绍如何配置和管理群集资源:创建基本和高级类型的资源(组和克隆资源)、配置约束、指定故障转移节点和故障回复节点、配置资源监视以及手动启动、清理、删除和迁移资源。

注意
注意:用户特权

需要足够的特权才能管理群集。crm 命令及其子命令都需要以 root 用户或 CRM 拥有者用户(通常为 hacluster 用户)的身份来运行。

但是,user 选项允许您作为普通(非特权)用户运行 crm 及其子命令,而且必要时能使用 sudo 更改其 ID。例如,在以下命令中,crm 将使用 hacluster 作为特权用户 ID:

root # crm options user hacluster

请注意,您需要将 /etc/sudoers 设置为 sudo 不要求提供密码。

8.1 crmsh - 概述

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

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

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

crm(live/HOSTNAME)

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

crm(live/alice)

8.1.1 获得帮助

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

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

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

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

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

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

    root # crm configure help group

    以下命令的作用相同:

    root # crm help configure group

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

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

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

8.1.2 执行 crmsh 的子命令

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

  • 直接::  将所有子命令连接到 crm 中,按 Enter,您将立即看到输出。例如,输入 crm help ra 可获取有关 ra 子命令(资源代理)的信息。

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

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

    root # crm primitive ipaddr ocf:heartbeat:IPaddr2 params ip=192.168.0.55

    相当于下行:

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

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

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

  • 作为内部外壳交互:  输入 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 之类的命令。

注意
注意:管理和配置子命令之间的区别

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

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

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

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

root # 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 资源代理。

8.1.4 使用 crmsh 的外壳脚本

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

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

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

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

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

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

8.1.5 使用 crmsh 的群集脚本

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

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

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

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

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

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

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

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

8.1.5.1 使用

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

root # crm script list

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

root # 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 的输出包含标题、简要说明和过程。每个过程分为一系列按给定顺序执行的步骤。

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

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

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

8.1.5.2 校验和运行群集脚本

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

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

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

        mailx

2. Configure cluster resources

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

root # 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 检查您的资源是否已集成到群集中:

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

8.1.6 使用配置模板

注意
注意:弃用通告

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

配置模板可为 crmsh 提供即时可用的群集配置。请不要将其与资源模板(如第 8.4.3 节 “创建资源模板”中所述)混淆。资源模板只适用于群集,而不适用于 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。

8.1.7 使用阴影配置进行测试

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

一般的流程显示如下:

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

8.1.8 调试配置更改

将配置更改装载回群集之前,建议使用 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

8.1.9 群集图表

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

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

root # crm configure graph dot config.svg svg

8.2 管理 Corosync 配置

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

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

root # 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 配置(如果未另行指定)并打印出各自的差异:

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

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

8.3 配置全局群集选项

全局群集选项控制群集在遇到特定情况时的行为方式。通常可保留预定义值。但为了使群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:

过程 8.1︰ 使用 crm 修改全局群集选项
  1. root 用户身份登录,然后启动 crm 工具:

    root # crm configure
  2. 使用以下命令可以仅为两个节点的群集设置选项:

    crm(live)configure# property no-quorum-policy=stop
    crm(live)configure# property stonith-enabled=true
    重要
    重要:不支持无 STONITH 的配置

    不支持无 STONITH 资源的群集。

  3. 显示更改:

    crm(live)configure# show
    property $id="cib-bootstrap-options" \
       dc-version="1.1.1-530add2a3721a0ecccb24660a97dbfdaa3e68f51" \
       cluster-infrastructure="corosync" \
       expected-quorum-votes="2" \
       no-quorum-policy="stop" \
       stonith-enabled="true"
  4. 提交更改并退出:

    crm(live)configure# commit
    crm(live)configure# exit

8.4 配置群集资源

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

有关可创建的资源类型的概述,请参见第 6.3.3 节 “资源类型”

8.4.1 从文件装载群集资源

可从本地文件或网络 URL 装载部分或全部配置。可定义三种不同方法:

replace

此选项会将当前配置替换为新的源配置。

update

此选项会尝试导入源配置。它会向当前配置添加新项目或更新现有项目。

push

此选项会将内容从来源导入到当前配置中(与 update 相同)。不过,它会去除在新配置中不可用的对象。

要从文件 mycluster-config.txt 装载新配置,请使用以下语法:

root # crm configure load push mycluster-config.txt

8.4.2 创建群集资源

有三种 RA(资源代理)类型可用于群集(有关背景信息,请参见第 6.3.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

8.4.3 创建资源模板

如果希望使用类似的配置创建多个资源,则资源模板可以简化此项任务。有关一些基本背景信息,另请参见第 6.5.3 节 “资源模板和约束”。不要将它们与第 8.1.6 节 “使用配置模板”中的常规模板相混淆。使用 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

资源模板可以在约束中引用,以表示所有原始资源都派生自该模板。这有助于生成更加清晰明了的群集配置。除了位置约束外,允许在所有约束中进行资源模板引用。共置约束不能包含多次模板引用。

8.4.4 创建 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

8.4.5 配置资源约束

配置所有资源只是任务的一部分。即使群集了解所有需要的资源,它仍然不能正确处理它们。例如,尽量不要在 DRBD 的从属节点上装入文件系统(事实上,这将导致 DRBD 出现故障)。定义约束以使这些信息可用于群集。

有关约束的更多信息,请参见第 6.5 节 “资源约束”

8.4.5.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 vip2 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

8.4.5.2 共置约束

colocation 命令用于定义哪些资源应在相同主机上运行,哪些资源应在不同主机上运行。

只能设置 +inf 或 -inf 的分数,定义必须始终或不得在相同节点上运行的资源。还可以使用有限分数。在这种情况下,共置将称为建议,群集可决定不遵循它们,从而在出现冲突时不停止其他资源。

例如,要始终在同一个主机上运行 ID 为 filesystem_resourcenfs_group 的两个资源,可使用以下约束:

crm(live)configure# colocation nfs_on_filesystem inf: nfs_group filesystem_resource

对于主从属配置,除在本地运行资源以外,还有必要了解当前节点是否为主节点。

8.4.5.3 共置没有依赖性的资源集

有时,将一组资源放置在同一个节点上(定义共置约束)会很有用,但前提是这些资源之间不存在硬依赖性。

如果您想要将多个资源放置在同一个节点上,但不想疲于应对每一个资源的故障,那么,您可以使用命令 weak-bond

root # crm configure assist weak-bond RES1 RES2

weak-bond 的实施将使用给定的资源自动创建虚设资源和共置约束。

8.4.5.4 顺序约束

order 命令定义操作顺序。

有时必需提供资源操作顺序。例如,在设备可用于系统之前,您不能装入文件系统。使用顺序约束可在另一个资源满足某个特殊条件之前或之后启动或停止某项服务,如已启动、已停止或已升级到主资源。

crm 外壳中使用以下命令配置顺序约束:

crm(live)configure# order nfs_after_filesystem mandatory: filesystem_resource nfs_group

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

8.4.6 指定资源故障转移节点

要确定资源故障转移,可使用元属性 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,将不会迁移资源。

有关概述,请参见第 6.5.4 节 “故障转移节点”

8.4.7 指定资源故障回复节点(资源粘性)

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

有关概述,请参见第 6.5.5 节 “故障回复节点”

8.4.8 根据负载影响配置资源放置

某些资源可能具有特定的容量要求,如最低内存量。如果无法满足要求,资源可能无法完全启动或运行时性能下降。

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

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

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

  3. 资源放置整体策略。

有关参数的详细背景信息和配置示例,请参见第 6.5.6 节 “根据资源负载影响放置资源”

要配置资源要求和节点提供的容量,请使用利用率属性。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。在某些情况下,某些代理(例如 VirtualDomain)将自行更新利用率。

在下例中,我们假定您已有群集节点和资源的基本配置,现在想要配置特定节点提供的容量以及特定资源需要的容量。

过程 8.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

    这会使资源消耗 NODE_1 的 4096 个内存单元以及 4 个 CPU 单元。

  4. 使用 property 命令配置放置策略:

    crm(live)configure# property ...

    可用值如下:

    default(默认值)

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

    utilization

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

    minimal

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

    balanced

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

    注意
    注意:配置资源优先级

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

  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 charlie 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 中的一个,由于它们的优先级相同,结果不确定。要解决这种不确定性,需要为其中一个资源设置更高的优先级。

8.4.9 配置资源监视

要监视资源,有两种可能性:使用 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

有关概述,请参见第 6.4 节 “资源监视”

8.4.10 配置群集资源组

群集的一个最常见元素是需要放置在一起的一组资源。按顺序启动,并按相反顺序停止。为了简化此配置,我们支持组的概念。以下示例创建了两个原始资源(一个 IP 地址和一个电子邮件资源):

  1. 以系统管理员的身份运行 crm 命令。提示符更改为 crm(live)

  2. 配置这两个原始资源:

    crm(live)# configure
    crm(live)configure# primitive Public-IP ocf:heartbeat:IPaddr \
       params ip=1.2.3.4 id= Public-IP
    crm(live)configure# primitive Email systemd:postfix \
       params id=Email
  3. 以正确顺序按其相关标识符对原始资源进行分组:

    crm(live)configure# group g-mailsvc Public-IP Email

要更改组成员的顺序,请使用 configure 子命令中的 modgroup 命令。使用以下命令可将原来的 Email 移到 Public-IP 前面。(只供展示功能之用):

crm(live)configure# modgroup g-mailsvc add Email before Public-IP

要从组中去除某个资源(例如 Email),请使用以下命令:

crm(live)configure# modgroup g-mailsvc remove Email

有关概述,请参见第 6.3.5.1 节 “组”

8.4.11 配置克隆资源

最初将克隆构想成便于启动一个 IP 地址的 N 个实例并使它们分布在群集各处以保持负载平衡的一种方法。它们可用于其他一些用途,包括与 DLM 集成、屏蔽子系统和 OCFS2。您可以克隆资源代理支持的任何资源。

要了解有关克隆资源的更多信息,请参见第 6.3.5.2 节 “克隆资源”

8.4.11.1 创建匿名克隆资源

要创建匿名克隆资源,首先要创建一个原始资源,然后使用 clone 命令来引用它。执行下列操作:

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

    root # crm configure
  2. 配置原始资源,例如:

    crm(live)configure# primitive Apache ocf:heartbeat:apache
  3. 克隆原始资源:

    crm(live)configure# clone cl-apache Apache

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

8.5 管理群集资源

除可用于配置群集资源外,crm 工具还可用于管理现有资源。以下小节进行了概述。

8.5.1 显示群集资源

当管理群集时,crm configure show 命令会列出诸如群集配置、全局选项、原始资源及其他的当前 CIB 对象:

root # crm configure show
node 178326192: alice
node 178326448: bob
primitive admin_addr IPaddr2 \
        params ip=192.168.2.1 \
        op monitor interval=10 timeout=20
primitive stonith-sbd stonith:external/sbd \
        params pcmk_delay_max=30
property cib-bootstrap-options: \
        have-watchdog=true \
        dc-version=1.1.15-17.1-e174ec8 \
        cluster-infrastructure=corosync \
        cluster-name=hacluster \
        stonith-enabled=true \
        placement-strategy=balanced \
        standby-mode=true
rsc_defaults rsc-options: \
        resource-stickiness=1 \
        migration-threshold=3
op_defaults op-options: \
        timeout=600 \
        record-pending=true

如果您有许多资源,show 的输出会十分冗长。为限制输出,请使用资源名称。例如,如果只想列出原始资源 admin_addr 的属性,请将资源名称追加到 show 后:

root # crm configure show admin_addr
primitive admin_addr IPaddr2 \
        params ip=192.168.2.1 \
        op monitor interval=10 timeout=20

但在某些情况下,您可能希望更精确地限制特定资源的输出。那么,您可以使用过滤器。过滤器可将输出限定到特定组件。例如,要想仅列出节点,可使用 type:node

root # crm configure show type:node
node 178326192: alice
node 178326448: bob

如果您还对原始资源感兴趣,请使用 or 运算符:

root # crm configure show type:node or type:primitive
node 178326192: alice
node 178326448: bob
primitive admin_addr IPaddr2 \
        params ip=192.168.2.1 \
        op monitor interval=10 timeout=20
primitive stonith-sbd stonith:external/sbd \
        params pcmk_delay_max=30

此外,要搜索以特定字符串开头的对象,请使用以下表示法:

root # crm configure show type:primitive and and 'admin*'
primitive admin_addr IPaddr2 \
        params ip=192.168.2.1 \
        op monitor interval=10 timeout=20

要列出所有可用类型,请输入 crm configure show type: 并按 →| 键。Bash 补全会为您提供所有类型的列表。

8.5.2 启动新的群集资源

要启动新的群集资源,您需要相应的标识符。按如下所示继续:

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

    root # crm
  2. 切换到资源级别:

    crm(live)# resource
  3. 使用 start 启动资源,然后按 →| 键显示所有已知资源:

    crm(live)resource# start ID

8.5.3 清理资源

如果资源失败,它会自动重启动,但每次失败都会增加资源的失败计数。如果为资源设置了 migration-threshold,当故障计数达到该迁移阈值时,将不再允许节点运行该资源。

  1. 打开外壳并以 root 用户身份登录。

  2. 获取所有资源的列表。

    root # crm resource list
      ...
    Resource Group: dlm-clvm:1
             dlm:1  (ocf:pacemaker:controld) Started
             clvm:1 (ocf:heartbeat:clvm) Started
  3. 例如,要清理资源 dlm,请执行以下操作:

    root # crm resource cleanup dlm

8.5.4 删除群集资源

请按如下操作以删除群集资源:

  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

8.5.5 迁移群集资源

虽然资源已配置为在发生硬件或软件故障时自动故障转移(或迁移)到群集的其他节点,但您也可以使用 Hawk2 或命令行将资源手动迁移到其他节点。

对此任务使用 migrate 命令。例如,要将 ipaddress1 资源迁移到名为 bob 的群集节点,请使用以下命令:

root # crm resource
crm(live)resource# migrate ipaddress1 bob

8.5.6 分组/标记资源

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

root # crm configure tag databases: db1 db2 db3

这样,只需使用一条命令就能启动所有这些资源:

root # crm resource start databases

同样,也可以一次性停止所有这些资源:

root # crm resource stop databases

8.5.7 获取运行状态

可以使用所谓的脚本来显示群集或节点的运行状态。脚本可以执行不同的任务,并不局限于显示运行状态。不过,本节重点介绍如何获取运行状态。

要获取有关 health 命令的所有细节,请使用 describe

root # crm script describe health

该命令将显示所有参数及其默认值的说明和列表。要执行脚本,请使用 run

root # crm script run health

如果您希望只运行整套命令中的一个步骤,可以使用 describe 命令列出步骤类别中的所有可用步骤。

例如,以下命令将执行 health 命令的第一个步骤。将在 health.json 文件中储存输出以供做进一步调查:

root # crm script run health
    statefile='health.json'

您也可以使用 crm cluster health 运行以上命令。

有关脚本的更多信息,请参见 http://crmsh.github.io/scripts/

8.6 设置独立于 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 命令可以帮助您处理好同步问题。强烈建议仅使用此命令管理机密参数。

8.7 检索历史记录信息

调查群集的历史记录是一项复杂的任务。为简化此任务,crmsh 包含了 history 命令及其子命令。假定已正确配置 SSH。

每个群集都会移动状态、迁移资源或启动重要进程。这些操作均可通过 history 子命令进行检索。

默认情况下,所有 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 1

级别数字越高,报告就越详细。默认值为 0(零)。

设置上述参数后,使用 log 显示日志消息。

要显示上次转换操作,请使用以下命令:

crm(live)history# transition -1
INFO: fetching new logs, please wait ...

此命令会获取日志并运行 dotty(从 graphviz 包)以显示转换图。外壳会打开日志文件,您在其中可以使用 光标键浏览内容。

如果希望不要打开转换图,请使用 nograph 选项:

crm(live)history# transition -1 nograph

8.8 更多信息

打印此页