VMware Cloud Director は、ノード間でストリーミング レプリケーションの同期を維持します。スタンバイ ノードがアクセス不能になった場合は、原因を特定して問題を解決する必要があります。
問題
VMware Cloud Director アプライアンス管理ユーザー インターフェイスにクラスタの健全性が DEGRADED と表示され、いずれかのスタンバイ ノードのステータスが unreachable になっています。
/nodes
API は、localClusterHealth
が DEGRADED に、ノードの status
が unreachable に、nodeHealth
が UNHEALTHY になっているという情報を返します。
たとえば、
/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=unreachable_standby_host_IP user=repmgr dbname=repmgr connect_timeout=2", "failover": { "details": "failover state unknown - unable to ssh to failed or unreachable node", "mode": "UNKNOWN", "repmgrd": { "details": "On node unreachable_standby_node_ID (unreachable_standby_host_name): repmgrd = n/a", "status": "UNKNOWN" } }, "id": unreachable_standby_node_ID, "location": "default", "name": "unreachable_standby_host_name", "nodeHealth": "UNHEALTHY", "nodeRole": "STANDBY", "role": "standby", "status": "? unreachable", "upstream": "primary_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_IP): 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": "primary_host_name" } ], "warnings": [ "unable to connect to node \"unreachable_standby_host_name\" (ID: unreachable_standby_node_ID)", "node \"unreachable_standby_host_name\" (ID: unreachable_standby_node_ID) is registered as an active standby but is unreachable" ] }
原因
データの整合性を維持するために、PostgreSQL データベースはログ先行書き込み (WAL) を使用します。プライマリ ノードは、レプリケーションおよびリカバリを行うために、WAL をアクティブなスタンバイ ノードに継続的にストリーミングします。WAL を受信したスタンバイ ノードは、WAL を処理します。スタンバイ ノードに到達できない場合、スタンバイ ノードは WAL の受信を停止し、新しいプライマリになるプロモーションの候補から外れます。
解決方法
- 到達不能なスタンバイ ノードの仮想マシンが実行されていることを確認します。
- スタンバイ ノードへのネットワーク接続が機能していることを確認します。
- スタンバイ ノードと他のノード間の通信を妨げる可能性がある SSH の問題がないことを確認します。
- スタンバイ ノードで vpostgres サービスが実行されていることを確認します。