Судя по всему, доставка журналов postgresql не работает
Есть два сервера. Одним из них является сервер базы данных на месте; другой - сервер резервного копирования вне сайта. Поскольку локальный сервер базы данных уже содержит всего лишь 900 ГБ данных, резервные копии очень важны. Первоначально мы использовали ежедневный pg_dumpall
, но по соображениям производительности это больше не вариант.
Так как обновление сервера базы данных, включая обновление самого postgresql (с postgresql 9.1 до 9.4), в любом случае должно было произойти, я решил попытаться использовать доставку WAL на сторонний сервер, чтобы резервные копии работали. Вот что я сделал до сих пор:
- Создать новый кластер на новом сервере
- Остановите сервер базы данных на новом сервере, rsync каталог данных на стороннем сервере (чтобы у меня была базовая резервная копия)
- Настройте postgresql.conf на новом сервере, чтобы
wal_level
установлен вhot_standby
,archive_mode
вon
, а такжеarchive_command
вtest ! -f /srv/pg_wal/%f && cp %p /srv/pg_wal/%f
- Запустите кластер на новом сервере
ssh oldserver pg_dumpall | psql
читать в данных, которые генерируют большое количество сегментов WAL- Скопируйте сегменты WAL по довольно медленной линии связи (от 1 до 6 Мбит, в зависимости от времени суток) на сторонний сервер. Это заняло несколько дней
- Создать
restore.conf
в каталоге данных стороннего сервера, содержащемrestore_command = 'cp /srv/pg_wal/%f "%p"'
а такжеstandby_mode = on
, - Запустил postgresql на стороннем сервере
- Понял, что это должно было быть
recovery.conf
, поэтому снова остановил сервер и переместил файл на правильное имя.
К сожалению, это не похоже на работу. Когда я смотрю на файл журнала прямо сейчас, я вижу следующее:
2016-07-25 12:30:59 CEST [137390-71] LOG: record with zero length at 0/2000200
2016-07-25 12:31:04 CEST [137390-72] LOG: restored log file "000000010000000000000002" from archive
2016-07-25 12:31:04 CEST [137390-73] LOG: record with zero length at 0/2000200
2016-07-25 12:31:09 CEST [137390-74] LOG: restored log file "000000010000000000000002" from archive
Это повторяется снова и снова.
Проверка pg_xlog
каталог на стороннем сервере показывает, что там есть два файла: один 000000010000000000000002
, которая имеет ту же контрольную сумму, что и с тем же именем в /srv/pg_wal
; другой...03, чего нет.
мой /srv/pg_wal
содержит все сегменты WAL, включая также 000000010000000000000001
(самый первый сегмент, который сделал оригинальный сервер базы данных). Тем не менее, я не могу загрузить их на сторонний сервер.
Вопрос: могу ли я в данной ситуации каким-то образом втиснуть внешний сервер, чтобы он по-прежнему принимал эти журналы WAL? Если так, как я должен продолжить?
Технически я мог бы создать новую базовую резервную копию и скопировать ее на новый сервер, но из-за большого количества данных, уже находящихся на сервере сейчас, и низкой пропускной способности между двумя сайтами, я бы предпочел не делать этого, если я могу избежать Это.