群集资源故障排除指南(RHEL/CentOS 7)
在开始学习对群集中与群集资源相关的主题进行故障排除之前,我们必须熟悉群集体系结构。
在上一篇文章中,我分享了配置HA群集和创建群集资源的步骤,因此其中我将提供一些对群集资源进行故障排除的提示。
我们可能会多次观察到资源最终处于"已停止"状态。
因此,其中我将指导我们使用命令和日志来检查"对群集资源进行故障排除"。
提示-对群集资源进行故障排除
首先阅读日志,以找出资源失败的原因
在Red Hat上的
/var/log/messages
最近发行的
journalctl
如果资源失败,它将尝试启动资源两次。
如果达到某个阈值,则该资源会将其故障计数器设置为INFINITY,然后它将停止尝试。
这是为了防止群集尝试无限期启动资源接下来,即使我们发现了问题并解决了问题,也有可能资源不会自动启动。
要解决此问题,我们将需要重置资源失败计数器
一些例子
为了说明这一点,我将创建一个包含一些错误信息的资源
[root@node1 ~]# pcs resource create apache-ip ocf:heartbeat:IPaddr2 ip=10.0.0.50 cidr_netmask=24
接下来让我们检查状态
[root@node1 ~]# pcs status Cluster name: mycluster Stack: corosync Current DC: node2.example.com (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum Last updated: Sat Oct 27 12:29:40 2016 Last change: Sat Oct 27 12:29:35 2016 by root via cibadmin on node1.example.com 3 nodes configured 3 resources configured Online: [ node1.example.com node2.example.com node3.example.com ] Full list of resources: Resource Group: ipgroup ip1 (ocf::heartbeat:IPaddr2): Started node2.example.com ip2 (ocf::heartbeat:IPaddr2): Started node2.example.com apache-ip (ocf::heartbeat:IPaddr2): Stopped Failed Actions: * apache-ip_start_0 on node3.example.com 'unknown error' (1): call=55, status=complete, exitreason='Unable to find nic or netmask.', last-rc-change='Sat Oct 27 12:29:35 2016', queued=0ms, exec=44ms * apache-ip_start_0 on node2.example.com 'unknown error' (1): call=67, status=complete, exitreason='Unable to find nic or netmask.', last-rc-change='Sat Oct 27 12:29:36 2016', queued=0ms, exec=35ms * apache-ip_start_0 on node1.example.com 'unknown error' (1): call=72, status=complete, exitreason='Unable to find nic or netmask.', last-rc-change='Sat Oct 27 12:29:35 2016', queued=0ms, exec=42ms Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
因此,如我们所见,资源apache-ip处于停止状态,而"失败的操作"则向我们提示无法找到nic或者netmask
在/var/log/messages
内部,我们看到有关该错误的更多信息
Oct 27 12:29:35 node1 IPaddr2(apache-ip)[24881]: ERROR: Unable to find nic or netmask. Oct 27 12:29:35 node1 IPaddr2(apache-ip)[24881]: ERROR: [findif] failed Oct 27 12:29:35 node1 lrmd[3697]: notice: apache-ip_start_0:24881:stderr [ ocf-exit-reason:Unable to find nic or netmask. ] Oct 27 12:29:35 node1 crmd[3700]: notice: Result of start operation for apache-ip on node1.example.com: 1 (unknown error) Oct 27 12:29:35 node1 crmd[3700]: notice: node1.example.com-apache-ip_start_0:72 [ ocf-exit-reason:Unable to find nic or netmask.n ]
说明:
findif即查找接口无法获取该接口。
下一个lrmd
是本地资源管理器守护进程,表明它无法在本地运行,并且不知道为什么会发生故障,但是提示它可能是由于nic或者netmask导致的。
`即集群资源管理守护程序能够将该信息同步到集群的其余部分
尝试对失败的资源进行"调试启动",以获取有关失败原因的更多信息
[root@node1 ~]# pcs resource debug-start apache-ip Operation start for apache-ip (ocf:heartbeat:IPaddr2) returned: 'unknown error' (1) > stderr: ocf-exit-reason:Unable to find nic or netmask. > stderr: ERROR: [findif] failed
我们可以使用以下命令获取故障计数值
[root@node1 ~]# crm_failcount -G -r apache-ip scope=status name=fail-count-apache-ip value=2
说明:
" pcs resource failcount show"可能有效,也可能无效。
因为在撰写本文时,有一个pcs的bug,因此无法显示任何失败计数。
现其中的问题是我的接口子网是" 10.0.2.0/24",而我已经将" 10.0.0/24"子网分配给了" apache-ip"资源。
因此,我们需要更正此问题,为此我们将更新集群xml文件。
警告:
修改此文件可能很危险,因此我们应该知道要更改的内容。
对于我们的示例,我们不愿意更改任何内容,而只是详细了解资源。
[root@node1 ~]# pcs cluster edit Error: $EDITOR environment variable is not set
现在,因为我们没有EDITOR
变量,它会提示我们一个错误。
让我们使用vim
作为我们的EDITOR
[root@node1 ~]# export EDITOR=vim
并重新尝试编辑
[root@node1 ~]# pcs cluster edit
其中我们看到的ip值为10.0.0.50,必须为10.0.2.50。
<primitive class="ocf" id="apache-ip" provider="heartbeat" type="IPaddr2"> <instance_attributes id="apache-ip-instance_attributes"> <nvpair id="apache-ip-instance_attributes-cidr_netmask" name="cidr_netmask" value="24" <nvpair id="apache-ip-instance_attributes-ip" name="ip" value="10.0.0.50" </instance_attributes> <operations> <op id="apache-ip-monitor-interval-10s" interval="10s" name="monitor" timeout="20s" <op id="apache-ip-start-interval-0s" interval="0s" name="start" timeout="20s" <op id="apache-ip-stop-interval-0s" interval="0s" name="stop" timeout="20s" </operations> </primitive>
因此,让我们为我们的apache-ip
资源修复ip值
[root@node1 ~]# pcs resource update apache-ip ip=10.0.2.50
并使用" pcs cluster edit"重新验证集群xml
<primitive class="ocf" id="ip1" provider="heartbeat" type="IPaddr2"> <instance_attributes id="ip1-instance_attributes"> <nvpair id="ip1-instance_attributes-cidr_netmask" name="cidr_netmask" value="24" <nvpair id="ip1-instance_attributes-ip" name="ip" value="10.0.2.50" </instance_attributes> <operations> <op id="ip1-monitor-interval-10s" interval="10s" name="monitor" timeout="20s" <op id="ip1-start-interval-0s" interval="0s" name="start" timeout="20s" <op id="ip1-stop-interval-0s" interval="0s" name="stop" timeout="20s" </operations> </primitive>
如我们所见,该值对于资源ip是正确的。
完成更改后,请再次检查集群状态
[root@node1 ~]# pcs status Cluster name: mycluster Stack: corosync Current DC: node2.example.com (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum Last updated: Sat Oct 27 12:55:14 2016 Last change: Sat Oct 27 12:54:27 2016 by root via cibadmin on node1.example.com 3 nodes configured 3 resources configured Online: [ node1.example.com node2.example.com node3.example.com ] Full list of resources: Resource Group: ipgroup ip1 (ocf::heartbeat:IPaddr2): Started node2.example.com ip2 (ocf::heartbeat:IPaddr2): Started node2.example.com apache-ip (ocf::heartbeat:IPaddr2): Started node1.example.com Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
对于我们来说,该服务已自动启动,但是如果我们没有这样做,请清除该服务的失败计数
[root@node1 ~]# pcs resource cleanup apache-ip Cleaned up apache-ip on node3.example.com Cleaned up apache-ip on node2.example.com Cleaned up apache-ip on node1.example.com
然后,如果所有配置正确,资源应自动显示。