스트리밍 복제를 사용하고 있고 이 상태에 있는 것으로 보이는 두 개의 데이터베이스가 있습니다.

postgres 16319  0.0  0.5 137949952 3077260 ?   Ss   Aug22   0:11 /usr/pgsql-12/bin/postmaster -D /var/lib/pgsql/12/data/
postgres 16321  0.0  0.0 249564  2080 ?        Ss   Aug22   0:00  \_ postgres: logger
postgres 16322  7.3  5.2 137950296 27899272 ?  Ss   Aug22 9031:16  \_ postgres: startup   recovering 0000000100003EA70000002C
postgres 16323  0.8  5.2 137950152 27549964 ?  Ss   Aug22 1001:55  \_ postgres: checkpointer
postgres 16324  0.0  0.1 137949928 1050960 ?   Ss   Aug22   1:40  \_ postgres: background writer
postgres 16338  0.0  0.0 251960  2328 ?        Ss   Aug22  57:32  \_ postgres: stats collector
postgres 16339 10.6  0.0 137961464 5116 ?      Ss   Aug22 13123:06  \_ postgres: walreceiver   streaming 3EA7/2C5A24F0

나는 일반적으로 DB 상태가 좋지 않을 때만 '복구 중'을 발견했습니다. 내가 얻은 복제본에 대한 쿼리를 실행했을 때

ERROR:  canceling statement due to conflict with recovery

"스트리밍 3EA7/2C5A24F0"이 있고 복구가 증가하고 있습니다.

또한 SELECT * FROM pg_stat_wal_receiver증가하는 것으로 보입니다.

내 DB에 문제가 없는지 확인하고 recovery복제 mechinisim의 일부로 사용하고 있습니다.

answer

스트리밍 복제 매뉴얼 에 설명된 대로 미리 쓰기 로그를 전송하여 Postgres 복제를 설정하면 예, 모든 복제본이 정상적인 영구 복구 상태에 있습니다. 쓰기 트랜잭션이 마스터 노드에 대해 수행되면 복제본은 복구 중인 모든 Postgres 서버와 마찬가지로 마스터에서 로그를 수신하고 적용합니다.

보이는 변경 번호는 현재 수신된 트랜잭션 ID입니다.

자세한 내용을 확인하려면 링크된 전체 페이지를 읽으십시오. 나로서는 승격되지 않는 한 대기(슬레이브) 서버가 실제로 지속적으로 복구를 수행하는 것이 분명하다.