Модуль управления кластерными вычислениями QLUSTER
Назначение и общая архитектура
QLUSTER — это программный модуль, предназначенный для управления распределенными задачами в кластере. В основе QLUSTER лежит протокол согласования состояний QRaft, который обеспечивает согласованность и отказоустойчивость кластерных операций.
QLUSTER обеспечивает:
- Управление жизненным циклом задач и состояний с помощью QRaft.
- Взаимодействие с внешними системами посредством API-интерфейсов.
- Планирование и маршрутизацию вычислительных задач по узлам кластера.
Компоненты:
Рисунок 1. Компоненты кластера

Установка QLUSTER
Для установки QLUSTER необходимо скачать бинарный файл, настроить службу запуска и создать конфигурационный файл config.yaml, который определяет поведение узла в кластерной среде.
Установка бинарного файла
- Скопируйте бинарный файл QLUSTER на сервер, предназначенный для запуска в составе кластера.
- Убедитесь, что бинарный файл доступен пользователю qhb.
Создание службы systemd
Создайте на основе бинарного файла системную службу для управления запуском QLUSTER как демоном. Служба должна работать от имени пользователя qhb.
Пример (/etc/systemd/system/qluster.service):
[Unit]
Description=QLUSTER service
After=network.target
[Service]
User=qhb
ExecStart=/usr/local/bin/qluster --config /etc/qluster/config.yaml
Restart=always
[Install]
WantedBy=multi-user.target
Активируйте службу:
sudo systemctl daemon-reexec
sudo systemctl enable qluster
sudo systemctl start qluster
Настройка конфигурационного файла
Конфигурация узла QLUSTER задается через файл config.yaml, который должен лежать рядом с бинарным файлом или по указанному пути. Пример содержимого:
ip: "ip адрес сервера"
api-port: 8080
udp:
socket:
group: "udp мультикаст адрес:порт должен быть одинаковый на всех узлах"
interface: "имя сетевого интерфейса для udp multicast"
pacing-rate: 268435456
loopback: false
send-buffer-size: 1048576
recv-buffer-size: 1048576
max-log-size: 64000
send-buffer-capacity: 256
recv-buffer-capacity: 256
cluster:
node-timeout: 30s
heartbeat-interval: 10s
pre-voting-timeout: 10s
leader-voting-timeout: 10s
quorum-replication: true
replication-factor: 0
replication-retry-interval: 1s
autoremove-enabled: false
autoremove-minimum: 3
remove-interval: 1m
hello-retry-interval: 1s
Примечание
Значения параметров должны быть синхронизированы между всеми узлами кластера, особенно поля udp.socket.group, interface и pacing-rate.
Ключевые параметры:
- node-timeout — максимальное время ожидания ответа от текущего лидера до начала процедуры предвыборов.
- pre-voting-timeout — продолжительность стадии предвыборов (pre-vote), на которой узлы оценивают возможность начала выборов.
- leader-voting-timeout — максимальное время, отведенное на проведение выборов лидера (vote round).
- heartbeat-interval — интервал между heartbeat-сигналами, которые рассылает лидер для подтверждения активности.
- replication-factor — количество реплик (узлов), которым необходимо доставить запись лога перед ее фиксацией (по умолчанию 0 — используется значение по кворуму).
- quorum-replication — включение репликации по кворуму: запись считается подтвержденной, если доставлена хотя бы n/2 + 1 узлам.
- replication-retry-interval — интервал, через который производится повторная попытка репликации лога в случае сбоя.
- autoremove-enabled — автоматическое исключение узлов из кластера, если они недоступны для большинства (кворума).
- autoremove-minimum — минимальное количество узлов в кластере, при котором допускается срабатывание механизма автоудаления.
Переинициализация кластера под управлением QLUSTER
Иногда требуется полностью переинициализировать кластер. Для этого нужно выполнить следующие действия:
- Остановить службы (qluster, qcp):
systemctl stop qluster
systemctl stop qcp
- Очистить каталоги баз данных командой:
rm -rf /opt/qhb-data/*
- На ведущем узле удалить файл /qluster/add_node:
rm /qluster/add_node
- Удалить содержимое сетевого каталога для архива WAL:
rm /opt/qhb-backup/wal/*
Можно объединить эти действия в две команды для основного узла и для других узлов:
systemctl stop qluster && rm /opt/qhb-backup/wal/* && rm /qluster/add_node && rm -rf /opt/qhb-data/* # для основного узла-лидера
systemctl stop qluster && rm -rf /opt/qhb-data/* # для узлов-реплик qhb
Далее нужно последовательно с небольшими паузами поднять службу qluster на всех трех узлах с QHB, начиная с узла-лидера, где был удален файл /qluster/add_node:
systemctl start qluster
При этом на узле-лидере будет автоматически проинициализирован каталог баз данных, а на узлах-репликах будут автоматически созданы реплики. Используются временные слоты репликации, которые создаются автоматически при необходимости.
Если при тестировании используется QCP, необходимо поднять на четвертом хосте службу qcp:
systemctl start qcp
Список команд
- Запуск службы QLUSTER:
systemctl start qluster
- Остановка службы QLUSTER:
systemctl stop qluster
- Перезапуск службы QLUSTER:
systemctl restart qluster
- Проверка статуса службы:
systemctl status qluster
- Чтение логов QLUSTER:
journalctl -u qluster --since "2025-08-12 15:12:00"
Некоторые данные можно также получать через Swagger или напрямую через REST-интерфейс.
Важные особенности
В случае остановки QHB при работающей qcp та начинает интенсивно пытаться установить связь с неработающим QHB, и в скором времени системный лог очень сильно увеличивается в размерах, что приводит к заполнению всего доступного пространства. После устранения причин генерации логов (запуск QHB или остановка qcp) нужно очистить системный журнал от имени пользователя root следующей командой:
truncate -s 0 /var/log/syslog # Очистка системного журнала в Ubuntu