Ответы пользователя по тегу Репликация
  • Как избежать ошибки запрошенный segment wal уже удалён?

    Melkij
    @Melkij
    PostgreSQL DBA
    wal_keep_size размером больше ожидаемого лага репликации по объёму wal (это место будет занято постоянно, зато из-за этого не угрожает уронить мастер по переполнению диска)

    либо использовать слоты репликации. Очень желательно с разумным max_slot_wal_keep_size, чтобы забытый слот репликации умер, а не уронил мастер по исчерпанию места на диске.

    либо архив wal, но если не нужен для других задач, то чаще используется wal_keep_size или слоты репликации
    Ответ написан
  • Postgres потоковая репликация Master-Slame как очиcтить архив wal?

    Melkij
    @Melkij
    PostgreSQL DBA
    Нафиг вам вообще archive_command, если нужна только потоковая репликация?

    Архив wal - это когда нужен point in time recovery либо особые случаи file shipping репликации (например, нужна реплика где-то без возможности подключиться к мастеру по сети)
    Ответ написан
    5 комментариев
  • Potsgres 13 - как реализовать систему Master-Master?

    Melkij
    @Melkij
    PostgreSQL DBA
    Никак.

    Если очень хотите головной боли и новых аварий по ночам вместо того чтобы спокойно спать - возьмите какой-нибудь autofailover типа patroni и прочих.

    Критичная проблема фундаментальна - CAP теорема в целом и последствия split brain в частности.
    Ответ написан
    2 комментария
  • Какие требования к физической репликации Postgresql 11?

    Melkij
    @Melkij
    PostgreSQL DBA
    major версия обязана совпадать, обязаны совпадать ряд флагов компиляции и некоторые настройки.

    с centos 7 на убунту 20.04 реплицировать можно, но вы гарантированно попадаете на изменение правил сортировки строк в libc: https://wiki.postgresql.org/wiki/Locale_data_changes
    Для переезда на другую ОС годится (подняли реплику, в нужный момент переключили на неё мастер и реиндексировали пострадавшие индексы), для долговременной работы уже не очень вариант.
    Ответ написан
    2 комментария
  • Как ускорить работу слота репликации на PostgreSQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    Скорей всего упираетесь в производительность IO на временных файлах, увеличение logical_decoding_work_mem с этим должно помочь.
    Затем посмотрите, не упираетесь ли в 100% cpu на этом процессе. logical decoding однопоточный, ему важна производительность в один поток. Тут ничего не поможет. Прочитать, понять и переупорядочить данные среди гигабайтов wal'ов всё равно придётся.
    Ответ написан
    Комментировать
  • Как изменить путь к логу postgresql на работающей реплике?

    Melkij
    @Melkij
    PostgreSQL DBA
    Создал реплику, все реплицируется. Но у нее нет postgresql.conf

    Всё у неё есть. Без config_file postgresql вовсе не запустится с ошибкой "could not access the server configuration file".
    Ищите где потеряли.
    show config_file;
    на запущенной базе.
    Ответ написан
  • Как организовать репликацию баз данных с одним и тем-же именем в Postgres?

    Melkij
    @Melkij
    PostgreSQL DBA
    Репликация физическая:
    реплицировать несколько мастеров в один слейв невозможно
    можете запустить нужное число реплик на разных портах одной системы. Имена баз соответственно безразличны.

    Репликация логическая:
    я сильно удивлюсь если для какой-то из реализаций логической репликации будет проблемой разные имена баз. Но логическая репликация это логическая репликация. Про DDL операции надо будет помнить и вносить соответствующим образом.
    Ответ написан
    3 комментария
  • Как организовать синхронную репликацию БД PostgreSQL на географически удаленных серверах?

    Melkij
    @Melkij
    PostgreSQL DBA
    Берёте и настраиваете.
    По настройкам сети - любые извращения, лишь бы у вас был открыт tcp порт (тот на котором слушает ведущий, 5432 обычно) от реплики к ведущему.
    За синхронность репликации отвечает synchronous_standby_names при включенном synchronous_commit

    Учтите что синхронная репликация при географическом распределении - больно. Именно жирным шрифтом. Как по производительности, так и по стабильности работы на запись данных - если чуть что с сетью - то ведущая база у вас ничего писать не будет пока не почините сеть. Потому что синхронная репликация.
    Ответ написан
    Комментировать
  • Как сделать репликацию PostgreSQL и распределение нагрузки с учётом нагрузки от записи, а не чтения?

    Melkij
    @Melkij
    PostgreSQL DBA
    Внимание вопрос: зачем?

    100 записей в секунду и 5 чтений в минуту - это ни о чём.
    Писать 10000 записей в секунду - ну и? Никакой проблемы держать на одной железке и это в обычном OLTP, а не 99% write/1% read как у вас.

    Взять адекватные диски, выкинуть к чертям докер. А для hot standby масштабировать запись не нужно. Простая и надёжная потоковая реплика.

    монго можно разделить на X нод без шаманских танцев с бубном

    Спасибо, хорошая шутка.

    На всякий случай: вы ведь поминаете что никакая репликация для масштабирования записи не может помочь? Если каждый хост должен содержать копию данных - значит он должен все данные записать. Для масштабирования записи - шардирование верное слово. Только это не про сотни транзакций записей.
    Ответ написан
    1 комментарий
  • Почему может не реплицирвоватся База Данных postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    выводы \l+ и \dt+ в проблемной базе на мастере и реплике совпадают?

    При потоковой репликации реплика является точной бинарной копией мастера.
    гипотезы:
    повреждена база, но активности в ней нет и потому остаётся незамеченным
    лишние файлы на мастере
    Ответ написан
  • Возможна ли репликация с 10 postgres серверов на один общий сервер?

    Melkij
    @Melkij
    PostgreSQL DBA
    как более правильно выполнять репликацию

    А что хотите-то?

    Штатной логической репликацией (pg 10 и выше) или через pglogical или даже триггерной репликацией можете реплицировать в одну базу. Корректное внесение DDL за свой счёт.
    Для физической репликации - репликация строго 1:1, потому разные инстансы базы. Всякие докеры абсолютно не нужны для этого. Разворачиваете реплики в разных директориях и на разных listen портах и всё. В ubuntu/debian штатные скрипты pg_ctlcluster даже есть чтобы инстансами удобно рулить.
    Ответ написан
    1 комментарий
  • При асинхронной репликации postgresql-10 можно ли изменить конфиг слейва под другое железо или это исключено?

    Melkij
    @Melkij
    PostgreSQL DBA
    Для потоковой репликации необходимо, чтобы на реплике были установлены следующие настройки:
    wal_level с мастера не ниже replica
    max_connections, max_worker_processes, max_prepared_transactions, max_locks_per_transaction равные или больше чем на мастере.
    Для порядка упомяну, что аппаратная архитектура процессора должна быть идентичная, с x86-64 на arm реплицировать не выйдет.
    Всё остальное может различаться. Главное чтобы диски на репликах успевали писать поток изменений.
    Ответ написан
    Комментировать
  • Postgresql-10 как работает логическая репликация из коробки(вопросы по теме под катом)?

    Melkij
    @Melkij
    PostgreSQL DBA
    1) Можно ли создать логическую репликацию на уровне схемы

    Нет.
    Ответ есть даже в мануале: https://www.postgresql.org/docs/10/sql-createpubli...
    Банально нет даже синтаксиса для создания публикации схемы.

    2) Связи между таблицами также будут реплицыроватся?

    Что вы имеете в виду?
    DDL вы переносите на подписчиков сами. Реплицируются только данные
    TRUNCATE and DDL operations are not published.

    truncate начали реплицировать в pg11. Репликации DDL нет и не будет как минимум ещё в pg12, на данный момент нет ни черновых патчей ни даже обсуждений таковой реализации.

    То есть так, как вы, видимо, хотите настроить паблишера и он сам всем будет заниматься - не выйдет.

    PS: есть некоторая терминологическая путаница, как англоязычная так и русскоязычная, schema и схема как namespace или schema и схема говоря о структуре базы, т.е. DDL
    Ответ написан
    Комментировать
  • Перенос MySQL c InnoDB на другой сервер без длительно остановки?

    Melkij
    @Melkij
    PostgreSQL DBA
    Раз небольшая остановка сервиса допустима (времени около пары минут), то никакого мастер-мастер!
    0) Поднимаете реплику мастер-слейв (имеющийся сервер мастер, новый - слейв)
    1) когда слейв догнал мастера, останавливаете сервис (если сайт - вешаете заглушку "зайдите через пару минут")
    2) разбираете реплику
    3) правите конфиги сервиса, чтобы тот обращался к новому серверу
    4) включаете сервис.

    Пару лет назад на работе с нашим сисадмином именно так мигрировали. Без проблем с первой попытки и простой пара минут суммарно.
    Ответ написан
    3 комментария