Master-slave репликация: убираем узкое горло СУБД

Мастер-слейв репликация: как убрать узкое горло СУБД

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Master-slave репликация: убираем узкое горло СУБД
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    983
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1244
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    998

Мастер-слейв репликация: как убрать узкое горло СУБД

Ваше веб-приложение тормозит на страницах с отчётами? База данных не справляется с наплывом пользователей, а единственный сервер — точка отказа. Мы сталкивались с этим десятки раз: SELECT-запросы блокируют INSERT, аналитические отчёты «роняют» production, а бэкапы на живой базе приводят к простою. Каждая такая проблема стоит времени и денег. Решение — настройка мастер-слейв репликации под ключ. Мы гарантируем отказоустойчивость и разгрузку основного сервера, проверенные на 100+ проектах.

Репликация Master-Slave (Primary-Replica в новой терминологии) — асинхронная или синхронная доставка данных с основного сервера на один или несколько реплик. Она позволяет масштабировать чтение: до 80% запросов можно направлять на реплики, оставляя мастер только для записи. Это снижает latency и исключает конкуренцию за ресурсы. С нашим опытом настройки более 50 проектов мы реализуем такую архитектуру за 1–3 дня.

Почему Master-Slave репликация критична для вашего приложения?

Без репликации вы рискуете:

  • Отказом — при сбое мастера данные недоступны до восстановления. Среднее время простоя вручную — 2–4 часа.
  • Деградацией — аналитические запросы блокируют запись, увеличивая TTFB в 3–5 раз.
  • Дорогими бэкапами — снятие дампа на мастере блокирует таблицы, вызывая простои.

По сравнению с единой базой, архитектура с одной репликой обрабатывает до 5 раз больше читающих запросов, а с ProxySQL — до 10 раз. Например, проект интернет-магазина после настройки репликации снизил время ответа на запросы отчётов с 12 до 0.8 секунды — в 15 раз быстрее.

Когда нужна синхронная репликация?

Синхронная репликация гарантирует нулевую потерю данных при сбое мастера. Она незаменима для финансовых транзакций или критичных к целостности данных. Однако цена — увеличение latency записи на 30–50% и снижение пропускной способности. Мы рекомендуем синхронный режим для ядра приложения, асинхронный — для аналитики.

Как мы настраиваем репликацию в PostgreSQL и MySQL?

Мы используем только проверенные подходы: streaming replication для PostgreSQL и GTID-репликацию для MySQL. В таблице — ключевые различия:

Параметр PostgreSQL MySQL
Режим по умолчанию Асинхронный Асинхронный
Синхронный режим synchronous_standby_names rpl_semi_sync_master
Инструмент инициализации pg_basebackup mysqldump + позиция / AUTO_POSITION
Маршрутизация pgBouncer / Pgpool-II ProxySQL / MySQL Router
Failover автоматический Patroni / repmgr Orchestrator / MHA

Типичные ошибки при настройке: некорректный wal_level (должен быть replica или logical), нехватка max_wal_senders для нескольких реплик, игнорирование replication lag (отсутствие мониторинга). Запись на реплику в read-only режиме приводит к рассинхронизации — это одна из частых причин отказа.

Пример конфигурации PostgreSQL мастера:

# postgresql.conf wal_level = replica max_wal_senders = 10 wal_keep_size = 1GB synchronous_commit = on synchronous_standby_names = 'replica1' 

Инициализация реплики:

pg_basebackup -h master -U replication -D /var/lib/postgresql/14/main -P -Xs -R 

Пример конфигурации MySQL мастера:

[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_format = ROW gtid_mode = ON enforce_gtid_consistency = ON 

Запуск реплики MySQL с GTID:

CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='replication', MASTER_PASSWORD='xxx', MASTER_AUTO_POSITION=1; START SLAVE; 

Маршрутизация через ProxySQL:

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, 'master', 3306); INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (20, 'replica', 3306); INSERT INTO mysql_query_rules(rule_id, active, match_pattern, destination_hostgroup) VALUES (1, 1, '^SELECT', 20), (2, 1, '.*', 10); LOAD MYSQL SERVERS TO RUNTIME; LOAD MYSQL QUERY RULES TO RUNTIME; 
Типичные ошибки при настройке
  • wal_level не установлен в replica — потоковая репликация не работает.
  • max_wal_senders слишком мал для числа реплик — реплики не могут подключиться.
  • Отсутствие мониторинга replication lag — лаг незаметен до критического момента.
  • Попытка записать данные на реплику в read-only — рассинхронизация.

Какие этапы включает настройка репликации?

Процесс включает следующие шаги:

  1. Аудит текущей нагрузки и архитектуры: измеряем пиковые RPS, latency, размер базы.
  2. Выбор топологии: одна реплика или несколько, асинхронная или синхронная.
  3. Конфигурация мастера: wal_level, max_wal_senders, gtid_mode.
  4. Инициализация реплик через pg_basebackup или mysqldump.
  5. Настройка маршрутизации (ProxySQL / pgBouncer) и разделения запросов на чтение/запись.
  6. Мониторинг лага: Prometheus + Grafana с алертами при лаге >60 секунд.
  7. Документация и обучение команды, передача скриптов failover.

Сравнение асинхронной и синхронной репликации

Параметр Асинхронная Синхронная
Latency записи Низкая (0.1–1 мс) Высокая (2–10 мс)
Потеря данных при сбое Возможна (до нескольких секунд) Нулевая
Пропускная способность Высокая Ниже на 30–50%
Нагрузка на мастер Минимальная Умеренная

Что входит в работу

  • Полная документация по конфигурации и процедуре failover.
  • Дампы и скрипты для быстрого восстановления.
  • Доступы к мониторингу (Grafana, алерты в Telegram).
  • Обучение команды: как проверять статус репликации и выполнять переключение.

Сколько это стоит и когда окупается?

Сроки зависят от сложности:

  • Одна реплика + базовый мониторинг — 1 день.
  • Репликация с ProxySQL и failover — 2–3 дня.

Стоимость рассчитывается индивидуально. Но инвестиции окупаются быстро: экономия на инфраструктуре за счёт реплик для чтения может достигать 40%, а время восстановления при сбое сокращается с часов до минут. Типовой проект окупается за 2–3 месяца. Если у вас уже есть проект — свяжитесь с нами для бесплатной оценки. Закажите настройку репликации и получите отказоустойчивую архитектуру.

PostgreSQL Documentation on Streaming Replication — подробности протокола репликации. MySQL GTID Replication — официальный мануал по настройке.