핫 스탠바이 서버에서 pg_dump를 실행하고 있습니까?


21

면책 조항 : 나는 이것을 시도하지는 않았지만 제대로 작동하지 않는지 확실하지 않으므로 묻고 싶었습니다.

pg_dumpall스트리밍 복제를 실행하는 핫 스탠바이 서버에서 야간 백업 작업 (을 통해 )을 실행하여 기본로드를로드하지 않도록 하고 싶습니다 . 예를 들어 여기여기에 사람들이 겪었던 몇 가지 문제에 대한 언급 만 보았지만 지침은 거의 없습니다. 일관성이 있어야만 백업이 기본 백업보다 약간 뒤 떨어지더라도 괜찮습니다.

내 질문은 :

  1. 정말로이 작업을 원합니까, 아니면 주 서버에서 백업을 수행해야합니까? 왜?

  2. 대기에서 덤프를 수행 할 때 어떤 설정이 필요하고 올바르게 수행하기 위해 사용해야합니까? 예를 들어 백업 기간 동안 복제를 중지해야합니까?


복제가 대기 데이터베이스를 일관된 상태로 유지하면 백업이 일관 될 것으로 기대합니다. pg_dump설명서에 나와 있듯이 "데이터베이스를 동시에 사용하더라도 일관성있는 백업을 수행합니다." pg_dumpall각 데이터베이스에 대해 전자를 실행합니다.
dezso

답변:


21

pg_dump대기 모드 에서 실행되는 AFAIK 는 대기에 유용한 주요 기능 중 하나입니다. 완벽하게 신뢰할 수는 없지만 완벽하게 안전합니다. 마스터가 너무 많이 뒤쳐 질 때 대기가 트랜잭션을 중단하면 덤프가 실패 할 수 있습니다.

실제로 볼 필요가있는 유일한 것은 대기가 최신 상태이고 유지되고 있는지 확인하는 것입니다. 대기가 마스터와의 연결이 끊어지고 너무 멀리 떨어진 경우, 3 주가 지난 기한이 지난 대기를 백업하지 않으려 고합니다.

pg_dumpWAL 재생을 계속하려면 트랜잭션 을 취소해야하므로 백업 중에 대기가 마스터보다 훨씬 뒤쳐지게해야합니다 . 참조 뜨거운 대기에 대한 설명서 , 특히 "쿼리 충돌을 처리"섹션과 max_standby_archive_delaymax_standby_streaming_delay매개 변수를.

마스터는 슬레이브가 다시 따라 잡을 수 있도록 충분한 WAL 아카이브를 기꺼이 유지해야합니다.


12
  1. 대기 상태에서 백업을 수행하면 완벽하게 작동합니다.
  2. 대기 시스템에서 백업하는 동안 취소 된 명령문 충돌을 피하려면을 사용하여 대기에서 복제를 일시 중지 SELECT pg_xlog_replay_pause();한 다음 SELECT pg_xlog_replay_resume();복제가 다시 시작 되도록 실행이 완료되면 백업을 실행해야 합니다. 위의 명령을 실행하면 데이터베이스 크기에 따라 슬레이브에서 복구 지연이 발생할 수 있습니다. 또한 일시 중지 중에 슬레이브에서 재생되지 않으므로 WAL 세그먼트가 차지하는 공간을 고려하십시오.

문서 에서 다른 유용한 관리 기능을 찾을 수 있습니다 . 예를 들어, 서버를 일시 정지하기 전에 서버가 실제로 복구 중인지 확인하십시오 SELECT pg_is_in_recovery().


0

백업하는 동안 복제를 일시 중지하면 (이는 무결성과 일관성을 유지하는 것이 좋습니다) 마스터 postgresql에서 일부 행을 편집 할 수 있습니다.

백업이 습관적으로 지연되는 시간 마스터 노드가 복제를 재개하는 데 필요한 전체 x_log 파일을 보존해야합니다. postgresql.conf 편집에서 할 수 있습니다

wal_keep_segments = 32      # in logfile segments, 16MB each; 0 disables

이를 수정하지 않고 백업 프로세스가 너무 긴 경우 마스터 노드가 xlog 파일을 슬레이브로 보내기 전에 xlog 파일을 지우는 것일 수 있습니다.


이 설정은 스트리밍 복제에만 필요합니다. 정기적 인 복제를 사용하고 있으며 대기 Postgres 서버가 일시 중지 된 경우에도 월마트가 대기 호스트에 유지됩니다.
david.perez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.