群集资源故障排除指南(RHEL/CentOS 7)

时间:2020-01-09 10:38:48  来源:igfitidea点击:

在开始学习对群集中与群集资源相关的主题进行故障排除之前,我们必须熟悉群集体系结构。

在上一篇文章中,我分享了配置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

然后,如果所有配置正确,资源应自动显示。