VMware Cloud Director는 노드 간의 동기식 스트리밍 복제를 유지 관리합니다. 대기 노드에 연결할 수 없는 상태가 되면 원인을 파악하고 문제를 해결해야 합니다.
문제
VMware Cloud Director 장치 관리 UI에 클러스터 상태가 DEGRADED으로 표시되고 대기 노드 중 하나의 상태가 ? 연결할 수 없음입니다.
/nodes
API는 localClusterHealth
가 DEGRADED이고 노드 status
는 ? 연결할 수 없음이며 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(Write-Ahead Logging)을 사용합니다. 기본 노드는 복제 및 복구 목적으로 WAL을 활성 대기 노드로 지속적으로 스트리밍합니다. 대기 노드는 WAL을 수신할 때 처리합니다. 대기 노드에 연결할 수 없는 경우 WAL 수신을 중지하며, 새로운 기본 노드로 승격할 후보가 될 수 없습니다.
해결책
- 연결할 수 없는 대기 노드의 가상 시스템이 실행되고 있는지 확인합니다.
- 대기 노드에 대한 네트워크 연결이 작동하는지 확인합니다.
- 대기 노드가 다른 노드와 통신하지 못하게 할 수 있는 SSH 문제가 없는지 확인합니다.
- 대기 노드의 vpostgres 서비스가 실행 중인지 확인합니다.