Структура программы
Тип гипервизора
SpaceVM является гипервизором 1 типа, то есть устанавливается на «голое железо» (bare-metal). Для установки модулей SpaceVM не требуется отдельной установки базовой ОС общего назначения. Установка модулей производится с дистрибутива непосредственно на физический сервер без предварительной установки дополнительного ПО.
Объем дистрибутива
Объем установочного дистрибутива равен примерно 2 Гбайт.
Структура ПО
В программе реализован принцип модульного построения программного обеспечения, когда каждый отдельный модуль отвечает за решение узкоспециализированной задачи. Все программное обеспечение разделяется на несколько подсистем. Каждая подсистема в свою очередь разделяется на набор модулей, которые реализуют определенную специализированную задачу.
- 
Взаимодействие между модулями организовано на базе прямой адресации объектов в пределах одной подсистемы или же с использованием буферизированных средств взаимодействия (файлы, сокеты и сигналы). 
- 
Структурная схема SpaceVM 
- 
Менеджер конфигурации (МК) представляет собой программный комплекс, предназначенный для управления 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 | Сервис балунинга узла (цикл раз в 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 и рассылающий ее узлам | 
Описание сервисов
Примечание
Список сервисов отличается в зависимости от типа установки и версии.
| Название | Описание | Расположение или просмотр журналов | 
|---|---|---|
| controller-engine | Супервизор контроллера | /var/log/veil/controller/controller.log | 
| controller-db (postgresql) | Postgresql (Реляционная база данных супервизора контроллера, работа ведется через PgBouncer) | /var/log/postgresql | 
| controller-web-api | Web-сервер контроллера | /var/log/veil/controller/django.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 | 
| loki | Loki (движок и база данных журналов) | /var/log/loki | 
| controller-websocket | Асинхронный сервис WS-соединений (принимает запросы на подписки пользователей и отправляет данные об изменениях в базе данных подписчикам) | /var/log/veil/controller/veil_async.log | 
| prometheus | Prometheus (база данных статистики) | /var/log/prometheus | 
| 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 | 
| td-agent | Fluentd based data collector for Treasure Data (сервис сбора журналов системы) | /var/log/td-agent | 
| iscsi | iSCSI initiator сервис | /var/log/syslog | 
| multipath | Device-Mapper Multipath Device Controller | /var/log/syslog | 
| nginx | Граничный Web-сервер | /var/log/nginx | 
| ntp | Сервис синхронизации времени | /var/log/syslog | 
| redis | База данных супервизоров контроллеров и узлов NoSQL | /var/log/redis | 
| beanstalkd | Сервис очередей | /var/log/syslog | 
| snmp | Сервис SNMP | /var/log/syslog | 
| gluster | Сервис кластерного транспорта типа gluster | /var/log/glusterfs | 
| corosync | Сервис кворума кластерного транспорта типа gfs2 | /var/log/corosync/corosync.log | 
| dlm | Сервис блокировок и ограждения кластерного транспорта типа gfs2 | dmesg | 
| watchdog | Сервис слежения за "здоровьем" системы | /var/log/watchdog | 
| consul | Сервис выбора лидера и базы данных кластера | /var/log/syslog | 
Схема системных пользователей
Примечание
Схемы системных пользователей контроллера и узла идентичны.
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 | Количество параллельных задач в последовательных блоках мультизадач | 


