데이터베이스 HA 구성을 사용하는 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를 통해 피어 노드 중 하나에 연결할 수 없기 때문에 페일오버 모드는 INDETERMINATE입니다. 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 클라이언트를 사용하여 피어 노드에서 명령을 실행할 수 없습니다. VMware Cloud Director 장치가 HA 모드에서 제대로 작동하려면 이 기능이 있어야 합니다.