VMware Cloud Director は、ノード間でストリーミング レプリケーションの同期を維持します。スタンバイ ノードが接続解除された場合は、原因を特定して問題を解決する必要があります。

問題

VMware Cloud Director アプライアンス管理ユーザー インターフェイスにクラスタの健全性が DEGRADED と表示され、いずれかの接続解除されたスタンバイ ノードのステータスが running になり、感嘆符 (!) がスタンバイのアップストリーム ノードの名前の前に付いています。

PostgreSQL ログに、プライマリによって WAL セグメントが削除されたことが示されています。
2020-10-08 04:10:50.064 UTC [13390] LOG:  started streaming WAL from primary at 21/80000000 on timeline 17
2020-10-08 04:10:50.064 UTC [13390] FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 000000110000002100000080 has already been removed
2020-10-08 04:10:55.047 UTC [13432] LOG:  started streaming WAL from primary at 21/80000000 on timeline 17
2020-10-08 04:10:55.047 UTC [13432] FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 000000110000002100000080 has already been removed

/nodes API は、localClusterHealthDEGRADED に、ノードの statusrunning に、nodeHealthHEALTHY になっているという情報を返します。スタンバイのアップストリーム ノードの名前の前に感嘆符 (!)が付いていて、/nodes API から、スタンバイがアップストリーム ノードに接続されていないことを示す警告が返されます。

たとえば、 /nodes API がノードについて返す情報は以下のようになります。
{
    "localClusterFailover": "MANUAL",
    "localClusterHealth": "DEGRADED",
    "localClusterState": [
        {
            "connectionString": "host=primary_host_IP user=repmgr dbname=repmgr connect_timeout=2",
            "failover": {
                "details": "failover = manual",
                "mode": "MANUAL",
                "repmgrd": {
                    "details": "On node primary_node_ID (primary_host_name): repmgrd = not applicable",
                    "status": "NOT APPLICABLE"
                }
            },
            "id": primary_node_ID,
            "location": "default",
            "name": "primary_host_name",
            "nodeHealth": "HEALTHY",
            "nodeRole": "PRIMARY",
            "role": "primary",
            "status": "* running",
            "upstream": ""
        },
        {
            "connectionString": "host=unattached_standby_host_IP user=repmgr dbname=repmgr connect_timeout=2",
            "failover": {
                "details": "failover = manual",
                "mode": "MANUAL",
                "repmgrd": {
                    "details": "On node unattached_standby_node_ID (unattached_standby_host_name): repmgrd = not applicable",
                    "status": "NOT APPLICABLE"
                }
            },
            "id": unattached_standby_node_ID,
            "location": "default",
            "name": "unattached_standby_host_name",
            "nodeHealth": "HEALTHY",
            "nodeRole": "STANDBY",
            "role": "standby",
            "status": "running",
            "upstream": "! upstream_host_name"
        },
        {
            "connectionString": "host=running_standby_host_IP user=repmgr dbname=repmgr connect_timeout=2",
            "failover": {
                "details": "failover = manual",
                "mode": "MANUAL",
                "repmgrd": {
                    "details": "On node running_standby_node_ID (running_standby_host_name): repmgrd = not applicable",
                    "status": "NOT APPLICABLE"
                }
            },
            "id": running_standby_node_ID,
            "location": "default",
            "name": "running_standby_host_name",
            "nodeHealth": "HEALTHY",
            "nodeRole": "STANDBY",
            "role": "standby",
            "status": "running",
            "upstream": "upstream_host_name"
        }
    ],
    "warnings": [
        "node \"unattached_standby_host_name\" (ID: unattached_standby_node_ID) is not attached to its upstream node \"upstream_host_name\" (ID: upstream_node_id)"
    ]
}

スタンバイ ノードが接続解除された場合は、できるだけ早く再接続する必要があります。ノードが接続解除されている期間が長すぎる場合、プライマリから WAL レコードを継続的にストリーミングする処理が遅れ、レプリケーションを再開できなくなることがあります。

原因

データの整合性を維持するために、PostgreSQL データベースはログ先行書き込み (WAL) を使用します。プライマリ ノードは、レプリケーションおよびリカバリを行うために、WAL をアクティブなスタンバイ ノードに継続的にストリーミングします。WAL を受信したスタンバイ ノードは、WAL を処理します。スタンバイ ノードが接続解除になると、スタンバイ ノードは WAL の受信を停止し、新しいプライマリになるプロモーションの候補から外れます。

解決方法

  1. 新しいスタンバイ ノードをデプロイします。
  2. 接続解除されたスタンバイ ノードを登録解除します。

次のタスク

高可用性クラスタの VMware Cloud Director アプライアンス スタンバイ セル障害からのリカバリを参照してください。