장치 데이터베이스가 실패한 후 데이터베이스 노드가 시작되어 실행되지 않거나, 마스터 노드가 실패할 때 모든 복제 노드가 동기화되지 않는 경우 다음 절차를 사용하여 데이터베이스 복구를 시도하십시오.

이 태스크 정보

이 절차는 비동기 모드로 실행 중인 클러스터에서 작업 중인 데이터베이스 노드가 없는 상황에 적용됩니다. 이 시나리오에서, 일반적으로 페이지를 로드하거나 새로 고치려고 시도하면 가상 장치 관리 인터페이스 페이지에 다음과 유사한 오류가 표시됩니다.

데이터베이스 서비스를 초기화하는 중 오류가 발생했습니다. 트랜잭션을 위해 JDBC 연결을 열 수 없습니다. 중첩된 예외는 org.postgresql.util.PSQLException입니다. 연결 시도가 실패했습니다.

프로시저

  1. 데이터베이스 노드 중 하나에서 가상 장치 관리 인터페이스를 사용하여 데이터베이스 복구를 시도합니다.
    1. 가능한 경우 가장 최근 상태인 노드의 가상 장치 관리 인터페이스 데이터베이스 페이지를 엽니다. 일반적으로 이 노드는 데이터베이스가 실패하기 전에 마스터 노드였던 노드입니다.
    2. 마스터 노드의 가상 장치 관리 인터페이스가 열리지 않으면 다른 복제 노드의 인터페이스를 열려고 시도합니다.
    3. 작동하는 가상 장치 관리 인터페이스가 있는 데이터베이스 노드를 찾을 수 있다면 수동 페일오버를 수행하여 복구를 시도합니다.
  2. 1단계의 절차가 실패하면 셸 세션을 시작하고 가장 최근 상태인 노드의 확인을 시도합니다. 사용 가능한 모든 클러스터 노드에 대한 셸 세션을 시작하고 다음 셸 명령을 실행하여 데이터베이스를 시작하려고 시도합니다. service vpostgres start
  3. 가장 최근 상태인 노드를 확인하려면 실행 중인 로컬 데이터베이스가 있는 각 노드에 대해 다음 절차를 사용합니다.
    1. 다음 명령을 실행하여 가장 최근 상태인 노드를 확인합니다. 명령이 f를 반환하면 이것이 가장 최근 상태인 노드이므로 4단계로 진행할 수 있습니다.
      su - postgres
      psql vcac
      vcac=# select pg_is_in_recovery();
       pg_is_in_recovery
      • 이 명령이 f를 반환하면 이 노드가 가장 최근 상태인 노드입니다.

      • 노드가 t를 반환하는 경우 해당 노드에서 다음 명령을 실행합니다.

      SELECT pg_last_xlog_receive_location() as receive_loc, pg_last_xlog_replay_location() as replay_loc, extract(epoch from pg_last_xact_replay_timestamp()) as replay_timestamp;

      이 명령은 다음과 비슷한 결과를 반환합니다.

      vcac=# SELECT pg_last_xlog_receive_location() as receive_loc, pg_last_xlog_replay_location() as replay_loc, extract(epoch from pg_last_xact_replay_timestamp()) as replay_timestamp;
       receive_loc | replay_loc | replay_timestamp
      -------------+------------+------------------
       0/20000000 | 0/203228A0 | 1491577215.68858
      (1 row)
      
  4. 각 노드에 대한 결과를 비교하여 가장 최근 상태인 노드가 무엇인지 확인합니다.

    receive_loc 열 아래에서 가장 큰 값이 있는 노드를 선택하고, 값이 같은 경우 replay_loc 열에서 가장 큰 값을 선택하고, 이 값도 같은 경우 replay_timestamp의 가장 큰 값이 있는 노드를 선택합니다.

  5. 가장 최근 상태인 노드에서 다음 명령을 실행합니다. vcac-vami psql-promote-master -force
  6. 텍스트 편집기에서 /etc/haproxy/conf.d/10-psql.cfg 파일을 열고 다음 줄을 업데이트합니다.
    server masterserver sc-rdops-vm06-dhcp-170-156.eng.vmware.com:5432 check on-marked-up shutdown-backup-sessions
    

    현재 노드 FQDN을 사용하여 다음과 같이 변경합니다.

    server masterserver current-node-fqdn:5432 check on-marked-up shutdown-backup-sessions
  7. 파일을 저장합니다.
  8. service haproxy restart 명령을 실행합니다.
  9. 가장 최근 노드에 대한 가상 장치 관리 인터페이스 데이터베이스 페이지를 엽니다.

    이 노드는 마스터 노드로 나타나야 하며 다른 노드는 잘못된 복제본으로 나타나야 합니다. 또한 해당 복제본에 대한 재설정 버튼이 사용되도록 설정됩니다.

  10. 클러스터 상태가 복구됨일 때까지 계속해서 각 복제본에 대한 재설정새로 고침을 클릭합니다.