第7章 高可用性リソースに関するトラブルシューティング

リソースに異常が発生した場合は、問題の原因と場所を調査し、異常が発生したリソースを修正し、必要に応じてリソースをクリーンアップする必要があります。デプロイメントによって、リソース異常にはさまざまな原因が考えられ、リソースを調査して問題の修正方法を決定する必要があります。

たとえば、リソースの制約を確認することで、リソースが相互に障害とならないようにし、また互いに接続できるようにすることができます。他のコントローラーノードよりも頻繁にフェンシングされるコントローラーノードを調査し、通信の問題を識別できる場合もあります。

リソースの問題の場所に応じて、以下のオプションのいずれかを選択します。

コントローラーノードの問題
コントローラーノードのヘルスチェックに失敗した場合は、コントローラーノード間の通信に問題があることを示しています。問題を調査するには、コントローラーノードにログインして、サービスが正常に起動できるかどうかを確認します。
個別のリソースの問題
コントローラーのほとんどのサービスが正しく動作している場合は、pcs status コマンドを実行し、出力で特定の Pacemaner リソース障害に関する情報がないか、あるいは、systemctl コマンドを実行し、Pacemaker 以外のリソースのエラーを調べます。

7.1. 高可用性クラスターでのリソースの制約の表示

リソースの問題を調査する前に、サービスがどのように起動されるかに関する制約を表示することができます。これには、各リソースが配置される場所、リソースが起動される順序、別のリソースと共に配置する必要があるかどうか、などの制約が含まれます。

手順

  • 以下のオプションのいずれかを使用します。

    • リソースの制約をすべて表示するには、任意のコントローラーノードにログインして pcs constraint show コマンドを実行します。

      $ sudo pcs constraint show

      以下の例には、Controller ノードで pcs constraint show コマンドを実行した場合の出力を示しており、途中省略しています。

      Location Constraints:
        Resource: galera-bundle
          Constraint: location-galera-bundle (resource-discovery=exclusive)
            Rule: score=0
              Expression: galera-role eq true
        [...]
        Resource: ip-192.168.24.15
          Constraint: location-ip-192.168.24.15 (resource-discovery=exclusive)
            Rule: score=0
              Expression: haproxy-role eq true
        [...]
        Resource: my-ipmilan-for-controller-0
          Disabled on: overcloud-controller-0 (score:-INFINITY)
        Resource: my-ipmilan-for-controller-1
          Disabled on: overcloud-controller-1 (score:-INFINITY)
        Resource: my-ipmilan-for-controller-2
          Disabled on: overcloud-controller-2 (score:-INFINITY)
      Ordering Constraints:
        start ip-172.16.0.10 then start haproxy-bundle (kind:Optional)
        start ip-10.200.0.6 then start haproxy-bundle (kind:Optional)
        start ip-172.19.0.10 then start haproxy-bundle (kind:Optional)
        start ip-192.168.1.150 then start haproxy-bundle (kind:Optional)
        start ip-172.16.0.11 then start haproxy-bundle (kind:Optional)
        start ip-172.18.0.10 then start haproxy-bundle (kind:Optional)
      Colocation Constraints:
        ip-172.16.0.10 with haproxy-bundle (score:INFINITY)
        ip-172.18.0.10 with haproxy-bundle (score:INFINITY)
        ip-10.200.0.6 with haproxy-bundle (score:INFINITY)
        ip-172.19.0.10 with haproxy-bundle (score:INFINITY)
        ip-172.16.0.11 with haproxy-bundle (score:INFINITY)
        ip-192.168.1.150 with haproxy-bundle (score:INFINITY)

      この出力には、以下の主要な制約種別が表示されています。

      Location Constraints

      リソースを割り当てることのできる場所を一覧表示します。

      • 最初の制約は、galera-role 属性が true に設定されたノードで実行する galera-bundle リソースを設定するルールを定義します。
      • 場所に関する 2 番目の制約は、IP リソース ip-192.168.24.15haproxy-role 属性が true に設定されたノードでのみ実行されることを指定します。これは、クラスターが IP アドレスを haproxy サービスに関連付けることを意味し、サービスを到達可能にするために必要です。
      • 場所に関する 3 番目の制約は、ipmilan リソースが各コントローラーノードで無効化されることを意味します。
      Ordering Constraints

      リソースを起動することのできる順序を一覧表示します。この例は、仮想 IP アドレスリソース IPaddr2 は HAProxy サービスより先に起動しなければならない、という制約を示しています。

      注記

      順序に関する制約は、IP アドレスリソースおよび HAProxy にのみ適用されます。Compute などのサービスは、Galera などの依存関係にあるサービスの中断に対する耐性があると予想されるため、その他すべてのリソースは systemd により管理されます。

      Colocation Constraints
      共に配置する必要があるリソースを一覧表示します。すべての仮想 IP アドレスは haproxy-bundle リソースにリンクされています。
    • 特定のリソースの制約を表示するには、任意のコントローラーノードにログインして pcs property show コマンドを実行します。

      $ sudo pcs property show

      出力例:

      Cluster Properties:
       cluster-infrastructure: corosync
       cluster-name: tripleo_cluster
       dc-version: 2.0.1-4.el8-0eb7991564
       have-watchdog: false
       redis_REPL_INFO: overcloud-controller-0
       stonith-enabled: false
      Node Attributes:
       overcloud-controller-0: cinder-volume-role=true galera-role=true haproxy-role=true rabbitmq-role=true redis-role=true rmq-node-attr-last-known-rabbitmq=rabbit@overcloud-controller-0
       overcloud-controller-1: cinder-volume-role=true galera-role=true haproxy-role=true rabbitmq-role=true redis-role=true rmq-node-attr-last-known-rabbitmq=rabbit@overcloud-controller-1
       overcloud-controller-2: cinder-volume-role=true galera-role=true haproxy-role=true rabbitmq-role=true redis-role=true rmq-node-attr-last-known-rabbitmq=rabbit@overcloud-controller-2

      この出力で、リソースの制約が正しく設定されていることを確認できます。たとえば、すべてのコントローラーノードで galera-role 属性は true であり、galera-bundle リソースはこれらのノードでのみ実行されることを意味します。