clmgr:技术参考
PowerHA SystemMirror 7.1 引入了一个健壮的 CLI 工具
在过去的 20 中,PowerHA SystemMirror (HACMP) 一直缺少一致、文档齐全、充分支持的命令行接口 (CLI)。PowerHA SystemMirror 的配置和控制一直依赖于 SMIT。曾经尝试引入图形化工具,此工具基本上是 SMIT 功能的包装器,可以方便地执行任务。对于喜欢使用命令行的管理员来说,要想自动执行操作(包括配置任务),只能在 SMIT 中寻找命令,并希望所有相关环境变量都已经设置好了。本文来自 IBM Systems Magazine for AIX 中文版
2006 年,HACMP 5.4 引入了一个名为 clvt 的工具,这带来了一线曙光。开发这个工具的目的是让 Smart Assists 使用它在命令级执行配置任务,所以它的功能只限于 Smart Assists 所需要的。在以后的版本中,对 clvt 工具的更新没有超出 Smart Assists 需要的范围。
IBM Systems Director 的 PowerHA SystemMirror 7.1 插件改变了缺少 CLI 的局面。现在,需要能够使用命令级工具执行所有 PowerHA SystemMirror 任务。为了完善这个接口,完成这些功能已付出了许多努力。尽管在 7.1 中有很大改进,但是目前仍然必须检查您想要执行的任务的手册页,因为它还没有覆盖所有任务。当然,在最终部署之前必须进行彻底测试。
本文使用的集群(将在后面详细描述)在一对 LPAR 上运行,在两个 Power 570 系统上各有一个 LPAR。通过 virtual I/O (VIO) 提供存储和连网,也就是说,网络通信流是桥接的,磁盘是 virtual SCSI (vSCSI)。集群将使用一个以太网适配器。已经标识了存储库磁盘。详细信息见图 1 和图 2。
图 1. 集群基础设施
图 2. 资源组配置
基础知识
clmgr 有联机帮助。编写本文时,已经可以使用 man clvt 访问 clmgr 手册页。如果您知道自己想做什么,但是不太确定可以使用哪些选项或它们的格式,那么只需输入您知道的部分命令,然后加上 "-h" 即可。这提供只与输入命令相关的帮助。例如,如果希望激活节点,可以输入 clmgr start node -h,这会产生以下输出:
# clmgr start node -h # Available options for "clvt start node": start_node <_NAME> WHEN MANAGE BROADCAST CLINFO FORCE FIX TIMEOUT
上面的输出提供启动节点的所有选项。
命令的格式是:clmgr < 操作 > < 类 > [< 名称 >] [< 属性 >]。操作是您希望对类(比如节点或资源组)执行的操作。名称参数标识特定的类对象。最常用的操作是:
add, query, delete online, offline move sync
最常用的类是:
cluster node resource_group service_ip application_controller
在使用 query 操作时,可以指定 -a 参数以筛选出想要的属性。在使用 query 操作时,可以指定 -v 参数生成详细的输出。这还为指定的类中的所有对象生成详细的输出。当在查询中指定对象名称时,默认生成详细的输出;也就是说,-v 不是必需的。
详细步骤
接下来,介绍只使用 clmgr 执行的任务。可以单独执行这些任务,但是如果按建议的次序执行它们,就会创建、测试并备份一个简单的两节点集群。
1. 构建一个两节点的 PowerHA SystemMirror 7.1 集群
2. 为每个节点定义持久的地址
3. 为每个资源组定义两个服务地址
4. 定义两个应用程序控制器,每个资源组一个
5. 定义两个资源组(和资源),各有不同的主节点
6. 同步集群定义
7. 在每个节点上启动集群服务
8. 确认资源组在线
9. 将资源组从一个节点转移到另一个
10. 停止集群服务,把资源组转移到另一个节点
11. 在向下节点上重新启动集群服务
12. 将资源组转移回主节点
13. 生成这个经过检验的集群配置的快照
步骤 1 — 构建集群。命令为:
# clmgr add cluster pha_cluster repository=hdisk2 nodes=node1,node2
将会看到以下输出:
# cltopinfo Cluster Name: pha_cluster Cluster Connection Authentication Mode: Standard Cluster Message Authentication Mode: None Cluster Message Encryption: None Use Persistent Labels for Communication: No Repository Disk: hdisk2 Cluster IP Address: There are 2 node(s) and 1 network(s) defined NODE node1: Network net_ether_01 node1 10.6.51.121 NODE node2: Network net_ether_01 node2 10.6.51.221 No resource groups defined
步骤 2 — 为每个节点定义持久的地址。命令为:
# clmgr add persistent_ip 192.168.3.1 network=net_ether_01 node=node1 # clmgr a pe 192.168.3.2 network=net_ether_01 node=node2
结果:
# clmgr -v q pe NAME="node1admin" IPADDR="192.168.3.1" NODE="node1" SITE="" NETWORK="net_ether_01" INTERFACE="" NETTYPE="ether" TYPE="persistent" ATTR="public" GLOBALNAME="" HADDR="" NAME="node2admin" IPADDR="192.168.3.2" NODE="node2" SITE="" NETWORK="net_ether_01" INTERFACE="" NETTYPE="ether" TYPE="persistent" ATTR="public" GLOBALNAME="" HADDR=""
步骤 3 — 定义两个服务地址,每个节点的资源组一个。命令为:
# clmgr add service_ip appAsvc network=net_ether_01 \ netmask=255.255.255.0 # clmgr a se appBsvc network=net_ether_01 netmask=255.255.255.0
结果:
# clmgr -v q se NAME="appAsvc" IPADDR="192.168.3.10" NODE="" SITE="ignore" NETWORK="net_ether_01" INTERFACE="" NETTYPE="ether" TYPE="service" ATTR="public" GLOBALNAME="" HWADDR="" NAME="appBsvc" IPADDR="192.168.3.20" NODE="" SITE="ignore" NETWORK="net_ether_01" INTERFACE="" NETTYPE="ether" TYPE="service" ATTR="public" GLOBALNAME="" HWADDR=""
步骤 4 — 定义两个应用程序控制器,每个节点的资源组一个。命令为:
# clmgr add application_controller appActrl \ startscript=/lab/config/startA stopscript=/lab/config/stopA # clmgr a ac appBctrl startscript=/lab/config/startB \ stopscript=/lab/config/stopB
结果:
# clmgr -v q ac NAME="appActrl" MONITORS="" STARTSCRIPT="/lab/config/startA" STOPSCRIPT="/lab/config/stopA" NAME="appBctrl" MONITORS="" STARTSCRIPT="/lab/config/startB" STOPSCRIPT="/lab/config/stopB"
步骤 5 — 定义两个资源组(和资源),每个节点一个。命令如下所示。注意:策略参数必须是大写的。
# clmgr add resource_group appAgroup nodes=node1,node2 startup=OHN \ fallover=FNPN fallback=NFB service_label=appAsvc \ applications=appActrl volume_group=vgA fs_before_ipaddr=true # clmgr add resource_group appBgroup nodes=node2,node1 startup=OHN \ fallover=FNPN fallback=NFB service_label=appBsvc \ applications=appBctrl volume_group=vgB
结果:
# cltopinfo Cluster Name: pha_cluster Cluster Connection Authentication Mode: Standard Cluster Message Authentication Mode: None Cluster Message Encryption: None Use Persistent Labels for Communication: No Repository Disk: hdisk2 Cluster IP Address: There are 2 node(s) and 1 network(s) defined NODE node1: Network net_ether_01 appBsvc 192.168.3.20 appAsvc 192.168.3.10 node1 10.6.51.121 NODE node2: Network net_ether_01 appBsvc 192.168.3.20 appAsvc 192.168.3.10 node2 10.6.51.221 Resource Group appAgroup Startup Policy Online On Home Node Only Fallover Policy Fallover To Next Priority Node In The List Fallback Policy Never Fallback Participating Nodes node1 node2 Service IP Label appAsvc Resource Group appBgroup Startup Policy Online On Home Node Only Fallover Policy Fallover To Next Priority Node In The List Fallback Policy Never Fallback Participating Nodes node2 node1 Service IP Label appBsvc
步骤 6 — 同步集群定义。命令为:
# clmgr sync cluster
结果(省略了部分输出):
# clmgr sync cluster Verification to be performed on the following: Cluster Topology Cluster Resources Retrieving data from available cluster nodes. This could take a few minutes. Start data collection on node node1 Start data collection on node node2 Verifying Cluster Topology... Completed 10 percent of the verification checks node1 net_ether_01 node2 net_ether_01 Verifying Cluster Resources... Completed 40 percent of the verification checks appActrl appAgroup appBctrl appBgroup Completed 100 percent of the verification checks Remember to redo automatic error notification if configuration has changed. Verification has completed normally. Committing any changes, as required, to all available nodes... Adding any necessary PowerHA SystemMirror for AIX entries to /etc/inittab and /etc/rc.net for IP Address Takeover on node node1. Adding any necessary PowerHA SystemMirror for AIX entries to /etc/inittab and /etc/rc.net for IP Address Takeover on node node2. Verification has completed normally. WARNING: Multiple communication interfaces are recommended for networks that use IP aliasing in order to prevent the communication interface from becoming a single point of failure. There are fewer than the recommended number of communication interfaces defined on the following node(s) for the given network(s): Node: Network: ---------------------------------- WARNING: Network option "nonlocsrcroute" is set to 0 and will be set to 1 on during HACMP startup on the following nodes: node1 node2 WARNING: Application monitors are required for detecting application failures in order for HACMP to recover from them. Application monitors are started by HACMP when the resource group in which they participate is activated. The following application(s), shown with their associated resource group, do not have an application monitor configured:
步骤 7 — 检查集群服务的状态。命令为:
# clmgr -a state query cluster # clmgr -cv -a name,state query node
结果:
# clmgr -a state query cluster STATE="OFFLINE" # clmgr -cv -a name,state query node # NAME:STATE node1:OFFLINE node2:OFFLINE
步骤 8 — 在两个节点上启动集群服务。命令为:
# clmgr start cluster
结果:
# clmgr -a state q cluster STATE="STABLE" # clmgr -cv -a name,state,raw_state q node # NAME:STATE:RAW_STATE node1:NORMAL:ST_STABLE node2:NORMAL:ST_STABLE
步骤 9 — 检查资源组的状态。命令为:
# clmgr -cv -a name,state,current_node q rg
结果:
# clmgr -cv -a name,state,current_node q rg # NAME:STATE:CURRENT_NODE appAgroup:ONLINE:node1 appBgroup:ONLINE:node2
目前,要想检查资源组中的资源,只能使用 AIX 命令。尽管可以通过 clmgr 获得许多集群对象的状态信息,但是它不提供服务地址或应用程序控制器脚本等对象的状态信息。让我们来做一些测试。
步骤 10 — 把 appAgroup 资源组转移到 node2。命令为:
# clmgr mv rg appAgroup node=node2
结果:
# clmgr mv rg appAgroup node=node2 Attempting to move resource group appAgroup to node node2. Waiting for the cluster to process the resource group movement request.... Waiting for the cluster to stabilize.... Broadcast message from root@node1 (tty) at 16:29:04 ... appA stopping ........... Resource group movement successful. Resource group appAgroup is online on node node2. Cluster Name: pha_cluster Resource Group Name: appAgroup Primary instance(s): The following node temporarily has the highest priority for this instance: node2, user-requested rg_move performed on Wed Dec 1 16:28:56 2010 Node Group State ---------------------------- --------------- node1 OFFLINE node2 ONLINE Resource Group Name: appBgroup Node Group State ---------------------------- --------------- node2 ONLINE node1 OFFLINE
步骤 11 — 在 node2 上用 Move Resource Groups 选项停止集群服务。命令为:
# clmgr stop node node2 manage=move
结果:
# clmgr -cv -a name,state,raw_state q node # NAME:STATE:RAW_STATE node1:NORMAL:ST_STABLE node2:OFFLINE:ST_INIT # clmgr -cv -a name,state,current_node q rg # NAME:STATE:CURRENT_NODE appAgroup:ONLINE:node1 appBgroup:ONLINE:node1
步骤 12 — 在 node2 上重新启动集群服务。命令(使用联机别名而代替 start)为:
# clmgr on node node2
结果:
# clmgr -cv -a name,state,raw_state q node # NAME:STATE:RAW_STATE node1:NORMAL:ST_STABLE node2:NORMAL:ST_STABLE # clmgr -cv -a name,state,current_node q rg # NAME:STATE:CURRENT_NODE appAgroup:ONLINE:node1 appBgroup:ONLINE:node1
步骤 13 — 将 appBgroup 资源组转移回 node2。命令为:
# clmgr mv rg appBgroup node=node2
结果:
# clmgr -cv -a name,state,current_node q rg # NAME:STATE:CURRENT_NODE appAgroup:ONLINE:node1 appBgroup:ONLINE:node2
步骤 14 — 生成所有工作的快照。命令为:
# clmgr mk sn clmgr_snap description="Snap of clmgr example cluster"
结果:
# clmgr mk sn clmgr_snap description="Snap of clmgr example cluster" clsnapshot: Creating file /usr/es/sbin/cluster/snapshots/clmgr_snap.odm. clsnapshot: Creating file /usr/es/sbin/cluster/snapshots/clmgr_snap.info. clsnapshot: Executing clsnapshotinfo command on node: node1... clsnapshot: Executing clsnapshotinfo command on node: node2... clsnapshot: Succeeded creating Cluster Snapshot: clmgr_snap
易用特性
如上所示,在这个工具中可以使用许多别名或快捷方式。完整的列表见手册页。如果拼写错误或使用了错误的参数,clmgr 会明确地指出什么错了。例如:
# clmgr add service_ip appAsvc network=net_ether01 netmask=255.255.255.0 ERROR: failed to create "appAsvc". Network net_ether01 cannot be found in the configuration.
如果希望执行查询,但是不确定在 PowerHA SystemMirror 中给定的类使用什么对象名,那么只需提供任意名称,就会看到含义明确的错误消息。
# clmgr q rg what_group ERROR: "what_group" does not appear to exist! Available Resource Groups: appAgroup appBgroup
注意,消息中清楚地指出了有问题的值,还显示了所有可能的正确值。以下命令寻找可以在获得 IP 地址之前挂装文件系统的所有资源组:
# clmgr q rg fs_before_ipaddr=true appAgroup
故障排除和日志记录
解决 clmgr 这类工具的问题显然不太重要。如果它不起作用,改用 SMIT 执行任务就行了。但是,如果很想用 clmgr 完成某些任务而且打算以后经常使用它,可以利用它所生成的日志信息解决问题,这非常好。日志信息记录在 /var/hacmp/log/clutils.log 中(或在您的系统上保存 clutils.log 的其他地方)。另外,clutils.log 包含操作的输出,所以如果输出超出了滚动缓冲区,仍然可以在日志中找到它。下面是日志的一段摘录。这是在 node2 上启动集群服务的结果。
CLMGR STARTED (9153:10354698:5177392): Wed Dec 1 16:56:43 CET 2010 CLMGR USER (9153:10354698:5177392): ::root:system CLMGR COMMAND (9153:7471358:10354698): clmgr -T 9153 online node node2 CLMGR ACTUAL (9153:7471358:10354698): start_node node2 CLMGR RETURN (9153:7471358:10354698): 0 CLMGR STDERR -- BEGIN (9153:10354698:5177392): Wed Dec 1 17:00:10 CET 2010 CLMGR STDERR -- END (9153:10354698:5177392): Wed Dec 1 17:00:10 CET 2010 CLMGR ENDED (9153:10354698:5177392): Wed Dec 1 17:00:10 CET 2010
输出包含一些有用的信息,比如执行命令的用户、用户输入的命令 (CLMGR COMMAND) 和实际执行的命令。还显示返回码,这在发生错误时很有帮助。
这只是初步的故障排除步骤。如果出问题的是执行的命令,而不是 clmgr 本身,那么必须检查其他日志或 AIX 配置。例如,对于在初始同步期间无法配置存储库磁盘的问题,无法通过检查 clutils.log 来解决。使用 syslog 有可能就能够解决这个问题。
clmgr 是有生命力的 CLI
以前的 clvt 版本功能有限,而更新的 clmgr 已经可以作为日常工具。我认为这个工具已经覆盖了 PowerHA SystemMirror 中常见的所有管理任务。如您所见,在 PowerHA SystemMirror 管理方面现在有了一个有效的 CLI 工具。
还有许多其他特性。例如,要想执行 DARE 操作,可以使用 Modify 操作修改属性(比如在资源组中添加卷组),然后执行一个同步操作。另外,因为它是用于 PowerHA SystemMirror 的 IBM Systems Director 插件的工具,可以确信插件功能的底层基础设施是很完善的。
尽管并非每个管理场景都适合使用这个工具,它也不能完全替代 SMIT 进行 PowerHA SystemMirror 管理,但是它可以简化某些任务,比如启动或停止服务或者执行一个同步操作,只需敲几下键盘即可。
免责声明:在编写本文时,本文中给出的所有命令都是有效的。IBM 和作者不保证在其他集群环境中会产生相同或相似的结果。本文档只作为使用 clmgr 工具的参考和指南。
本文的英文原文最先在 IBM Systems Magazine 在线网站(www.ibmsystemsmag.com)上发布。
原味连接http://www.ibm.com/developerworks/cn/aix/systemmaga/6/clmgr_technicalr_reference/