powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / replication_slot не переезжает при смене мастера
11 сообщений из 11, страница 1 из 1
replication_slot не переезжает при смене мастера
    #40124236
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
postgres 11, patroni, кластер

в игноре вписан ручной логический слот репликации для голденгейта
Код: java
1.
2.
3.
4.
5.
ignore_slots:
  - name: ignored_logical_slot_name
    type: logical
    database: my_db
    plugin: test_decoding


при свичовере, слот на другую башку становящуюся мастером не переезжает, а остается в той базке, где был создан
при фэйловере вообще пропадает

как-то можно его "возить" за мастером?)
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40124237
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexVin,

погодите, дайте осмыслить: вы сами руками слот, которых хотите сохранять при переключениях, указали в ignore_slots - но удивляетесь, почему его не копирует патрони при переключении? Ну даже не знаю, что добавить.
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40124238
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а кастомный слот можно написать в slots: и всё будет перезжать?
я как-то побоялся)
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40124239
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я вот не понял "slots: define permanent replication slots." это то, что юзает сам патрони для переключения или это список всех слотов, которые просто должны ездить?
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40124306
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если я не вписываю имя слота ни в slots: ни в ignore_slots:
и даю команду от голденгейта на его создание, то гг говорит всё норм создано, в логах постгреса всё норм создано
Код: java
1.
2.
3.
4.
2021-12-31 08:14:24.160 MSK [5032] LOG:  logical decoding found consistent point at 0/1902A78
2021-12-31 08:14:24.160 MSK [5032] DETAIL:  There are no running transactions.
2021-12-31 08:14:24.160 MSK [5032] STATEMENT:  select slot_name from 
pg_create_logical_replication_slot('epg_8f625735c8aacd90','test_decoding')


а слот появляется (удалось раз таки заметить, что он появился) и пропадает
о пропадании в логах постгреса ничего нет, и про этот слот в логах патрони ничего не нашел
(на постгресе без патрони он создается и существует без проблем)

где в логах можно найти кто его удалил и за что?
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40124307
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PATRONI_LOG_LEVEL="DEBUG"
но ведь это явно его рук дело - удаление слота
только где о том запись?
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40124344
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ответит на какие-то вопросы Логическая репликация и переключение ролей на публикующей стороне

В итоге, написал два скрипта, один проверяет является ли сервер репликой и если ДА, дропает слоты, второй проверяет является ли сервер репликой и если НЕТ, создает (при отсутствии) нужные слоты. Запускаются раз в минуту из крона.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
--- Создает слоты логической репликации на мастере
--- psql -d dbname -U postgres -f slots_create.sql
--- */1	*	*	*	*	psql -d dbname -U postgres -f ~/slots/slots_create.sql > /dev/null 2>&1
--- 
select 
pg_create_logical_replication_slot(s.name, 'pgoutput') 
from (
  values
    ('slot1_sub')
   ,('slot2_sub')
   ,('slot3_sub')
   ,('slot4_sub')
  ) s(name) 
where 
  not pg_is_in_recovery() and
  not exists (select 1 from pg_replication_slots where slot_type='logical' and slot_name=s.name);
  




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
--- Удаляет слоты если сервер реплика
--- --- psql -d dbname -U postgres -f slots_drop.sql
--- */1	*	*	*	*	psql -d dbname -U postgres -f ~/slots/slots_drop.sql > /dev/null 2>&1
---
select 
  pg_drop_replication_slot(s.name) 
from (
  values
    ('slot1_sub')
   ,('slot2_sub')
   ,('slot3_sub')
   ,('slot4_sub')
  ) s(name) 
where 
  pg_is_in_recovery() and
  exists (select 1 from pg_replication_slots where slot_type='logical' and slot_name=s.name);




По поводу Patroni, сильно не углублялся, но да, patroni дропает не свои слоты.
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40124892
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так я правильно или наивно верю, что на физическую синхронную реплику
патрони перевезет логический слот голденгейта, если я его укажу в конфиге в slots:,
без потерь "невычитанного содержимого"?
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40124898
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexVin
так я правильно или наивно верю, что на физическую синхронную реплику
патрони перевезет логический слот голденгейта, если я его укажу в конфиге в slots:,
без потерь "невычитанного содержимого"?


Тут тестировать надо потому что как это делает патрони - никто не знает.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40124944
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сложно тестировать, потому что микросекунды между "улетело/не улетело" практически невозможно поймать
даже если тысячу раз при большой нагрузке пострелять постгресу в башку, без слов - "мы действительно хотели обеспечить такую работу" - это так себе уверенность...
правда, когда "хотели", остается ещё сомнение как "сделали")))
я стопнул гг, апдейтнул строку, сделал свичовер, включил гг и апдейт долтел куда надо - вот это я проверил)
...
Рейтинг: 0 / 0
replication_slot не переезжает при смене мастера
    #40125031
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexVin
сложно тестировать, потому что микросекунды между "улетело/не улетело" практически невозможно поймать
даже если тысячу раз при большой нагрузке пострелять постгресу в башку, без слов - "мы действительно хотели обеспечить такую работу" - это так себе уверенность...
правда, когда "хотели", остается ещё сомнение как "сделали")))
я стопнул гг, апдейтнул строку, сделал свичовер, включил гг и апдейт долтел куда надо - вот это я проверил)


Тестировать я имел в виду конечно изучать как вообще patroni этот слот переносит...
как из него читают
и как вообще перенос слота работает при switchover
(т.е. в среднем работает, но тестировались ли граничные редкие сценарии - я не знаю).

именно потому что там весьма всё нетривиально с т.з. переключений и самой логики работы - я предпочитаю триггерные механизмы с очередями типа pgq а не logical decoding для таких задач (хотя их сложнее админить но при этом их логика работы прозрачнее и проще в отладке).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / replication_slot не переезжает при смене мастера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]