Структура программы
Тип гипервизора
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 | Сервис 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-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 | Количество параллельных задач в последовательных блоках мультизадач |