Добрый день, коллеги.
Было: мастер и два слейва (streaming replication, PostgreSQL 9.0.4)
Мастер умер насильственной смертью.
Один из слейвов был сделан мастером.
Натравляю на него второй слейв, в логах постоянно повторяется:
22708 2011-10-14 18:56:28 MSDFATAL: timeline 2 of the PRIMARY does NOT match recovery target timeline 1 11807 2011-10-14 18:56:31 MSDLOG: restored log file "000000010000001900000005" FROM archive 11807 2011-10-14 18:56:31 MSDLOG: invalid record length at 19/547D280
Гугл молчит, как рыба об лед.
Any ideas?
Очевидно, что второй слейв
Очевидно, что второй слейв ожидает от мастера того состояния, которое мастер ему предоставить не может. Мне кажется выход один - заинициализировать слейв по новой и синхронизировать с новым мастером.
Не совсем понял про
Не совсем понял про состояния.
А чтобы заинициализировать слейв по новой - надо мастера тормозить.
Не очень бы хотелось.
Я думаю так (именно я думаю,
Я думаю так (именно я думаю, не претендую на истину в последней инстанции)
Когда мастер сдох, слейв запомнил его определённое состояние с которого надо начинать синхронизацию. Естественно, когда поднялся новый мастер, его состояние было другим, поэтому слейв не находит место с которого должен начать синхронизацию.
Состояние в данном случае (опять же как я понимаю) - это некий номер в WAL
Ммм... А как тогда быть в
Ммм...
А как тогда быть в такой ситуации?
Можно как-то слейву принудительно сказать, что мастер главный, в не зависимости от?
Для этого надо состояние
Для этого надо состояние мастера прокинуть на слейв. Т.е. как там рекомендуется - сделать полный бакап мастера вместе с WAL, развернуть всё это на слейве и затем сказать слейву, что у него новый мастер. Как-то так. Подробностей не знаю - попробуйте доки попилить. И вроде как мастер для этого совсем не обязательно останавливать - только слейв.
Без остановки мастера бэкап
Без остановки мастера бэкап можно сделать только с помощью pg_dump, AFAIK.
Но тогда никаких WAL мы не получим.
В любом случае - спасибо большое.
Пойду перечитывать доки.