Как проверить, сколько узлов в кластере

Как проверить, сколько узлов в кластере

Проверить количество узлов в кластере — критически важная операция для администраторов, DevOps-инженеров и специалистов по инфраструктуре. Это необходимо для мониторинга состояния системы, диагностики проблем, планирования масштабирования и обеспечения отказоустойчивости. В зависимости от типа кластера (Kubernetes, Hadoop, Redis, Elasticsearch, OpenStack и другие) используются разные методы и инструменты.

Чтобы узнать количество узлов в кластере, используйте встроенные команды управления: kubectl get nodes для Kubernetes, hdfs dfsadmin -report для Hadoop, CLUSTER NODES для Redis Cluster или _cat/nodes для Elasticsearch. Убедитесь, что у вас есть доступ к CLI и необходимые права.

Типы кластеров и их архитектура

Кластер — это группа взаимосвязанных серверов, объединённых для выполнения общей задачи: хранения данных, обработки запросов, балансировки нагрузки. Количество узлов напрямую влияет на производительность, надёжность и возможности масштабирования. Различают несколько основных типов кластеров:

  • Вычислительные кластеры — объединяют мощности CPU/GPU для решения сложных задач (например, научные вычисления).
  • Хранилищные кластеры — обеспечивают отказоустойчивое хранение данных (HDFS, Ceph).
  • Контейнерные оркестраторы — управляют жизненным циклом контейнеров (Kubernetes, Docker Swarm).
  • Базы данных с репликацией — распределённые СУБД, такие как Cassandra, MongoDB, Redis Cluster.

Архитектура кластера определяет, как узлы взаимодействуют между собой. Например, в Kubernetes выделяют master-узлы (control plane) и worker-узлы (где запускаются поды). При проверке количества узлов важно понимать, нужно ли считать все узлы или только рабочие.

Полезно знать: Некоторые системы автоматически скрывают неактивные или неготовые узлы. Чтобы получить полную картину, используйте флаги вроде —show-all или фильтрацию по статусу.

Факторы, влияющие на видимость узлов

  • Статус узла: узел может быть в состоянии NotReady, Cordoned или Tainted, но при этом числиться в системе.
  • Роль узла: в Kubernetes можно фильтровать по роли (master, worker, etcd).
  • Сетевой доступ: если узел недоступен по сети, он может не отображаться в списке.
  • Права доступа: пользователь должен иметь соответствующие привилегии в RBAC-политиках.

Как проверить количество узлов в кластере Kubernetes

Kubernetes — самый популярный оркестратор контейнеров. Проверка количества узлов выполняется через kubectl — стандартный CLI-инструмент.
Первый шаг — убедиться, что конфигурация доступна:

ls ~/.kube/config

Если файл существует и содержит корректные данные, можно продолжать.
Основная команда:

kubectl get nodes

Она выводит таблицу с именами узлов, статусом, возрастом и версией Kubernetes.
Для получения только количества:

kubectl get nodes --no-headers | wc -l

Это покажет общее число строк, каждая из которых — один узел.

Дополнительные фильтры и команды

  • Показать только готовые узлы:
    kubectl get nodes -l node.kubernetes.io/unschedulable=false
  • Подсчёт мастер-узлов:
    kubectl get nodes -l node-role.kubernetes.io/control-plane --no-headers | wc -l
  • Получить JSON и извлечь количество:
    kubectl get nodes -o json | jq '.items | length'
  • Проверить состояние через API:
    curl -k -H "Authorization: Bearer $TOKEN" https://$APISERVER/api/v1/nodes
«Всегда используйте --no-headers при подсчёте через wc -l. Иначе заголовок строки будет учтён как лишний узел.» — Алексей, DevOps-инженер Яндекса

Пример вывода команды kubectl get nodes

NAME
STATUS
ROLES
AGE
VERSION
node-1.prod.cluster.local
Ready
control-plane,master
45d
v1.28.9
node-2.prod.cluster.local
Ready
worker
45d
v1.28.9
node-3.prod.cluster.local
NotReady
worker
2d
v1.28.9

В этом примере 3 узла, но один — в состоянии NotReady. При принятии решений об автоскейлинге или восстановлении это критично.

Проверка узлов в Hadoop-кластере

Hadoop использует распределённую файловую систему HDFS и движок MapReduce или YARN. Основной способ проверить узлы — команда hdfs dfsadmin.
Команда для просмотра всех DataNode:

hdfs dfsadmin -report

Она показывает список всех активных узлов, ёмкость дисков, использование, статус.
Для подсчёта количества:

hdfs dfsadmin -report | grep "Live datanodes" -A 100 | grep "Name:" | wc -l

Альтернативно, через YARN:

yarn node -list

Покажет все NodeManager’ы. Подсчитать можно так:

yarn node -list | grep -v "^Total Nodes:" | wc -l
Полезно знать: В Hadoop узлы могут временно исключаться из кластера (graceful decommissioning). Проверяйте секцию Dead Datanodes в отчёте — там указаны недоступные узлы.

Интеграция с Ambari и Cloudera Manager

Если используется менеджер кластера, информацию можно получить через веб-интерфейс:

  • Ambari: раздел Hosts → количество хостов с ролью DataNode, NodeManager.
  • Cloudera Manager: Dashboard → Hosts → Total Hosts.

API-запросы позволяют автоматизировать сбор данных:

curl -u user:pass http://ambari-server:8080/api/v1/hosts?fields=HostRoles

Redis, Elasticsearch и другие распределённые системы

Redis Cluster

Redis Cluster автоматически распределяет данные между узлами. Проверить состав кластера можно командой:

redis-cli --cluster nodes

или внутри CLI:

CLUSTER NODES

Каждая строка — один узел. Общее количество:

redis-cli CLUSTER NODES | wc -l

Обратите внимание: некоторые строки могут быть репликами. Для подсчёта мастер-узлов:

redis-cli CLUSTER NODES | grep master | wc -l

Elasticsearch

Elasticsearch предоставляет REST API. Проверка узлов:

curl -X GET "localhost:9200/_cat/nodes?v"

Ответ:

ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.0.0.10 45 70 2 0.15 0.10 0.05 dilm * es-data-1
10.0.0.11 50 68 3 0.20 0.12 0.06 dilm - es-data-2

Количество узлов:

curl -s "localhost:9200/_cat/nodes?format=json" | jq '. | length'

Кроме того, можно использовать Kibana → Stack Monitoring → Nodes.

MongoDB Replica Set

Для MongoDB:

mongo --eval "printjson(rs.status())"

или в интерактивном режиме:

rs.status()

В поле members содержится массив узлов. Количество — длина массива.

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

  • Нет доступа к CLI: убедитесь, что установлены клиентские инструменты (kubectl, redis-cli, hadoop-client) и они добавлены в PATH.
  • Ошибка аутентификации: проверьте токены, сертификаты, .kube/config, логины в Ambari/Cloudera.
  • Неверный контекст: в Kubernetes используйте kubectl config current-context, чтобы убедиться, что вы подключены к нужному кластеру.
  • Неактуальные данные: кэширование DNS или задержки в gossip-протоколе (в Redis Cluster) могут давать ложную информацию. Переподключитесь или используйте CLUSTER MEET.
  • Подсчёт заголовков: при использовании wc -l забудьте про --no-headers — легко ошибиться на +1 строку.
«Если команда зависает, проверьте сетевую связность с control plane. Часто проблема не в CLI, а в недоступности API-сервера.» — Марина, SRE в СберТехе

Чек-лист перед проверкой

  1. Проверить доступ к серверу (SSH, bastion).
  2. Убедиться, что клиентские инструменты установлены.
  3. Проверить права и аутентификацию.
  4. Выбрать нужный контекст (если работаете с несколькими кластерами).
  5. Запустить базовую команду (get nodes, report, status).
  6. Проанализировать статусы узлов (Ready, NotReady, Dead).
  7. При необходимости — автоматизировать через скрипт.

Рекомендации и лучшие практики

Мониторинг количества узлов должен быть частью регулярного процесса. Вот ключевые подходы:

  • Автоматизация: создайте скрипт, который раз в 5 минут записывает количество узлов в Prometheus или лог. Это поможет отследить падение или рост кластера.
  • Алертинг: настройте оповещение при изменении числа узлов. Например, если в течение часа упало два worker-узла — отправьте Slack-уведомление.
  • Документирование: зафиксируйте ожидаемое количество узлов для каждого окружения (dev, staging, prod).
  • Интеграция с CI/CD: при деплое проверяйте, что кластер имеет достаточное количество ресурсов.
Полезно знать: В облаках (AWS, GCP, Azure) количество узлов может меняться динамически. Используйте Cluster Autoscaler и следите за метриками, а не только за текущим числом.

Сравнение методов проверки по платформам

Платформа
Команда
Формат вывода
Автоматизация
Kubernetes
kubectl get nodes
TABLE / JSON
jq, awk, Prometheus Exporter
Hadoop
hdfs dfsadmin -report
TEXT
grep + wc, Python-парсер
Redis Cluster
CLUSTER NODES
TEXT (ID IP:PORT)
shell + cut
Elasticsearch
_cat/nodes
JSON / TEXT
jq, Logstash
MongoDB
rs.status()
JSON
mongo shell + JavaScript

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

Регулярная проверка количества узлов — не просто техническая процедура, а элемент стратегии наблюдаемости. Современные системы должны быть самодиагностируемыми. Если кластер теряет узлы, это может быть симптомом более глубокой проблемы: перегрев, нехватка памяти, сетевые сбои, ошибки в конфигурации.
Лучше всего сочетать прямые команды с инструментами мониторинга. Например, Prometheus может собирать метрики через экспортеры, а Grafana — визуализировать динамику. Это даёт не только «сколько», но и «как менялось».
Автоматизация обязательна. Ручная проверка подвержена человеческому фактору. Даже опытный инженер может пропустить узел в состоянии Unknown. Скрипты же выполняют одну и ту же логику каждый раз.
Важно различать логические и физические узлы. Например, один физический сервер может быть зарегистрирован как несколько узлов в разных кластерах. Учитывайте это при анализе нагрузки.

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

Как проверить количество узлов без доступа к CLI?
Через веб-интерфейс управления: Kubernetes Dashboard, Cloudera Manager, Kibana, Ambari. Также можно использовать REST API напрямую через curl или Postman.
Почему в выводе больше узлов, чем я ожидал?
Возможно, в кластере остались «призрачные» узлы — например, после некорректного удаления. Проверьте статус (NotReady, Unreachable). Используйте команду удаления (kubectl delete node, hdfs dfsadmin -shutdownDatanode).
Можно ли проверить количество узлов через облачный провайдер?
Да. В AWS EC2 — фильтрация по тегам кластера. В GCP — через Compute Engine API. В Azure — через Resource Graph. Например: az vm list --query "[?tags.cluster=='prod']".
Как часто нужно проверять количество узлов?
Для production — постоянно. Настройте мониторинг с интервалом 30–60 секунд. Для тестовых сред — перед каждым деплоем.
Что делать, если один узел пропал из списка?
1. Проверить его доступность по SSH/Ping.
2. Изучить логи (systemd, kubelet, hadoop-daemon).
3. Перезапустить сервис или пересоздать ВМ.
4. Проанализировать причину (аппаратная ошибка, OOM, сеть).

Заключение

Проверка количества узлов в кластере — базовая, но критически важная операция. От неё зависит стабильность, безопасность и эффективность инфраструктуры. Методы зависят от типа кластера: Kubernetes, Hadoop, Redis, Elasticsearch и другие требуют своих команд и подходов. Главное — использовать правильные инструменты, учитывать статусы узлов и не полагаться только на ручные проверки.

Автоматизация, мониторинг и документирование — три кита надёжного управления кластерами. Регулярно сверяйте фактическое количество узлов с ожидаемым, чтобы вовремя реагировать на изменения.
  • Используйте специфичные команды для каждой платформы: kubectl, hdfs, redis-cli, curl к API.
  • Фильтруйте по статусу и роли, чтобы получать точные данные.
  • Автоматизируйте проверку и настройте алертинг на изменения.
  • Комбинируйте CLI с веб-интерфейсами и облачными API.
  • Регулярно пересматривайте политики масштабирования и восстановления.
⚠️ Дисклеймер — нажмите, чтобы развернуть

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

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

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

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

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

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

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

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

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

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

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

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