Архитектура процессов кластера YMatrix

Основные модули процессов

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

Процесс службы Supervisor

Известен как «генеральный менеджер» процессов кластера. Это системная служба, запускаемая при установке кластера и работающая с привилегиями root. Её основные функции:

  • Запуск и управление всеми остальными процессами YMatrix
  • Поддержание устойчивого состояния процессов
  • Обеспечение высокой доступности
  • Предоставление RPC-интерфейсов для внешнего управления

Supervisor является фундаментом для старта и мониторинга всех процессов кластера.

SOA-процессы (сервисы)

Выступают в роли «диспетчерского центра» кластера. Основаны на процессах серии mxbox и интегрируют все необходимые для распределённого управления сервисные возможности:

  • Управление топологией кластера (модуль cluster)
  • Планирование шардирования данных (модуль shard)
  • Репликация данных и отказоустойчивость (модуль replication)
  • Автоматизированное развёртывание (модуль deployer)

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

Процессы экземпляров базы данных

Являются «вычислительным ядром» кластера и работают на узлах Master, Standby и Segment. Их задачи:

  • Приём и разбор SQL-запросов
  • Выполнение операций хранения и вычислений
  • Ведение журналов и управление персистентностью данных
  • Обработка распределённых транзакций
  • Поддержка вспомогательных процессов (логирование, мониторинг и др.)

Описание ключевых процессов

supervisord

  • Роль: «Генеральный менеджер» процессов кластера.
  • Особенности:
    • Работает с правами root
    • Запускает, отслеживает и перезапускает процессы при сбоях
    • Поддерживает устойчивое состояние процессов для обеспечения высокой доступности
    • Конфигурационный файл: /etc/matrixdb6/supervisor.conf
  • Размещение: Устанавливается на всех узлах (Master, Standby, Segment); на каждом узле запущен свой экземпляр.

etcd

  • Роль: «Распределённый реестр» метаданных кластера.
  • Функции:
    • Хранит топологию кластера, статусы узлов, информацию о распределении шардов, параметры конфигурации и т.д.
    • Обеспечивает высокую доступность метаданных с помощью протокола Raft
  • Сетевые порты:
    • Клиентский порт (по умолчанию 4679)
    • Пиринговый порт (по умолчанию 4680)

Серия процессов mxbox

  • Роль: «Функциональный носитель» SOA-сервисов.
  • Основные модули и их функции:
Модуль Основная функция
mxbox cluster Управление топологией кластера, добавление/удаление узлов, синхронизация состояний
mxbox shard Распределение и планирование шардов, балансировка нагрузки, привязка шардов к Segment-узлам
mxbox replication Управление политиками репликации, синхронизация и переключение между Master–Standby и Primary–Mirror
mxbox deployer Автоматизированное развёртывание: инициализация узлов, установка ПО, синхронизация конфигураций и другие O&M-операции
  • Значение: Разделяет логику управления кластером на независимые модули, снижая сложность обслуживания. Через стандартизированные интерфейсы взаимодействует с supervisord и etcd, обеспечивая гибкость и эффективность эксплуатации.

Главный процесс postgres

  • Роль: «Движок обработки данных».
  • Конфигурации и функции по типам узлов:
Тип узла Роль процесса (gp_role) Пример запуска Основная функция
Master Dispatch (диспетчер) -p 5432 -D /mxdata/master/mxseg-1 Принимает подключения клиентов, строит распределённые планы запросов, координирует выполнение QE, агрегирует результаты
Standby Dispatch (резервный диспетчер) -p 5432 -D /mxdata/standby/mxseg-1 Синхронизирует данные с Master, обеспечивает отказоустойчивость, принимает роль Master при его сбое
Segment (Primary) Execute (исполнитель) -p 6000 -D /mxdata/primary/mxseg0 Хранит данные, выполняет Slice-задачи от QD, отправляет WAL-логи Mirror
Segment (Mirror) Execute (резервный исполнитель) -p 7001 -D /mxdata/mirror/mxseg6 Синхронизирует данные с Primary, обеспечивает резервирование, заменяет Primary при сбое
  • Дочерние процессы: От каждого главного postgres-процесса порождаются вспомогательные процессы — для логирования, оптимизации хранилища, обеспечения транзакций и т.д., совместно реализуя полный цикл обработки данных.

QD (Query Dispatcher)

  • Роль: «Интеллектуальный планировщик» запросов.
  • Функции:
    • Анализ и оптимизация запроса: разбор SQL, семантический анализ, генерация распределённого плана (разделение на Slice’ы)
    • Распределение задач: отправка Slice’ов на соответствующие Segment-узлы через протокол libpq, координация выполнения QE
    • Контроль и агрегация: приём статусов выполнения от QE (прогресс, ошибки), обработка исключений (например, досрочное завершение при достижении LIMIT), сбор и возврат финального результата клиенту

QE (Query Executor)

  • Роль: «Исполнитель на передовой» запросов.

  • Функции:

    • Выполнение задач: обработка Slice’ов от QD — фильтрация, агрегация, соединения, сортировка
    • Обмен данными: взаимодействие с другими QE через протокол interconnect (например, при выполнении Join между узлами)
    • Обратная связь: отправка статусов и ошибок QD, получение команд управления (например, отмена выполнения)
  • Особенности:

    • Жизненный цикл: привязан к сессии клиента; автоматически завершается после её окончания
    • Модель协作: внутри одного Gang’а все QE выполняют одинаковую логику Slice синхронно, обеспечивая согласованность обработки

Глобальный детектор взаимоблокировок (Global Deadlock Detector)

  • Роль: «Хранитель» от взаимоблокировок в распределённых транзакциях.

  • Функции:

    • Сбор информации о блокировках: регулярно опрашивает все Segment-узлы (блокировки таблиц, строк и т.д.)
    • Обнаружение взаимоблокировок: анализ зависимостей блокировок с помощью направленных графов для выявления как локальных, так и глобальных (межузловых) deadlock’ов
    • Обработка исключений: при обнаружении deadlock’а инициирует откат одной из транзакций, освобождает ресурсы и предотвращает деградацию производительности
  • Значение: В распределённой СУБД, где транзакции часто затрагивают несколько узлов, этот процесс критически важен для поддержания стабильности при высокой параллельности.

walwriter, walsender, walreceiver

  • Роль: «Железный треугольник» обеспечения согласованности данных.
  • Распределение обязанностей:
Процесс Размещение Функция
walwriter Master / Primary Записывает WAL-логи из памяти на диск, обеспечивая локальную персистентность
walsender Master / Primary Передаёт WAL-логи в реальном времени на Standby / Mirror
walreceiver Standby / Mirror Принимает WAL-логи от walsender и записывает их локально
  • Ценность: Благодаря синхронной передаче WAL достигается полная репликация данных между Master–Standby и Primary–Mirror. При отказе основного узла резервный может мгновенно восстановить актуальное состояние, гарантируя высокую доступность кластера.

Структура дерева процессов

Процессы кластера YMatrix имеют иерархическую древовидную структуру с корнем в supervisord. Ниже представлена организация ключевых процессов по функциональным группам.

Общая структура дерева процессов кластера

supervisord (корневой процесс)
├─ Уровень SOA-сервисов
│  ├─ mxbox cluster        (управление топологией кластера)
│  ├─ mxbox shard          (управление распределением шардов)
│  ├─ mxbox replication    (репликация данных и отказоустойчивость)
│  ├─ mxbox deployer       (автоматизированное развёртывание)
│  └─ etcd                 (хранилище метаданных кластера)
├─ Уровень системного управления и мониторинга
│  ├─ mxui                 (веб-интерфейс управления)
│  ├─ cylinder             (периодические задачи обслуживания)
│  └─ telegraf             (сбор и экспорт метрик мониторинга)
└─ Уровень экземпляров базы данных (разветвляется по типам узлов)
   ├─ MASTER-узлы
   │  ├─ postgres (основной процесс, gp_role=dispatch)
   │  │  ├─ Процессы логирования и базовой инфраструктуры (master logger, mxlogstat и др.)
   │  │  ├─ Процессы оптимизации хранилища (checkpointer, walwriter и др.)
   │  │  ├─ Процессы распределённых функций (dtx recovery, глобальный детектор взаимоблокировок и др.)
   │  │  └─ Процесс планирования запросов (QD: Query Dispatcher)
   │  └─ matrixgate warden (управление подключениями через шлюз)
   ├─ STANDBY-узлы
   │  └─ postgres (резервный процесс, gp_role=dispatch)
   │     ├─ Базовые процессы обеспечения (logger, checkpointer и др.)
   │     └─ Процессы синхронизации данных (walreceiver, startup recovering)
   └─ SEGMENT-узлы (Primary / Mirror)
      ├─ postgres (процесс экземпляра, gp_role=execute)
      │  ├─ Базовые процессы обеспечения (logger, mxlogstat и др.)
      │  └─ Процесс выполнения запросов (QE: Query Executor)
      ├─ Уникальные процессы Primary (walsender: отправка WAL-логов)
      └─ Уникальные процессы Mirror (walreceiver: приём WAL-логов, startup recovering: восстановление данных)

Другие ключевые процессы и их взаимосвязи

1. Сессионные процессы: связь между Master и данными узлами

Клиенты подключаются к узлу Master через протокол libpq. QD (Query Dispatcher) устанавливает соединения со всеми соответствующими QE (Query Executor) на Segment-узлах, формируя сквозную сессионную цепочку для совместного выполнения распределённых запросов.

Клиентская сессия
├─ Узел Master: postmaster (ожидает подключений) → создаёт дочерний процесс QD (планировщик, привязанный к сессии)
│  └─ QD подключается к postmaster каждого Segment-узла через протокол libpq
└─ Segment-узлы: postmaster → создаёт дочерний процесс QE (исполнитель, привязанный к сессии)
   ├─ Двунаправленная связь QD ↔ QE:
   │   - Управление и статус: протокол libpq
   │   - Обмен данными: протокол interconnect
   └─ Жизненный цикл сессии:
       - QD управляет разбором запроса, распределением плана и агрегацией результатов
       - QE выполняет конкретные операции обработки данных
2. Slice-процессы: основные единицы параллелизма запросов

Основная функция: сложные запросы разбиваются на несколько независимых параллельных задач (Slice’ов), каждая из которых выполняется отдельным QE на разных узлах, что значительно повышает эффективность обработки.

План запроса
└─ Разделяется на несколько Slice’ов (независимых вычислительных единиц) на основе операций Motion (перемещение данных)
   ├─ Каждый Slice представляет собой отдельную задачу обработки (фильтрация, агрегация, соединение и т.д.)
   ├─ Физический носитель: один QE-процесс выполняет один Slice
   └─ Иерархия: Producer Slice (выдаёт данные) → операция Motion → Consumer Slice (потребляет данные)
3. Gang: группы процессов для распределённого выполнения
Задача Slice
└─ Gang (группа процессов)
   ├─ Состав: все QE-процессы на разных Segment-узлах, выполняющие один и тот же Slice
   ├─ Особенность: QE внутри одного Gang’а работают синхронно, выполняя идентичную логику Slice
   └─ Назначение: обеспечивает согласованность параллельного выполнения одной и той же части запроса в распределённой среде,
                  позволяя эффективно координировать обработку данных между узлами