
要配置和管理群集资源,可以使用 crm 外壳 (crmsh) 命令行实用程序,或者基于 Web 的用户界面 HA Web Konsole (Hawk)。
本章介绍了命令行工具 crm,并包含此工具的概述以及如何使用模板,主要介绍如何配置和管理群集资源:创建基本和高级类型的资源(组和克隆资源)、配置约束、指定故障转移节点和故障回复节点、配置资源监视以及手动启动、清理、删除和迁移资源。
需要足够的特权才能管理群集。crm 命令及其子命令都需要以 root 用户或 CRM 拥有者用户(通常为 hacluster 用户)的身份来运行。
但是,user 选项允许您作为普通(非特权)用户运行 crm 及其子命令,而且必要时能使用 sudo 更改其 ID。例如,在以下命令中,crm 将使用 hacluster 作为特权用户 ID:
root #crmoptions user hacluster
请注意,您需要将 /etc/sudoers 设置为 sudo 不要求提供密码。
crm 命令有多个子命令,这些子命令用于管理资源、CIB、节点和资源代理等。它提供了全面的帮助系统,并嵌入了示例。所有示例都遵循附录 B 中所述的命名约定。
为了方便阅读所有代码和示例,本章使用了以下符号来区分外壳提示符和交互式 crm 提示符:
针对 root 用户的外壳提示符:
root # 交互式 crmsh 提示符(在终端支持彩色的情况下将以绿色显示):
crm(live)# 可通过以下方式之一访问帮助:
输出 crm 及其命令行选项的用法:
root #crm--help
列出所有可用的命令:
root #crmhelp
访问其他帮助部分,而不只是命令参考:
root #crmhelp topics
查看 configure 子命令的完整帮助文本:
root #crmconfigure help
打印 configure 子命令的语法、用法及示例:
root #crmconfigure help group
也可能是:
root #crmhelp configure group
几乎所有 help 子命令(请不要与 --help 选项混淆)的输出都会打开文本编辑器。此文本编辑器允许您向上/向下滚动,以便更加方便地阅读帮助文本。要退出文本编辑器,请按 Q 键。
crmsh 不仅为交互式外壳提供 Tab 键补全,还全面支持在 Bash 中直接使用此功能。例如,键入 crm help config→| 会补全文字(就像在交互式外壳中一样)。
crm 命令本身可按以下方式使用:
直接.
将所有子命令连接到 crm 中,按 Enter,您将立即看到输出。例如,输入 crm help ra 可获取有关 ra 子命令(资源代理)的信息。
作为 crm 外壳脚本.
在脚本中使用 crm 及其子命令。这可通过以下两种方式实现:
root #crm-f script.cliroot #crm< script.cli
脚本可包含任何 crm 命令。例如:
# A small script file for crmstatusnodelist
以哈希符号 (#) 开头的所有行都是注释,可忽略。如果行过长,可在结尾处插入反斜杠 (\),然后在下一行继续。建议缩进属于特定子命令的行以便于阅读。
作为内部外壳交互.
输入 crm 以进入内壳。提示更改为 crm(live)。使用 help 可获取可用子命令的概述。由于内壳具有不同级别的子命令,您可以键入一个子命令然后按 Enter“进入”相应的级别。
例如,如果输入 resource,则进入资源管理级别。提示符将更改为 crm(live)resource#。如果要退出内壳,可使用命令 quit、bye 或 exit。如果需要返回上一个级别,可使用 back、up、end 或 cd。
您可以键入 crm 和相应的子命令(不含任何选项)来直接输入级别,然后按 Enter。
内壳还支持使用 Tab 键完成子命令和资源。输入命令的开头,按 →| 和 crm 完成相应对象。
除了前面说明的方法外,crmsh 还支持执行同步命令。使用 -w 选项可以激活该命令。 如果已启动不带 -w 选项的 crm,则可以稍后通过将用户自选设置的 wait 设为 yes (options wait yes) 来启用它。如果此选项已启用,则 crm 将会等到事务完成为止。 事务一经启用,就会打印出点以指示进度。同步命令执行仅适用于 resource start 之类的命令。
crm 工具有管理功能(子命令 resource 和 node),可用于配置(cib 和 configure)。
以下小节概述了 crm 工具的一些重要方面。
由于在群集配置中一直需要处理资源代理,crm 工具包含了 ra 命令。使用该命令可以显示有关资源代理的信息并对其进行管理(如需其他信息,另请参见第 4.2.2 节 “支持的资源代理类”):
root #crmracrm(live)ra#
命令 classes 可列出所有类和提供程序:
crm(live)ra#classeslsb ocf / heartbeat linbit lvm2 ocfs2 pacemaker service stonith systemd
要获取某个类(和提供程序)的所有可用资源的概述,可使用 list 命令:
crm(live)ra#listocf 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#infoocf:drbd:linbit 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 资源代理。
配置模板可为 crmsh 提供即时可用的群集配置。请不要将其与资源模板(如第 6.4.2 节 “创建资源模板”中所述)混淆。资源模板只适用于群集,而不适用于 crm 外壳。
配置模板只需稍作更改,即可满足特定用户的需要。每次使用模板创建配置时,都会出现警告消息,提示您哪些可以稍后编辑以供将来自定义。
以下步骤显示了如何创建简单有效的 Apache 配置:
以 root 用户身份登录,然后启动 crm 交互式外壳:
root #crmconfigure
从配置模板创建一个新配置:
切换到 template 子命令:
crm(live)configure#template
列出可用的配置模板:
crm(live)configure template#listtemplates gfs2-base filesystem virtual-ip apache clvm ocfs2 gfs2
确定需要的配置模板。由于我们需要 Apache 配置,因此选择了 apache 模板并将其命名为 g-intranet:
crm(live)configure template#newg-intranet apache INFO: pulling in template apache INFO: pulling in template virtual-ip
定义参数:
列出您创建的配置:
crm(live)configure template#listg-intranet
显示需要由您填充的最少的必要更改:
crm(live)configure template#showERROR: 23: required parameter ip not set ERROR: 61: required parameter id not set ERROR: 65: required parameter configfile not set
调用首选的文本编辑器,填写显示为错误(如步骤 3.b 中所示)的所有行:
crm(live)configure template#edit
显示配置并检查配置是否有效(粗体文本取决于您在步骤 3.c 中进入的配置):
crm(live)configure template#showprimitive 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
应用配置:
crm(live)configure template#applycrm(live)configure#cd ..crm(live)configure#show
将更改提交到 CIB:
crm(live)configure#commit
如果知道细节,可以更加简化命令。上述过程可汇总为外壳上的以下命令:
root #crmconfigure template \ new g-intranet apache params \ configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
如果在 crm 内壳中,可使用以下命令:
crm(live)configure template#newintranet apache params \ configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
但是,前一条命令仅会从配置模板创建其配置。它不会将其应用或提交到 CIB。
阴影配置可用于测试不同的配置方案。如果创建了多个阴影配置,则可逐一测试这些配置,以查看更改的影响。
一般的流程显示如下:
以 root 用户身份登录,然后启动 crm 交互式外壳:
root #crmconfigure
创建新的阴影配置:
crm(live)configure#cibnew myNewConfig INFO: myNewConfig shadow CIB created
如果省略阴影 CIB 的名称,则会创建临时名称 @tmp@。
如果要将当前的活动配置复制到阴影配置中,可使用以下命令,否则请跳过此步骤:
crm(myNewConfig)# cib reset myNewConfig使用上面的命令便于稍后修改现有资源。
照常进行更改。创建阴影配置后,会应用所有更改。要保存所有更改,请使用以下命令:
crm(myNewConfig)# commit如果再次需要活动群集配置,可使用以下命令切换回此配置:
crm(myNewConfig)configure#cibuse livecrm(live)#
将配置更改装载回群集之前,建议使用 ptest 复查更改。使用 ptest 命令可显示提交更改后产生的操作图。需要 graphviz 包才能显示这些图。以下示例是一个抄本,添加了监视操作:
root #crmconfigurecrm(live)configure#showfence-bob primitive fence-bob stonith:apcsmart \ params hostlist="bob"crm(live)configure#monitorfence-bob 120m:60scrm(live)configure#showchanged primitive fence-bob stonith:apcsmart \ params hostlist="bob" \ op monitor interval="120m" timeout="60s"crm(live)configure#ptestcrm(live)configure#commit
要输出如图 5.2 “Hawk - 群集图表”中所示的群集图表,请使用命令 crm configure graph。它会在当前的窗口上显示当前配置,因此需要配备 X11。
如果您希望使用可缩放矢量图 (SVG),请使用以下命令:
root #crmconfigure graph dot config.svg svg
Corosync 是大多数 HA 群集的基础讯息交换层。corosync 子命令提供了用于编辑和管理 Corosync 配置的命令。
例如,要列出群集的状态,请使用 status:
root #crmcorosync 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 #crmcorosync 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。
全局群集选项控制群集在遇到特定情况时的行为方式。通常可保留预定义值。但为了使群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:
crm 修改全局群集选项 #
以 root 用户身份登录,然后启动 crm 工具:
root #crmconfigure
使用以下命令可以仅为两个节点的群集设置选项:
crm(live)configure#propertyno-quorum-policy=ignorecrm(live)configure#propertystonith-enabled=true
不支持无 STONITH 资源的群集。
显示更改:
crm(live)configure#showproperty $id="cib-bootstrap-options" \ dc-version="1.1.1-530add2a3721a0ecccb24660a97dbfdaa3e68f51" \ cluster-infrastructure="corosync" \ expected-quorum-votes="2" \ no-quorum-policy="ignore" \ stonith-enabled="true"
提交更改并退出:
crm(live)configure#commitcrm(live)configure#exit
作为群集管理员,您需要在群集中为服务器上运行的每个资源或应用程序创建群集资源。群集资源可以包括网站、电子邮件服务器、数据库、文件系统、虚拟机和任何其他基于服务器的应用程序或在任意时间对用户都可用的服务。
有关可创建的资源类型的概述,请参见第 4.2.3 节 “资源类型”。
有三种 RA(资源代理)类型可用于群集(有关背景信息,请参见第 4.2.2 节 “支持的资源代理类”)。要将新资源添加到群集,请按如下操作:
以 root 用户身份登录,然后启动 crm 工具:
root #crmconfigure
配置原始 IP 地址:
crm(live)configure#primitivemyIP ocf:heartbeat:IPaddr \ params ip=127.0.0.99 op monitor interval=60s
上一命令配置了名称为 myIP 的“原始资源”。需要选择一个类(此处为 ocf)、提供程序 (heartbeat) 和类型 (IPaddr)。此外,此原始资源还需要其他参数,如 IP 地址。根据设置更改地址。
显示您所做的更改并进行复查:
crm(live)configure#show
提交更改使其生效:
crm(live)configure#commit
如果希望使用类似的配置创建多个资源,则资源模板可以简化此项任务。有关一些基本背景信息,另请参见第 4.4.3 节 “资源模板和约束”。不要将它们与第 6.1.4 节 “使用配置模板”中的“常规”模板相混淆。使用 rsc_template 命令可以熟悉其语法:
root #crmconfigure 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_templateBigVM 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#primitiveMyVM1 @BigVM \ params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1"
新的原始资源 MyVM1 将继承 BigVM 资源模板中的所有配置。 例如,上述两者的等效配置有:
crm(live)configure#primitiveMyVM1 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#primitiveMyVM2 @BigVM \ params xmfile="/etc/xen/shared-vm/MyVM2" name="MyVM2" \ op monitor timeout=120s interval=30s
资源模板可以在约束中引用,以表示所有原始资源都派生自该模板。这有助于生成更加清晰明了的群集配置。除了位置约束外,允许在所有约束中进行资源模板引用。共置约束不能包含多次模板引用。
就 crm 而言,STONITH 设备只是另一种资源。要创建 STONITH 资源,请执行以下操作:
以 root 用户身份登录,然后启动 crm 交互式外壳:
root #crmconfigure
使用以下命令获取所有 STONITH 类型的列表:
crm(live)#ralist stonith apcmaster apcmastersnmp apcsmart baytech bladehpi cyclades drac3 external/drac5 external/dracmc-telnet external/hetzner external/hmchttp external/ibmrsa external/ibmrsa-telnet external/ipmi external/ippower9258 external/kdumpcheck external/libvirt external/nut external/rackpdu external/riloe external/sbd external/vcenter external/vmware external/xen0 external/xen0-ha fence_legacy ibmhmc ipmilan meatware nw_rpc100s rcd_serial rps10 suicide wti_mpc wti_nps
从以上列表中选择 STONITH 类型并查看可用的选项列表。使用以下命令:
crm(live)#rainfo 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. ...
使用 stonith 类(您在步骤 3中选择的类型)和相应的参数(如果需要)创建 STONITH 资源,例如:
crm(live)#configurecrm(live)configure#primitivemy-stonith stonith:external/ipmi \ params hostname="alice" ipaddr="192.168.1.221" \ userid="admin" passwd="secret" \ op monitor interval=60m timeout=120s
配置所有资源只是任务的一部分。即使群集了解所有需要的资源,它仍然不能正确处理它们。例如,尽量不要在 DRBD 的从属节点上装入文件系统(事实上,这将导致 DRBD 出现故障)。定义约束以使这些信息可用于群集。
有关约束的更多信息,请参见第 4.4 节 “资源约束”。
location 命令定义资源可以、不可以或首选在哪些节点上运行。
每个资源可多次添加此类约束。对于给定资源,将评估所有 location 约束。下面是个简单的示例,它将首选在名为 alice 的节点上运行资源 fs1 的值设置为 100:
crm(live)configure#locationloc-fs1 fs1 100: alice
另一个示例是使用 pingd 的位置:
crm(live)configure#primitivepingd pingd \ params name=pingd dampen=5s multiplier=100 host_list="r1 r2"crm(live)configure#locationloc-node_pref internal_www \ rule 50: #uname eq alice \ rule pingd: defined pingd
位置约束的另一个用例是将基元资源分组为资源集。例如,如果多个资源依赖于 ping 属性来进行网络连接,则此功能会十分有用。以前,需要在配置中复制 -inf/ping 规则数次,因此不必要地增加了复杂性。
以下示例将创建资源集
loc-alice,该资源集引用虚拟 IP 地址
vip1 和 vip2:
crm(live)configure#primitivevip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5crm(live)configure#primitivevip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.6crm(live)configure#locationloc-alice { vip1 vip2 } inf: alice
在某些情况下,为 location 命令使用资源模式会有效且方便得多。资源模式是用两个斜杠括起的正则表达式。例如,可以使用以下命令全部匹配上述虚拟 IP 地址:
crm(live)configure#locationloc-alice /vip.*/ inf: alice
colocation 命令用于定义哪些资源应在相同主机上运行,哪些资源应在不同主机上运行。
只能设置 +inf 或 -inf 的分数,定义必须始终或不得在相同节点上运行的资源。还可以使用有限分数。在这种情况下,共置将称为建议,群集可决定不遵循它们,从而在出现冲突时不停止其他资源。
例如,要始终在同一个主机上运行 ID 为 filesystem_resource 和 nfs_group 的两个资源,可使用以下约束:
crm(live)configure#colocationnfs_on_filesystem inf: nfs_group filesystem_resource
对于主从属配置,除在本地运行资源以外,还有必要了解当前节点是否为主节点。
有时,将一组资源放置在同一个节点上(定义共置约束)会很有用,但前提是这些资源之间不存在硬依赖性。
如果您想要将多个资源放置在同一个节点上,但不想疲于应对每一个资源的故障,那么,您可以使用命令 weak-bond。
root #crmconfigure assist weak-bond RES1 RES2
weak-bond 的实施将使用给定的资源自动创建虚设资源和共置约束。
order 命令定义操作顺序。
有时必需提供资源操作顺序。例如,在设备可用于系统之前,您不能装入文件系统。使用顺序约束可在另一个资源满足某个特殊条件之前或之后启动或停止某项服务,如已启动、已停止或已升级到主资源。
在 crm 外壳中使用以下命令配置顺序约束:
crm(live)configure#ordernfs_after_filesystem mandatory: filesystem_resource nfs_group
本节中使用的示例必须与其他约束结合使用。其中最基本的就是让所有资源与 DRBD 资源的主资源在同一台计算机上运行。在启动其他资源前,DRBD 资源必须是主资源。在 DRBD 设备不是主资源时尝试装入 DRBD 只会失败。必须实现以下约束:
文件系统必须始终与 DRBD 资源的主资源位于同一节点上。
crm(live)configure#colocationfilesystem_on_master inf: \ filesystem_resource drbd_resource:Master
NFS 服务器及 IP 地址必须与文件系统位于相同的节点上。
crm(live)configure#colocationnfs_with_fs inf: \ nfs_group filesystem_resource
NFS 服务器及 IP 地址在装入文件系统后启动:
crm(live)configure#ordernfs_second mandatory: \ filesystem_resource:start nfs_group
必须在 DRBD 资源提升为节点上的主资源后才能在此节点上装入文件系统。
crm(live)configure#orderdrbd_first inf: \ drbd_resource:promote filesystem_resource:start
要确定资源故障转移,可使用元属性 migration-threshold。如果所有节点上的故障计数超过 migration-threshold,资源将处于停止状态。例如:
crm(live)configure#locationrsc1-alice rsc1 100: alice
通常,rsc1 首选在 alice 上运行。如果失败,将检查 migration-threshold 并与将它与故障计数进行比较。如果故障计数 >= migration-threshold,则会将该资源迁移到具有下一个最佳自选设置的节点。
根据 start-failure-is-fatal 选项,启动失败会将失败计数设置为 inf。停止故障可导致屏蔽。如果未定义 STONITH,将不会迁移资源。
有关概述,请参见第 4.4.4 节 “故障转移节点”。
当原始节点恢复联机并位于群集中时,资源可能会故障回复到该节点。如果要防止资源故障回复到之前运行的节点,或者想为该资源指定故障回复到的其他节点,请更改其 resource stickiness 值。可以在创建资源时指定资源粘性或稍后指定。
有关概述,请参见第 4.4.5 节 “故障回复节点”。
某些资源可能具有特定的容量要求,如最低内存量。如果无法满足要求,资源可能无法完全启动或运行时性能下降。
要考虑此情况,可使用 High Availability Extension 指定以下参数:
特定节点提供的容量。
特定资源需要的容量。
资源放置整体策略。
有关参数的详细背景信息和配置示例,请参见第 4.4.6 节 “根据资源负载影响放置资源”。
要配置资源要求和节点提供的容量,请使用利用率属性。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。在某些情况下,某些代理(例如 VirtualDomain)将自行更新利用率。
在下例中,我们假定您已有群集节点和资源的基本配置,现在想要配置特定节点提供的容量以及特定资源需要的容量。
crm 添加或修改利用率属性 #
以 root 用户身份登录,然后启动 crm 交互式外壳:
root #crmconfigure
要指定节点提供的容量,请使用以下命令并将占位符 NODE_1 替换为节点名称:
crm(live)configure#nodeNODE_1 utilization memory=16384 cpu=8
上例中的这些值将假定 NODE_1 向资源提供 16 GB 内存和 8 个 CPU 核心。
要指定资源需要的容量,请使用:
crm(live)configure#primitivexen1 ocf:heartbeat:Xen ... \ utilization memory=4096 cpu=4
这会使资源消耗 nodeA 的 4096 个内存单元以及 4 个 CPU 单元。
使用 property 命令配置放置策略:
crm(live)configure#property...
可用值如下:
default(默认值)不考虑利用率值。根据位置得分分配资源。如果分数相等,资源将均匀分布在节点中。
utilization
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。但仍会根据分配给节点的资源数执行负载平衡。
minimal
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试将资源集中到尽可能少的节点上(以节省其余节点上的能耗)。
balanced
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试均匀分布资源,从而优化资源性能。
可用的放置策略是最佳方法 - 它们不使用复杂的启发式解析程序即可始终实现最佳分配结果。确保正确设置资源优先级,以便首选调度最重要的资源。
退出 crmsh 之前提交更改:
crm(live)configure#commit
以下示例演示了配有四台虚拟机、节点数相等的三节点群集:
crm(live)configure#nodealice utilization memory="4000"crm(live)configure#nodebob utilization memory="4000"crm(live)configure#nodecharly utilization memory="4000"crm(live)configure#primitivexenA ocf:heartbeat:Xen \ utilization memory="3500" meta priority="10"crm(live)configure#primitivexenB ocf:heartbeat:Xen \ utilization memory="2000" meta priority="1"crm(live)configure#primitivexenC ocf:heartbeat:Xen \ utilization memory="2000" meta priority="1"crm(live)configure#primitivexenD ocf:heartbeat:Xen \ utilization memory="1000" meta priority="5"crm(live)configure#propertyplacement-strategy="minimal"
如果三个节点都处于正常状态,那么 xenA 将首先放置到一个节点上,然后是 xenD。xenB 和 xenC 将分配在一起或者其中一个与 xenD 分配在一起。
如果一个节点出现故障,可用的总内存将不足以托管所有资源。将确保分配 xenA,xenD 也同样如此。但是,只能再分配 xenB 和 xenC 中的一个,由于它们的优先级相同,结果不确定。要解决这种不确定性,需要为其中一个资源设置更高的优先级。
要监视资源,有两种可能性:使用 op 关键字或 monitor 命令定义监视操作。以下示例使用 op 关键字配置 Apache 资源并且每 60 分钟监视一次:
crm(live)configure#primitiveapache apache \ params ... \ op monitor interval=60s timeout=30s
同样也可以使用以下方式来实现:
crm(live)configure#primitiveapache apache \ params ...crm(live)configure#monitorapache 60s:30s
有关概述,请参见第 4.3 节 “资源监视”。
群集的一个最常见元素是需要放置在一起的一组资源。按顺序启动,并按相反顺序停止。为了简化此配置,我们支持组的概念。以下示例创建了两个原始资源(一个 IP 地址和一个电子邮件资源):
以系统管理员的身份运行 crm 命令。提示符更改为 crm(live)。
配置这两个原始资源:
crm(live)#configurecrm(live)configure#primitivePublic-IP ocf:IPaddr:heartbeat \ params ip=1.2.3.4 id=p.public-ipcrm(live)configure#primitiveEmail lsb:exim \ params id=p.lsb-exim
以正确顺序按其相关标识符对原始资源进行分组:
crm(live)configure#groupg-shortcut Public-IP Email
要更改组成员的顺序,请使用 configure 子命令中的 modgroup 命令。使用以下命令可将原来的 Email 移到 Public-IP 前面。(只供展示功能之用):
crm(live)configure#modgroupg-shortcut add p.lsb-exim before p.public-ip
如果您要从某个组去除资源(例如 Email),则使用以下命令:
crm(live)configure#modgroupg-shortcut remove p.lsb-exim
有关概述,请参见第 4.2.5.1 节 “组”。
最初将克隆构想成便于启动一个 IP 地址的 N 个实例并使它们分布在群集各处以保持负载平衡的一种方法。它们可用于其他一些用途,包括与 DLM 集成、屏蔽子系统和 OCFS2。您可以克隆资源代理支持的任何资源。
要了解有关克隆资源的更多信息,请参见第 4.2.5.2 节 “克隆资源”。
要创建匿名克隆资源,首先要创建一个原始资源,然后使用 clone 命令来引用它。执行下列操作:
以 root 用户身份登录,然后启动 crm 交互式外壳:
root #crmconfigure
配置原始资源,例如:
crm(live)configure#primitiveApache lsb:apache
克隆原始资源:
crm(live)configure#clonecl-apache Apache
要创建有状态的克隆资源,首先要创建一个基元资源,然后再创建多状态资源。多状态资源必须至少支持升级和降级操作。
以 root 用户身份登录,然后启动 crm 交互式外壳:
root #crmconfigure
配置原始资源。必要时更改时间间隔:
crm(live)configure#primitivemy-rsc ocf:myCorp:myAppl \ op monitor interval=60 \ op monitor interval=61 role=Master
创建多状态资源:
crm(live)configure#msms-rsc my-rsc
除可用于配置群集资源外,crm 工具还可用于管理现有资源。以下小节进行了概述。
要启动新的群集资源,您需要相应的标识符。按如下所示继续:
以 root 用户身份登录,然后启动 crm 交互式外壳:
root #crm
切换到资源级别:
crm(live)#resource
使用 start 启动资源,然后按 →| 键显示所有已知资源:
crm(live)resource#startstart ID
如果资源失败,它会自动重启动,但每次失败都会增加资源的失败计数。如果已为此资源设置 migration-threshold,那么一旦失败计数达到迁移阈值,节点将不再能运行此资源。
打开外壳并以 root 用户身份登录。
获取所有资源的列表。
root #crmresource list ... Resource Group: dlm-clvm:1 dlm:1 (ocf::pacemaker:controld) Started clvm:1 (ocf::lvm2:clvmd) Started cmirrord:1 (ocf::lvm2:cmirrord) Started
删除资源:
root #crmresource cleanup dlm-clvm
例如,如果要停止 DLM 资源,请从 dlm-clvm 资源组将 RSC 替换为 dlm。
请按如下操作以删除群集资源:
以 root 用户身份登录,然后启动 crm 交互式外壳:
root #crmconfigure
运行以下命令来获取您的资源列表:
crm(live)#resourcestatus
例如,输出可能类似于以下内容(其中 myIP 是资源的相关标识符):
myIP (ocf::IPaddr:heartbeat) ...
删除具有相关标识符的资源(也暗指 commit):
crm(live)#configuredelete YOUR_ID
提交更改:
crm(live)#configurecommit
虽然资源已配置为在发生硬件或软件故障时自动故障转移(或迁移)到群集的其他节点,但您也可以使用 Hawk 或命令行将资源手动迁移到其他节点。
对此任务使用 migrate 命令。例如,要将 ipaddress1 资源迁移到名为 bob 的群集节点,请使用以下命令:
root #crmresourcecrm(live)resource#migrateipaddress1 bob
使用标记可以一次性引用多个资源,而无需在这些资源之间创建任何共置或顺序关系。此功能十分适用于对概念上相关的资源进行分组。例如,如果有多个资源与某个数据库相关,您可以创建一个名为 tag-db 的标记,并将与该数据库相关的所有资源添加到此标记:
root #crmconfigure tag-db db1 db2 db3
这样,只需使用一条命令就能启动所有这些资源:
root #crmresource start tag-db
同样,也可以一次性停止所有这些资源:
root #crmresource stop tag-db
您可能不时地需要对单个群集组件或整个群集执行测试或维护任务 - 更改群集配置、更新单个节点的软件包,或者将群集升级到更高的产品版本。
为此,High Availability Extension 提供了数种级别的 maintenance 选项:
如果您想要将整个群集置于维护模式,请使用以下命令:
root #crmconfigure property maintenance-mode=true
例如,要将节点 alice 置于维护模式:
root #crmnode maintenance alice
crm status 命令将显示 alice 的维护模式,并且不会再向该节点分配资源。要从节点中去除维护标志,请使用:
root #crmnode ready alice
如果要将特定的资源设置为维护模式,请使用 meta 命令。例如,要将资源 ipaddress 置于维护模式,请输入:
root #crmmeta ipaddress set maintenance true
当服务在群集控制下运行时,如果您需要执行任何测试或维护任务,请确保遵照以下说明操作:
在开始之前,请将单个资源、节点或整个群集设置到维护模式。这有助于避免一些不利的负面影响,例如,资源未按顺序启动、群集节点之间出现 CIB 不同步的风险,或者丢失数据。
执行维护任务或测试。
完成后,请解除维护模式以开始正常的群集操作。
有关处于维护模式的资源和群集的行为的细节,请参见第 4.7 节 “维护模式”。
可以使用所谓的脚本来显示群集或节点的“运行”状态。脚本可以执行不同的任务,并不局限于显示运行状态。不过,本节重点介绍如何获取运行状态。
要获取有关 health 命令的所有细节,请使用 describe:
root #crmscript describe health
该命令将显示所有参数及其默认值的说明和列表。要执行脚本,请使用 run:
root #crmscript run health verbose=true
如果您希望只运行整套命令中的一个步骤,可以使用 describe 命令列出步骤类别中的所有可用步骤。
例如,以下命令将执行 health 命令的第一个步骤。将在 health.json 文件中储存输出以供做进一步调查:
root #crmscript run health \ step='Collect cluster information' \ statefile='health.json'
有关脚本的更多信息,请参见 http://crmsh.github.io/scripts/。
cib.xml 的密码 #如果群集配置包含密码之类的敏感信息,应将其储存在本地文件中。这样的话,这些参数将永远不会记录到或导入支持报告中。
使用 secret 前,最好先运行 show 命令了解一下所有资源的概况:
root #crmconfigure show primitive mydb ocf:heartbeat:mysql \ params replication_user=admin ...
如果希望为上面的 mydb 资源设置密码,请使用以下命令:
root #crmresource secret mydb set passwd linux INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]
使用以下命令可以取回保存的密码:
root #crmresource secret mydb show passwd linux
请注意,节点之间需要同步参数,使用 crm resource secret 命令可以帮助您处理好同步问题。强烈建议仅使用此命令管理机密参数。
调查群集的历史记录是一项复杂的任务。为简化此任务,crmsh 包含了 history 命令及其子命令。假定已正确配置 SSH。
每个群集都会移动状态、迁移资源或启动重要进程。这些操作均可通过 history 子命令进行检索。还可使用过程 5.27, “使用历史记录浏览器查看转换”中所述的 Hawk。
默认情况下,所有 history 命令会查看最近一小时的事件。要更改此时间段,请使用 limit 子命令。语法为:
root #crmhistorycrm(live)history#limitFROM_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#infoSource: live Period: 2012-01-12 14:10:56 - end Nodes: alice Groups: Resources:
要将 crm_report 限制为使用特定参数,请使用 help 子命令查看可用的选项。
要降低细节级别,请使用 detail 子命令及级别:
crm(live)history#detail2
级别数字越高,报告就越详细。默认值为 0(零)。
设置上述参数后,使用 log 显示日志消息。
要显示上次转换操作,请使用以下命令:
crm(live)history#transition-1 INFO: fetching new logs, please wait ...
此命令会获取日志并运行 dotty(从 graphviz 包)以显示转换图。外壳会打开日志文件,您在其中可以使用 ↓ 和 ↑ 光标键浏览内容。
如果希望不要打开转换图,请使用 nograph 选项:
crm(live)history#transition-1 nograph
crm 手册页。
访问 http://crmsh.github.io/documentation 中的上游项目文档。
有关详尽示例,请参见 Highly Available NFS Storage with DRBD and Pacemaker。