2016-11-21 6 views
0

주 서버PostgreSQL 핫 대기 WAL 파일 복원이 어떻게 트리거됩니까?

# postgresql.conf 
wal_level = hot_standby 
archive_mode = on 
archive_timeout = 10 
archive_command = 'test ! -f /archive/%f && cp %p /archive/%f' 

대기 서버

hot_standby = on 

나는 대기 $PGDATA/pg_xlog에 주 서버에 /archive/* 복사, 아무 일이 없다.

2016-11-21 17:56:09 CST [17762-3] LOG: invalid primary checkpoint record 
2016-11-21 17:56:09 CST [17762-4] LOG: record with zero length at 0/6000100 
2016-11-21 17:56:09 CST [17762-5] LOG: invalid secondary checkpoint record 
2016-11-21 17:56:09 CST [17762-6] PANIC: could not locate a valid checkpoint record 
2016-11-21 17:56:09 CST [17761-1] LOG: startup process (PID 17762) was terminated by signal 6: Aborted 
2016-11-21 17:56:09 CST [17761-2] LOG: aborting startup due to startup process failure 

질문 :

  1. 가 충분히 단순히에 $PGDATA/pg_xlog에 주 서버에 /archive/*를 복사하여 대기 서버로 데이터를 동기화하는 것입니다 내가 대기 서버를 다시 시작하면, 나는 서버 로그에서 오류 메시지를 가지고 대기?

  2. 상시 대기 서버에서 트리거되는 WAL 파일을 복원하는 방법과시기는 언제입니까? 대기 서버가 정기적으로 새로운 WAL 파일의 $PGDATA/pg_xlog 디렉토리를 확인합니까? 아니면 수동으로 트리거해야합니까? 나는 약 뜨거운 대기을 이야기하고

  3. 하지 스트리밍 복제; 그래서 나는 conninfo을 설정할 필요가 없다고 가정합니다. 내가 맞습니까?

  4. hot_standby = on을 구성하고 서버를 다시 시작한 후에도 오류없이 INSERT을 계속 수행 할 수 있습니다. 정말로 읽기 전용으로 설정하려면 어떻게해야합니까?

답변

2

대기 데이터베이스를 올바르게 초기화하지 않은 것처럼 보입니다.

로그 파일에는 유효한 검사 점을 찾을 수 없어서 PostgreSQL도 복제를 시작하지 않는다고 나와 있습니다.

대기 데이터 디렉토리에있는 backup_label 파일에는 어떤 내용이 들어 있습니까? 그 파일이 존재하지 않는다면 그것은 아마 문제 일 것입니다.

대기 모드가 갑자기 작동을 멈추거나 작동하지 않았습니까? 얼마나 정확하게 대기를 만들었습니까?

+0

단계 대기 모드를 만드는 단계는 다음과 같습니다. 1.'psql postgres -c "pg_start_backup ('backup')"'을 선택하십시오. 2. $ PGDATA 디렉토리를 대기 파일 시스템에 복사하십시오. 3.'psql postgres -c "pg_stop_backup()"'을 선택하십시오. 4.'postgresql.conf'에'hot_standby = on'을 설정하십시오. 5. postgresql 서버를 다시 시작하십시오. –

+0

(fsync = on 인 경우) 좋아 보인다. 아마도 당신은 충분한 WAL 아카이브를 복사하지 않았을 것이고'backup_label'의 체크 포인트를 포함하고있는 아카이브는 존재하지 않을 것입니다. 'backup_label' 파일을 가지고 있습니까? 'START WAL LOCATION'항목을 읽고 해당 WAL 파일이 있는지 확인하십시오. –

1

먼저 마스터의 저급 기본 백업에서 대기를 생성해야합니다. 수 없습니다 새 인스턴스를 만들고 pg_dumppg_restore 사용하십시오. 그게 당신이하려고했던 것 같아요.

적합한 기본 백업을 수행하는 가장 간단한 방법은 pg_basebackup을 사용하는 것입니다. 설명서에 다른 옵션이 설명되어 있지만 실제로는 다음을 사용하십시오.

또는 이와 유사한 것만 사용하십시오.

유효한 기본 백업을 가지고 나면 아카이브 복구 또는 스트리밍 복제를 시작할 수 있습니다. 가장 간단한 방법은 스트리밍 복제를 사용하는 것입니다. pg_basebackup-R 플래그를 전달하여이를 수행합니다.

아카이브 복구가 필요하면 restore_command을 대기실의 recovery.conf에 추가해야 아카이브 위치에서 대기로 아카이브가 복사됩니다.

모두는 the manual입니다.