PostgreSQL repmgr медленно инициализирует реплику.

Вопрос или проблема

У меня есть два узла postgresql, pg-0 и pg-1, мастер и реплика.
Они работают на разных машинах с пропускной способностью 25 Гбит/с, 8 ГБ ОЗУ и процессором AMD Epyc.

Внутри у меня 6 баз данных общим объемом 1,5 ГБ, то есть ничего огромного.

Это docker-compose.yaml для pg-1, pg-0 идентичен, за исключением переменных окружения REPMGR_NODE_NETWORK_NAME и REPMGR_NODE_NAME.

services:
  pg-1:
    image: bitnami/postgresql-repmgr:latest
    container_name: pg-1
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/postgresql/data
      - '/home/crminformatica/backup/:/bitnami/backup/'
    environment:
      - POSTGRESQL_PASSWORD=postgres
      - REPMGR_PASSWORD=repmgr
      - REPMGR_PRIMARY_HOST=pg-0
      - REPMGR_NODE_NETWORK_NAME=pg-1
      - REPMGR_NODE_NAME=pg-1
      - REPMGR_PARTNER_NODES=pg-0,pg-1
    ports:
      - 5432:5432

volumes:
  db-data:

При запуске узла реплики repmgr, насколько я понял, выполняет pg_basebackup, но для завершения требуется 1 час, что безумие, учитывая объем имеющихся данных.

Я пытался записывать процент завершения с помощью этого repmgr.conf, но, похоже, это ничего не делает.

restore_command_options="--progress --compress=9"
log_level = DEBUG
log_file="/var/log/repmgr/repmgr.log"

У меня была такая же проблема с pg_basebackup (без repmgr), и я пробовал сжатие и увеличение числа соединений реплики, но это не изменилось.

Что я могу сделать?

Ответ или решение

Инициализация реплики PostgreSQL с использованием repmgr может быть сложной задачей, особенно если процесс занимает больше времени, чем ожидается. В данном случае, вы описали ситуацию, где репликация базы данных объемом 1,5 Гб занимает около часа, что действительно кажется чрезмерным. Рассмотрим возможные причины этой проблемы и предложим решения, используя подход FOREST (F-First Feelings, O-Obstacles, R-Reassurances, E-Explanations, S-Suggestions, T-Testimonials/Support):

Первоначальные чувства (First Feelings): Ваше беспокойство о медленной репликации оправдано, особенно учитывая, что это может повлиять на производительность и доступность вашего приложения.

Препятствия (Obstacles): Разберем потенциальные причины такой задержки:

  1. Сетевые ограничения: Несмотря на заявленный пропускной канал в 25 Гбит/с, возможны узкие места в сети между вашими узлами, влияющие на производительность. Это может быть вызвано ограничениями оборудования или соседними службами, перегружающими сеть.

  2. Производительность дисковой подсистемы: Медленная работа диска на любом из узлов может вызвать задержки при чтении и записи. Проведите тесты скорости ввода-вывода на обоих серверах.

  3. Конфигурация сети и Docker: Возможно, Docker накладывает свои ограничения на производительность сети или обращение к файлам. Проверьте настройки Docker для оптимизации работы в вашей инфраструктуре.

  4. Параметры репликации и компрессии: Неправильные параметры команд для репликации могут также увеличить время копирования. Параметры вроде --compress=9 иногда ухудшают производительность из-за больших вычислительных нагрузок.

Уверенность (Reassurances): Эти проблемы являются распространенными, и есть ряд решений, которые могут помочь оптимизировать процесс.

Объяснения (Explanations): Вы уже изменили ряд конфигураций без заметного результата. Однако, логирование прогресса pg_basebackup не работает из-за того, что параметры могут быть неверно интерпретированы или не поддерживаться в указанной конфигурации.

Предложения (Suggestions):

  1. Тестирование сети: Проверьте задержки и скорость сети инструментами вроде iperf3, чтобы выявить узкие места.

  2. Оптимизация диска: Используйте инструменты как iostat или dd для проверки производительности дисковой подсистемы. Убедитесь, что уровень нагрузки допустим для выполнения бэкапов.

  3. Упрощение параметров: Попробуйте убрать или снизить степень компрессии, например до --compress=1, и проверьте изменения во времени.

  4. Прямая проверка pg_basebackup: Выполните ручной pg_basebackup вне Docker-контейнера для отладки и получения более детального логирования.

  5. Конфигурация Docker: Проверьте настройки сети Docker, такие как host или bridge network, и убедитесь в отсутствии ограничений.

  6. Журналирование и мониторинг: Настройте системное логирование (например, syslog), чтобы лучше отслеживать ресурсные потребности и поведение системы в процессе репликации.

Поддержка (Testimonials/Support): Если проблема не решится собственными усилиями, возможно, стоит обратиться к сообществу экспертов PostgreSQL или рассмотреть консультации с профессиональными поставщиками услуг по настройке баз данных.

Надеюсь, эти рекомендации помогут вам улучшить производительность репликации вашей базы данных.

Оцените материал
Добавить комментарий

Капча загружается...