Как проверить, сколько слейвов подключено

Как проверить, сколько слейвов подключено

Проверка количества подключённых слейвов — критически важная задача для администрирования распределённых систем, особенно в контексте баз данных и серверной инфраструктуры. В зависимости от используемой технологии (например, MySQL, Redis, PostgreSQL с репликацией или кастомные решения) применяются разные методы мониторинга. Главное — использовать встроенные команды или инструменты управления, которые предоставляют актуальную информацию о состоянии репликации.

Чтобы узнать количество подключённых слейвов, используйте специфичные для СУБД команды: в MySQL — SHOW SLAVE HOSTS или проверка на стороне мастера через Performance Schema; в Redis — INFO REPLICATION. Убедитесь, что репликация работает стабильно и нет отставания у нод.

Как проверить количество слейвов в MySQL

В архитектуре MySQL репликация строится по принципу master-slave, где мастер принимает все изменения, а слейвы получают их по протоколу бинарных логов. Чтобы определить, сколько реплик в данный момент подключено к мастеру, необходимо выполнить соответствующие SQL-запросы на стороне главного сервера.
Наиболее прямой способ — команда `SHOW SLAVE HOSTS`. Она выводит список всех рабочих хостов, зарегистрированных как слейвы. Однако важно понимать, что эта команда покажет только те серверы, которые были запущены с параметром `—report-host`, передающим своё имя мастеру при подключении.
Пример использования:

  1. Подключитесь к MySQL-мастеру через клиент: mysql -u root -p.
  2. Выполните: SHOW SLAVE HOSTS;.
  3. Проанализируйте результат: столбцы Server_id, Host, Port, Master_id.

Если команда ничего не возвращает, это может означать одно из трёх: слейвы не подключены, не задан --report-host, или используется GTID-репликация без явной регистрации.
Альтернативный подход — анализ таблицы `replication_connection_status` в schema `performance_schema`. Здесь можно получить более детальную информацию о текущем состоянии подключений:
«`sql
SELECT CHANNEL_NAME, SERVICE_STATE
FROM performance_schema.replication_connection_status;
«`
Кроме того, полезно проверять `replication_applier_status_by_worker`, чтобы убедиться, что события не только получены, но и применены.

Полезно знать: Команда SHOW SLAVE HOSTS работает только на стороне мастера и требует, чтобы слейвы имели уникальный server-id и активировали reporting. Если вы используете InnoDB Cluster или Group Replication, данные о членах кластера следует смотреть через cluster-specific команды.

Шаги для диагностики в MySQL

  • Убедитесь, что на слейвах установлен параметр report_host='имя_хоста' в my.cnf.
  • Проверьте, что переменная report_port указана, если используется нестандартный порт.
  • На мастере включите log_slave_updates, если нужна многоуровневая репликация.
  • Используйте SHOW PROCESSLIST для поиска потоков типа Slave_IO — они могут указывать на активные соединения.
Команда
Где выполняется
Что показывает
Ограничения
SHOW SLAVE HOSTS
Мастер
Список зарегистрированных слейвов
Требует report-host, не видит GTID-нод без регистрации
Performance Schema
Мастер/слейв
Статус подключения и применения событий
Нужно включить в конфигурации
SHOW REPLICA STATUS
Слейв
Информация о подключении к мастеру
Выполняется на стороне реплики

Определение числа слейвов в Redis

Redis традиционно использует простую модель master-slave репликации. Каждый слейв подключается к мастеру и синхронизирует данные. Проверка количества подключённых слейвов — одна из стандартных операций мониторинга.
Основной способ — команда `INFO REPLICATION`. Она возвращает подробный отчёт о репликационной топологии. На мастере в разделе connected_slaves будет указано точное число активных реплик.
Пример вывода:

# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.10,port=6379,state=online,offset=123456,lag=1
slave1:ip=192.168.1.11,port=6379,state=online,offset=123450,lag=2
master_replid:8a7b6c5d4e3f2...
master_repl_offset:123456

Здесь строка connected_slaves:2 говорит, что два слейва подключены. Далее идёт детализация по каждому: IP, порт, состояние, отставание (lag).
Если вы видите connected_slaves:0, но ожидаете подключения, стоит проверить:

  • Доступность порта 6379 на мастере (через firewall).
  • Правильность настройки slaveof на стороне реплики (в redis.conf или через команду).
  • Наличие ошибок в логах Redis на обеих сторонах.
«Всегда проверяйте параметр lag — он показывает, на сколько секунд слейв отстаёт от мастера. Значение выше 10–15 секунд может указывать на проблемы с сетью или нагрузкой.» — Алексей, DevOps-инженер

Автоматическая проверка в Redis

Для автоматизации можно написать скрипт на Bash или Python, который будет парсить вывод `INFO REPLICATION`:
«`bash
redis-cli INFO REPLICATION | grep connected_slaves
«`
Или через Python с использованием библиотеки redis-py:
«`python
import redis
r = redis.Redis(host=’localhost’, port=6379, db=0)
info = r.info(‘replication’)
print(f»Подключено слейвов: {info[‘connected_slaves’]}»)
«`

Полезно знать: В Redis 5.0 и выше рекомендуется использовать термин «replica» вместо «slave». Соответственно, в новых версиях документации и интерфейсах используется команда replica, хотя старые команды сохранены для обратной совместимости.

Репликация в PostgreSQL: как отслеживать подключение реплик

PostgreSQL использует механизм streaming replication, при котором слейвы (в терминологии PG — standby-серверы) подключаются к мастеру (primary) и получают WAL-логи в реальном времени. Количество подключённых реплик можно определить несколькими способами.
Основной запрос — к представлению `pg_stat_replication`:
«`sql
SELECT client_addr, application_name, state, sync_state FROM pg_stat_replication;
«`
Он покажет всех активных подключённых реплик: их IP-адреса, имена приложений (часто совпадают с именем слейва), состояние (streaming, catchup) и тип синхронизации (async/sync).
Если запрос возвращает пустой результат, значит, ни один слейв не подключён. Возможные причины:

  • Сервис на слейве не запущен.
  • Ошибка в файле recovery.conf или postgresql.auto.conf (в версиях 12+).
  • Заблокирован порт 5432 или отказано в доступе через pg_hba.conf.

Важно, чтобы в `pg_hba.conf` на мастере было разрешено подключение от IP-адресов реплик:
«`
host replication replicator 192.168.1.10/32 md5
«`
Здесь `replicator` — пользователь с правами REPLICATION.

Мониторинг через системные таблицы

Дополнительно можно использовать:

  • `pg_stat_wal_receiver` — на стороне слейва, показывает статус приёмника WAL.
  • `pg_current_wal_lsn()` и `pg_last_wal_receive_lsn()` — для сравнения позиций и вычисления отставания.
  • Логи PostgreSQL: ключевые строки вроде started streaming WAL from primary подтверждают успешное подключение.
«Отслеживайте параметр write_lag и flush_lag — они показывают, насколько реплика отстаёт в записи и подтверждении данных. Это критично для обеспечения согласованности.» — Марина, SRE-инженер

Проверка подключения на сетевом уровне

Если стандартные команды не дают результата, стоит перейти на уровень сети. Часто проблема не в СУБД, а в сетевой доступности или firewall.
Первый шаг — проверить, слушает ли мастер нужный порт. Используйте `netstat` или `ss`:
«`bash
ss -tulnp | grep :3306 # для MySQL
ss -tulnp | grep :6379 # для Redis
ss -tulnp | grep :5432 # для PostgreSQL
«`
Если порт не слушается — проблема в запуске сервиса.
Далее — проверка активных подключений. Например, для MySQL:
«`bash
ss -tnp | grep :3306 | grep ESTAB
«`
Каждое установленное соединение (ESTAB) от слейва будет отображаться здесь. Можно дополнительно отфильтровать по IP:
«`bash
ss -tn src 192.168.1.10 dst 192.168.1.1:3306
«`
Альтернатива — `lsof`:
«`bash
lsof -i :3306 | grep ESTABLISHED
«`

Проверка через telnet или nc

Иногда достаточно проверить доступность порта с хоста слейва:
«`bash
telnet master-host 3306
«`
Если соединение не устанавливается, возможны следующие причины:

  • Фаервол блокирует порт (iptables, ufw, cloud security groups).
  • Сервер не привязан к внешнему интерфейсу (bind-address = 127.0.0.1 вместо 0.0.0.0).
  • DNS-проблемы: хост не разрешается по имени.
Полезно знать: В облачных средах (AWS, GCP, Azure) обязательно проверяйте Security Groups / Firewall Rules. Часто порты открыты внутри сети, но недоступны между зонами или VPC.

Инструменты мониторинга и автоматизация контроля

Ручные проверки хороши для разового анализа, но в продакшене необходима автоматизация. Современные системы мониторинга позволяют отслеживать количество слейвов в реальном времени и отправлять алерты при отклонениях.
Популярные решения:

  • Zabbix — позволяет создавать пользовательские шаблоны для MySQL, Redis, PostgreSQL с триггерами на изменение числа реплик.
  • Prometheus + Grafana — сбор метрик через экспортеры (mysqld_exporter, redis_exporter, postgres_exporter). Например, метрика redis_connected_slaves сразу покажет число подключений.
  • Nagios / Icinga — проверки через плагины check_mysql_replication, check_redis.

Пример метрики в Prometheus:
«`
# HELP redis_connected_slaves Number of connected replicas
# TYPE redis_connected_slaves gauge
redis_connected_slaves{instance=»redis-master:6379″} 2
«`
На основе этой метрики можно построить дашборд в Grafana и настроить алерт: «Если количество слейвов < 1 в течение 2 минут — уведомить команду».

Самописные скрипты для регулярной проверки

Если вы не используете полноценную систему мониторинга, можно написать простой cron-скрипт:
«`bash
#!/bin/bash
SLAVES=$(redis-cli INFO REPLICATION | grep -oP ‘connected_slaves:Kd+’)
if [ «$SLAVES» -lt 1 ]; then
echo «ALERT: No slaves connected to Redis master» | mail -s «Replication Alert» admin@company.com
fi
«`
Такой скрипт можно запускать каждые 5 минут через cron.

«Автоматизация — не роскошь, а необходимость. Даже небольшое приложение может потерять данные при падении мастера без работающих реплик.» — Дмитрий, архитектор высоконагруженных систем

Типичные ошибки и как их избежать

При диагностике подключения слейвов администраторы часто сталкиваются с типовыми проблемами. Ниже — частые ошибки и пути их решения.

  • SHOW SLAVE HOSTS возвращает пустой результат — чаще всего из-за отсутствия --report-host на слейве. Решение: добавить параметр в my.cnf и перезапустить MySQL.
  • Слейв подключён, но не получает данные — проверьте, включена ли репликация (START SLAVE;) и нет ли ошибок в SHOW REPLICA STATUSG (например, mismatch UUID).
  • Redis показывает 0 слейвов, но подключение есть — возможно, используется TLS/SSL, и клиент не проходит аутентификацию. Проверьте сертификаты и настройки шифрования.
  • PostgreSQL: ошибка FATAL: no pg_hba.conf entry — добавьте строку в pg_hba.conf и выполните SELECT pg_reload_conf();.
Ошибка
Система
Причина
Решение
connected_slaves:0
Redis
Слейв не подключился или отключился
Проверить сеть, логи, команду slaveof
SHOW SLAVE HOSTS — пусто
MySQL
Не задан report-host
Добавить report-host в конфиг слейва
pg_stat_replication пуст
PostgreSQL
pg_hba.conf не разрешает replication
Добавить запись для пользователя replicator
Ошибка 1045 (Access denied)
Любая
Неверные учётные данные
Проверить логин, пароль, права пользователя

Экспертное мнение

Регулярный контроль числа подключённых реплик — фундамент надёжности системы. Не стоит полагаться только на единичные проверки. Лучшая практика — комплексный подход: использование встроенных команд СУБД, сетевой диагностики и систем мониторинга.
Ключевые принципы:

  • Всегда имейте как минимум одну работающую реплику.
  • Мониторьте не только факт подключения, но и отставание (lag).
  • Регулярно тестируйте failover — убедитесь, что слейв может стать мастером.
  • Используйте единые имена и теги для слейвов — это упрощает диагностику.

В современных системах репликация — не просто резервирование, а основа масштабирования чтения, географического распределения и отказоустойчивости. Пренебрежение её контролем ведёт к рискам потери данных и простоя сервиса.

Вопросы и ответы

Можно ли проверить количество слейвов без доступа к мастеру?
Да, но косвенно. На каждом слейве можно выполнить SHOW REPLICA STATUS (MySQL) или INFO REPLICATION (Redis), чтобы убедиться, что он подключён к мастеру. Однако общее количество реплик узнать без доступа к мастеру невозможно.
Почему слейв отображается, но не синхронизируется?
Частые причины: повреждение бинарных логов, несовпадение GTID, остановка потока IO или SQL. Проверьте Seconds_Behind_Master и наличие ошибок в Last_Error. Также может быть достигнут лимит дискового пространства.
Как проверить, является ли сервер мастером или слейвом?
В MySQL: SHOW REPLICA STATUSG — если ошибка, возможно, это мастер. В Redis: INFO REPLICATION — если role:master, то мастер. В PostgreSQL: SELECT pg_is_in_recovery(); — TRUE означает, что это слейв.
Можно ли иметь слейва без постоянного подключения?
Да, в режиме логической репликации или при использовании логов (WAL-архивы). Однако такой слейв не будет считаться «подключённым» и не сможет быстро принять роль мастера.

Заключение

Проверка количества подключённых слейвов — обязательная процедура для обеспечения отказоустойчивости и целостности данных. Каждая СУБД предоставляет свои инструменты: от `SHOW SLAVE HOSTS` в MySQL до `INFO REPLICATION` в Redis и `pg_stat_replication` в PostgreSQL. Ключевое — не просто зафиксировать число, а понимать состояние каждой реплики: подключена ли она, синхронизируется ли, есть ли отставание.

Регулярный мониторинг, автоматизация и тестирование аварийного переключения — основа стабильной работы распределённой системы. Не ждите сбоя, чтобы обнаружить, что у вас нет работающих реплик.
  • Используйте встроенные команды СУБД для получения точных данных о репликах.
  • Контролируйте не только подключение, но и отставание (lag) и статус синхронизации.
  • Настройте систему мониторинга для непрерывного наблюдения и оповещения.
  • Проверяйте сетевую доступность и настройки безопасности (firewall, pg_hba.conf).
  • Регулярно тестируйте сценарии отказа, чтобы убедиться в готовности реплик.
⚠️ Дисклеймер — нажмите, чтобы развернуть

Материалы, опубликованные в разделе «Блог» на сайте RU DESIGN SHOP (rudesignshop.ru), носят исключительно информационный и ознакомительный характер и не являются руководством к действию, финансовой рекомендацией, медицинской услугой, ветеринарным назначением либо рекламой товаров и услуг, включая азартные игры. Публикации не содержат призывов к участию в азартных играх и не направлены на продвижение соответствующих операторов.

Безопасность применения товаров и веществ: при использовании строительных материалов, бытовой химии, пестицидов и агрохимикатов необходимо строго следовать инструкциям производителя и действующему законодательству Российской Федерации, включая Федеральный закон РФ от 19.07.1997 № 109-ФЗ «О безопасном обращении с пестицидами и агрохимикатами».

Упоминание товарных знаков, брендов и организаций носит исключительно информационный характер и не означает наличие партнёрских отношений или одобрения со стороны правообладателей.

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

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

Правовая ответственность: решения, принятые на основе опубликованной информации, пользователь принимает самостоятельно и на свой риск; редакция и авторы несут ответственность в пределах, установленных законодательством Российской Федерации.

Редакция не допускает публикаций, содержащих пропаганду экстремизма, терроризма, наркотических средств или суицида; подобные материалы подлежат немедленному удалению.

Упоминание организаций с ограниченным статусом: компания Meta Platforms Inc. (социальные сети Facebook и Instagram) признана экстремистской организацией решением суда РФ, её деятельность запрещена на территории Российской Федерации; любые упоминания приводятся исключительно в информационных целях.

Авторские права и источники: информация собирается из открытых источников; её актуальность указывается на дату публикации и может изменяться.

Изображения и иллюстрации используются на условиях, разрешённых правообладателями. При возникновении претензий редакция готова оперативно рассмотреть обращение и внести необходимые изменения.

Персональные данные и cookies: сайт использует cookies и обрабатывает персональные данные пользователей в соответствии с Федеральным законом № 152-ФЗ «О персональных данных» и Политикой конфиденциальности RU DESIGN SHOP.

Мнения авторов могут не совпадать с позицией государственных органов или коммерческих организаций, упомянутых в материалах.