Перейти к содержанию

Структура программы

Тип гипервизора

SpaceVM является гипервизором 1 типа, то есть устанавливается на «голое железо» (bare-metal). Для установки модулей SpaceVM не требуется отдельной установки базовой ОС общего назначения. Установка модулей производится с дистрибутива непосредственно на физический сервер без предварительной установки дополнительного ПО.

Объем дистрибутива

Объем установочного дистрибутива равен примерно 2 Гбайт.

Структура ПО

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

  1. Взаимодействие между модулями организовано на базе прямой адресации объектов в пределах одной подсистемы или же с использованием буферизированных средств взаимодействия (файлы, сокеты и сигналы).

  2. Структурная схема SpaceVM

    Рис. 1

  3. Менеджер конфигурации (МК) представляет собой программный комплекс, предназначенный для управления SpaceVM.

    В состав МК входят следующие используемые программные продукты:

    • ПО, распространяемое в рамках лицензий GNU/GPL;

    • ПО Apache License 2.0.

    Web-интерфейс МК, RESTful API-интерфейс и логика управления являются продуктами собственной разработки с применением языков программирования JavaScript, Python, bash, С, Ruby.

SpaceVM

SpaceVM — это программное обеспечение на базе Linux.

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

Примечание

При соблюдении требования установки (обновления) ПО только с репозиториев вендора корректное функционирование SpaceVM. При необходимости использования дополнительного (стороннего) ПО необходимо связаться с технической поддержкой вендора.

Управление ВМ

Управление ВМ обеспечивается модулем-гипервизором qemu-kvm, входящим в состав ТОС. Гипервизор qemu-kvm устанавливается непосредственно на физический сервер вместе с ТОС с дистрибутива SpaceVM и отдельной установки не требует.

Супервизор узла

Супервизор узла — это python сервис в SpaceVM под именем в CLI node-engine. Сервис занимается запуском, остановкой и мониторингом состояния дочерних демонов.

Список дочерних демонов указан в таблице в порядке очередности запуска (может незначительно меняться в зависимости от версии).

Название Описание
RpcServer Сервис связи с контроллером
RpcExecuteDaemon Сервис выполнения операций от контроллера
DomainStatus Сервис обработки статистики по ВМ (цикл раз в 5 секунд)
EventCollector Сервис сбора сообщений о жизненном цикле от виртуальных машин
DomainStatistics Сервис отправки статусов виртуальных машин контроллеру (цикл раз в 5 секунд)
Ballooning Сервис Ballooning узла (цикл раз в 5 секунд)
StorageStatus Сервис распознавания всех подключенных хранилищ и их вложенных сущностей (цикл раз в 30 секунд)
HeartBeat Сервис обновления состояния связи узла с контроллером и кворумом (цикл раз в 15 секунд)
StorageHeartbeat Сервис связности узла с контроллером и кворумом через файлы в сетевых пулах данных (цикл раз в 5 секунд)
NetworkStatus Сервис распознавания всех сетевых сущностей на узле (цикл раз в 30 секунд)
ClusterStatus Сервис определения и работы лидера кластера (цикл раз в 30 секунд)
HardwareStatus Сервис проверки состояния железа (цикл раз в 180 секунд)
LibvirtCollector Сервис сбора детальной статистики виртуальных машин (цикл раз в 5 секунд)
ControllerEventListener Сервис получения дополнительных сообщений от контроллера
SnmpMibExtender Сервис сбора статистики и расширения стандартного MIB для получения Space-специфичной информации (цикл раз в 30 секунд)
WsDataHandler Сервис получения сигналов базы данных, фильтрования их и отправления их демону терминации WS-соединений
RecoveryDaemon Демон, поднимающий ВМ, которые помечены как high available

Супервизор контроллера

Супервизор контроллера — это python сервис в SpaceVM под именем в CLI controller-engine. Сервис занимается запуском, остановкой и мониторингом состояния дочерних демонов.

Список дочерних демонов указан в таблице в порядке очередности запуска (может незначительно меняться в зависимости от версии).

Название Описание
GRPCManager Демон связи с узлами
StorageEventListener Демон, прослушивающий очередь со статусами хранилищ от узлов
NetworkEventListener Демон, прослушивающий очередь со статусами сети от узлов
DomainEventListener Демон, прослушивающий очередь со статусами ВМ от узлов
Events Демон, сохраняющий сообщения о выполненных командах в CLI, сообщениях от узла и от загрузчика файлов
HeartBeatDaemon Демон, осуществляющий проверку доступности узлов и ставящий задачи на ограждение недоступных узлов (цикл раз в 5 секунд)
NodeControllerManager Демон управления узлами и контроллером
TaskProcessor Демон выставления статусов и выполнения success/failed методов функций
TaskPreProcessor Демон сбора результатов выполнения задач с узлов
MultiTaskProcessor Демон обработки запросов на выполнение следующей по счету задачи в рамках мультизадач
MultiTaskLevelProcessor Демон, реализующий логику запуска задач текущего уровня мультизадачи
TaskChecker Демон запуска задач по расписанию и проверки активных и завершенных задач на узлах (цикл раз в 15 секунд)
TaskProgressWatcher Демон выставления прогресса задач после получения прогресса от узлов
DomainStatus Демон обработки статистики ВМ с узлов
StorageStatus Демон обработки статусов хранилищ с узлов
NetworkStatus Демон обработки статусов сети с узлов
ClusterStatus Демон проверки загрузки узлов и доступности ВМ (цикл раз в 90 секунд)
DRSDaemon Демон распределения нагрузки между узлами (цикл раз в 5 секунд)
Fencer Демон, осуществляющий ограждение узлов
RecoveryDaemon Демон, поднимающий ВМ, которые помечены как high available
WsDataHandler Сервис получения сигналов базы данных, фильтрования и отправления их демону терминации WS-соединений
ControllerHerald Демон, получающий дополнительную информацию от API и рассылающий ее узлам

Описание сервисов

Примечание

Список сервисов отличается в зависимости от типа установки и версии.

Пример в CLI

Название Описание Расположение или просмотр журналов
controller-engine Супервизор контроллера /var/log/veil/controller/controller.log
controller-web-api Web-сервер контроллера /var/log/veil/controller/django.log
controller-websockets Асинхронный сервис WS-соединений (принимает запросы на подписки пользователей и отправляет данные об изменениях в базе данных подписчикам) /var/log/veil/controller/veil_async.log
controller-web-proxy Асинхронный прокси-сервер контроллера между nginx и Web-сервером контроллера /var/log/veil/controller/veil_async.log
controller-web-uploader Асинхронный сервис контроллера загрузки файлов в пулы данных /var/log/veil/controller/veil_async.log
controller-log-sender Асинхронный сервис контроллера отправки логов внешней системе /var/log/veil/controller/veil_async.log
controller-ws Устаревшая реализация websockets /var/log/veil/controller/veil_async.log
websockify Сервис проксирования протоколов в websockets /var/log/veil/controller/websockify.log
websockify-node Сервис проксирования протоколов в websockets /var/log/veil/node/websockify.log
loki Loki (база данных журналов) /var/log/loki
prometheus Prometheus (база данных статистики) /var/log/prometheus
fg FreeGRID /var/log/syslog
node-engine Супервизор узла /var/log/veil/node/node.log
node-web-api Web-сервер узла /var/log/veil/node/django.log
node-web-proxy Асинхронный прокси-сервер узла между nginx и своим Web-сервером /var/log/veil/node/veil_async.log
node-web-uploader Асинхронный сервис узла загрузки файлов в пулы данных /var/log/veil/node/veil_async.log
node-statistics Prometheus-node-exporter (сервис сбора статистики о системе) /var/log/syslog
iscsi iSCSI initiator сервис /var/log/syslog
multipath Device-Mapper Multipath Device Controller /var/log/syslog
postgresql Postgresql (Реляционная база данных супервизора контроллера) /var/log/postgresql
nginx Граничный Web-сервер /var/log/nginx
ntp Сервис синхронизации времени /var/log/syslog
redis База данных супервизоров контроллеров и узлов NoSQL /var/log/redis
beanstalkd Сервис очередей /var/log/syslog
ttyd Сервис доступа к терминалу через web ui /var/log/ttyd
snmp Сервис SNMP /var/log/syslog
gluster Сервис кластерного транспорта типа gluster /var/log/glusterfs
corosync Сервис кворума кластерного транспорта типа gfs2 /var/log/corosync/corosync.log
dlm Сервис блокировок и ограждения кластерного транспорта типа gfs2 dmesg
watchdog Сервис контроля работоспособности системы /var/log/watchdog
td-agent Fluentd based data collector for Treasure Data (сервис сбора журналов системы) /var/log/td-agent

Схема системных пользователей

Примечание

Схемы системных пользователей контроллера и узла идентичны.

Схема

space - общая группа системных пользователей.

admins - группа SSH-пользователей.

Таблица временных параметров системы

Здесь приведены временные параметры системы, по достижению которых происходит проверка и изменение состояния.

Название Инициатор Параметр времени Описание
Автотестирование системы cron, CLI, WEB Ежесуточно (в 1 час 1 минуту ночи) и при запуске (инициализации) узла Происходит проверка файлов конфигураций и контроль статусов сервисов
Сканирование ВМ Супервизор узла (DomainStatus, LibvirtCollector) 5 секунд Проверка статусов питания ВМ, связи с агентом, статистики
Сканирование хранилищ Супервизор узла (StorageStatus) 30 секунд Сбор всех сущностей хранилищ с размерами
Сканирование сетевых сущностей Супервизор узла (NetworkStatus) 30 секунд Сбор всех сущностей сети
Ballooning Супервизор узла (Ballooning) 5 секунд Контроль памяти ВМ
HardwareStatus Супервизор узла (HardwareStatus) 180 секунд Проверка состояния "железа"
Multitask divisor Супервизор контроллера (MultitaskProcessor) 4 Количество параллельных задач в последовательных блоках мультизадач