データベース高可用性構成の VMware Cloud Director アプライアンス環境で、postgres ユーザーが SSH を介してピア データベース ノードに接続できません。
問題
データベース ノード間に SSH の問題がある場合は、VMware Cloud Director に localClusterHealth が SSH_PROBLEM として表示されます。この問題は重大であるため、可能なかぎり早く修正する必要があります。
localClusterHealth を表示するには、VMware Cloud Director アプライアンス管理ユーザー インターフェイスを使用するか、/nodes VMware Cloud Director アプライアンス API を実行します。VMware Cloud Director アプライアンス API のドキュメントを参照してください。
SSH 問題の発生したアプライアンス環境のピア ノードで /nodes API を実行すると、/nodes API は、localClusterHealth が SSH_PROBLEM、localClusterFailover が INDETERMINATE であるという情報を返します。/nodes API を実行しているノードから SSH 経由でピア ノードの 1 つに接続することができないため、フェイルオーバー モードは 不明 の状態です。SSH に問題のあるノードから送信されたレスポンス本文の "failover" 出力部分内の "details" に、「ssh failed.command: ssh unreachable_standby_host_IP /usr/bin/grep failover=manual /opt/vmware/vpostgres/10/etc/repmgr.conf」と表示されています。
GET https://primary_host_IP:5480/api/1.0.0/nodes を実行すると、
/nodes API は次の情報を返すことがあります。
{
"localClusterFailover": "INDETERMINATE",
"localClusterHealth": "SSH_PROBLEM",
"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=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": "primary_host_name"
},
{
"connectionString": "host=unreachable_standby_host_IP user=repmgr dbname=repmgr connect_timeout=2",
"failover": {
"details": "ssh failed. command: ssh unreachable_standby_host_IP /usr/bin/grep failover=manual /opt/vmware/vpostgres/10/etc/repmgr.conf",
"mode": "UNKNOWN",
"repmgrd": {
"details": "On node unreachable_standby_node_ID (unreachable_standby_host_name): repmgrd = not running",
"status": "NOT RUNNING"
}
},
"id": unreachable_standby_node_ID,
"location": "default",
"name": "unreachable_standby_host_name",
"nodeHealth": "HEALTHY",
"nodeRole": "STANDBY",
"role": "standby",
"status": "running",
"upstream": "primary_host_name"
}
],
"warnings": []
}
GET https://unreachable_standby_host_IP:5480/api/1.0.0/nodes を実行すると、ノードは信頼されていないため、localClusterFailover および localClusterState の情報が不正確になることがあります。/nodes API は、unreachable_standby_host_name がピア ノードに接続できないことを示す警告メッセージを返します。
/nodes API が次の情報を返すことがあります。
{
"localClusterFailover": "MANUAL",
"localClusterHealth": "SSH_PROBLEM",
"localClusterState": [
{
"connectionString": "host=primary_host_IP user=repmgr dbname=repmgr connect_timeout=2",
"failover": {
"details": "ssh failed. command: ssh primary_host_IP /usr/bin/grep failover=manual /opt/vmware/vpostgres/10/etc/repmgr.conf",
"mode": "UNKNOWN",
"repmgrd": {
"details": "On node primary_node_ID (primary_host_name): repmgrd = n/a",
"status": "UNKNOWN"
}
},
"id": primary_node_ID,
"location": "default",
"name": "primary_host_name",
"nodeHealth": "UNHEALTHY",
"nodeRole": "PRIMARY",
"role": "primary",
"status": "? running",
"upstream": ""
},
{
"connectionString": "host=running_standby_host_IP user=repmgr dbname=repmgr connect_timeout=2",
"failover": {
"details": "ssh failed. command: ssh running_standby_host_IP /usr/bin/grep failover=manual /opt/vmware/vpostgres/10/etc/repmgr.conf",
"mode": "UNKNOWN",
"repmgrd": {
"details": "On node running_standby_node_ID (running_standby_host_name): repmgrd = n/a",
"status": "UNKNOWN"
}
},
"id": running_standby_node_ID,
"location": "default",
"name": "running_standby_host_name",
"nodeHealth": "UNHEALTHY",
"nodeRole": "STANDBY",
"role": "standby",
"status": "? running",
"upstream": "primary_host_name"
},
{
"connectionString": "host=unreachable_standby_host_IP user=repmgr dbname=repmgr connect_timeout=2",
"failover": {
"details": "failover = manual",
"mode": "MANUAL",
"repmgrd": {
"details": "On node unreachable_standby_node_ID (unreachable_standby_host_name): repmgrd = not applicable",
"status": "NOT APPLICABLE"
}
},
"id": unreachable_standby_node_ID,
"location": "default",
"name": "unreachable_standby_host_name",
"nodeHealth": "HEALTHY",
"nodeRole": "STANDBY",
"role": "standby",
"status": "running",
"upstream": "? primary_host_name"
}
],
"warnings": [
"unable to connect to node \"primary_host_name\" (ID: primary_node_ID)",
"unable to connect to node \"running_standby_host_name\" (ID: running_standby_node_ID)",
"unable to connect to node \"unreachable_standby_host_name\" (ID: unreachable_standby_node_ID)'s upstream node \"primary_host_name\" (ID: primary_node_ID)",
"unable to determine if node \"unreachable_standby_host_name\" (ID: unreachable_standby_node_ID) is attached to its upstream node \"primary_host_name\" (ID: primary_node_ID)"
]
}
原因
VMware Cloud Director は、postgres の SSH 証明書を NFS 共有転送サーバ ストレージに保存します。すべてのデータベース ノードが共有転送サーバ ストレージにアクセスできる必要があります。データベース ノードが信頼されない状態になった場合、つまり、postgres ユーザーの SSH 証明書が有効でなくなったか、アクセス不能になった場合、そのノードは SSH クライアントを使用してピア ノードからコマンドを実行できません。HA モードの場合、VMware Cloud Director アプライアンスはこの機能を使用して適切に動作する必要があります。