이전 섹션에 설명 된 내장 윈 토토 모드에 대한 대안은 a를 사용하는 것입니다.Restore_Command
아카이브 위치를 폴링합니다. 이것은 8.4 이하 버전에서 사용할 수있는 유일한 옵션이었습니다. 이 설정에서 SETstatby_mode
OFF, 윈 토토 작동에 필요한 폴링을 직접 구현하고 있기 때문에. 참조PostgreSQL이것의 참조 구현 모듈.
이 모드에서 서버는 한 번에 한 번에 WAL 파일을 적용하므로 윈 토토 서버를 쿼리에 사용하면 마스터의 조치와 윈 토토에서 동작이 보이는 시간에 따라 웨이스 파일을 채우는 데 걸리는 시간에 따라 지연됩니다.archive_timeout
지연을 더 짧게하는 데 사용될 수 있습니다. 또한 스트리밍 복제를이 방법과 결합 할 수 없습니다.
기본 서버 및 윈 토토 서버에서 발생하는 작업은 일반적인 연속 보관 및 복구 작업입니다. 두 데이터베이스 서버 간의 유일한 접촉 지점은 공유 : 아카이브에 대한 기본 쓰기, 아카이브에서 윈 토토 읽기를 공유하는 WAL 파일의 아카이브입니다. 별도의 기본 서버의 WAL 아카이브가 함께 혼합되거나 혼란스러워지지 않도록주의해야합니다. 윈 토토 작동에만 필요한 경우 아카이브가 크지 않아도됩니다.
두 개의 느슨하게 결합 된 서버를 함께 작동하게 만드는 마법은 단순히 A입니다.Restore_Command
다음 WAL 파일을 요청할 때 기본에서 사용할 수 있기를 기다리는 윈 토토에서 사용됩니다. 그만큼Restore_command
에 지정됨복구 .conf
윈 토토 서버의 파일. 정상 복구 처리는 WAL 아카이브에서 파일을 요청하여 파일을 사용할 수없는 경우 실패를보고합니다. 윈 토토 처리의 경우 다음 WAL 파일을 사용할 수없는 것이 정상이므로 윈 토토는 나타날 때까지 기다려야합니다. 끝나는 파일의 경우.history
기다릴 필요가 없으며 0이 아닌 반환 코드를 반환해야합니다. 윈 토토Restore_Command
다음 WAL 파일의 존재를 위해 폴링 후 루프가있는 사용자 정의 스크립트로 작성할 수 있습니다. 장애 조치를 트리거하는 방법도 있어야하며, 이는를 방해해야합니다.Restore_command
, 루프를 나누고 파일 공간 오류를 윈 토토 서버에 반환합니다. 이로 인해 복구가 끝나고 윈 토토는 일반 서버로 나타납니다.
적절한 경우 PseudocodeRestore_command
is :
트리거 = 거짓; while (! nextwalfileready () &&! 트리거) 수면 (100000L); / * ~ 0.1 초 동안 기다리십시오 */ if (checkforexternaltrigger ()) 트리거 = 참으로;
윈 토토중인 작업 예Restore_command
에 제공됨PostgreSQL모듈. 위에서 설명한 논리를 올바르게 구현하는 방법에 대한 참조로 사용해야합니다. 특정 구성 및 환경을 지원하기 위해 필요에 따라 확장 할 수도 있습니다.
장애 조치를 트리거하는 방법은 계획 및 설계의 중요한 부분입니다. 잠재적 옵션 중 하나는입니다.Restore_command
명령. 각 WAL 파일에 대해 한 번 실행되지만을 실행하는 프로세스Restore_command
각 파일마다 생성되어 사망하므로 데몬 또는 서버 프로세스가 없으며 신호 또는 신호 처리기를 사용할 수 없습니다. 따라서Restore_command
는 장애 조치를 트리거하는 데 적합하지 않습니다. 간단한 타임 아웃 시설을 사용할 수 있습니다. 특히 알려진 사람과 함께 사용하는 경우archive_timeout
기본 설정. 그러나 네트워크 문제 나 바쁜 기본 서버가 장애 조치를 시작하기에 충분할 수 있으므로 이는 오류가 다소 오류가 발생합니다. 트리거 파일의 명시 적 생성과 같은 알림 메커니즘이 이상적입니다.
이 대체 방법을 사용하여 윈 토토 서버를 구성하기위한 짧은 절차는 다음과 같습니다. 각 단계에 대한 자세한 내용은 언급 된대로 이전 섹션을 참조하십시오.
두 개의 동일한 사본을 포함하여 가능한 한 거의 동일하게 기본 및 윈 토토 시스템을 설정하십시오.PostgreSQL같은 릴리스 레벨에서.
윈 토토 서버의 기본에서 WAL 아카이브 디렉토리로 연속 아카이브를 설정합니다. 확인archive_mode, archive_commandandarchive_timeout기본에서 적절하게 설정됩니다 (참조섹션 25.3.1).
기본 서버의 기본 백업을 만듭니다 (참조섹션 25.3.2),이 데이터를 윈 토토에로드하십시오.
a를 사용하여 로컬 WAL 아카이브에서 윈 토토 서버에서 복구를 시작하십시오복구 .conf
a를 지정합니다Restore_command
앞에서 설명한대로 윈 토토합니다 (섹션 25.3.4).
복구는 WAL 아카이브를 읽기 전용으로 취급하므로 WAL 파일이 윈 토토 시스템에 복사되면 윈 토토 데이터베이스 서버에서 읽는 것과 동시에 테이프에 복사 할 수 있습니다. 따라서 고 가용성을 위해 윈 토토 서버를 실행하는 것은 파일이 장기 재해 복구 목적으로 저장되는 것과 동시에 수행 할 수 있습니다.
테스트 목적으로 동일한 시스템에서 기본 서버 및 윈 토토 서버를 실행할 수 있습니다. 이것은 서버 견고성에 대한 가치있는 개선을 제공하지 않으며 HA로 묘사되지도 않습니다..
이 대체 방법을 사용하여 레코드 기반 로그 배송을 구현할 수도 있지만 사용자 지정 개발이 필요하며 전체 WAL 파일이 배송 된 후에도 핫 스탠드 쿼리로만 변경 될 수 있습니다..
외부 프로그램은를 호출 할 수 있습니다.pg_walfile_name_offset ()
함수 (참조PostgreSQL : 문서 : 11 : 9.26. 시스템 관리 스포츠 토토) WAL의 현재 끝에서 파일 이름과 정확한 바이트 오프셋을 찾으려면. 그런 다음 WAL 파일에 직접 액세스하고 대기 서버로의 현재 끝을 통해 WAL의 마지막 끝에서 데이터를 복사 할 수 있습니다. 이 접근법을 사용하면 데이터 손실의 창은 복사 프로그램의 폴링주기 시간이며, 이는 매우 작을 수 있으며 부분적으로 사용 된 세그먼트 파일을 보관할 수 있도록 대역폭이 낭비되지 않습니다. 대기 서버 'Restore_command
스크립트는 전체 WAL 파일 만 처리 할 수 있으므로 점진적으로 복사 된 데이터는 일반적으로 윈 토토 서버에서 사용할 수 없습니다. 1 차가 다가올 때만 사용됩니다. 마지막 부분 월 파일은 윈 토토에 공급되기 전에 윈 토토에 공급됩니다. 이 프로세스의 올바른 구현에는의 협력이 필요합니다.Restore_command
데이터 복사 프로그램이있는 스크립트.
시작PostgreSQL버전 9.0, 스트리밍 복제를 사용할 수 있습니다 (참조섹션 26.2.5) 노력으로 동일한 혜택을 달성하려면