Middleware (mware)
Описание
Обеспечивает функции переноса данных между внутренними сервисами внутри сайта, а также контроля корректности работы.
Разделена на микросервисы по доменам. Обеспечивает автоматическую синхронизацию работы между сайтами, обслуживающими домен.
Резервируется в режиме Active-Passive. Масштабируется разделением доменного дерева.
Сервисы:
- Telegram-бот мониторинга состояния системы (Подробнее о настройке).
- Обеспечение функционирования учетных записей sipuser, настроенных на работу без регистрации.
- Управление звонками через API (callmanager) (Calls, Conferences).
- Управление устройствами через API (devicemanager) (/api/devicemanager/v1/…)
- Сервис публикации ролевых приложений.
- Сервис запуска служебных сценариев по расписанию. (Служебные задачи).
- Сервис критических секций (компонент сценариев "Мьютекс" и др.).
- Контроллер потоковой репликации PostgreSQL. (Подробнее о настройке ниже, параметр 'pg_controller'])
- Контроллер создания резервных копий (Подробнее о настройке ниже, параметр 'backup_controller').
- Сервис автоматической генерации SSL-сертификатов ACME LetsEncrypt (Подробнее о настройке).
- Мониторинг глобальных имен.
- Мониторинг состояния MEGACO-подключений между MGC и MG.
- Мониторинг работоспособности сервиса синхронизации файлов FSYNC.
- Сервис восстановления паролей пользователей (Подробнее).
- Сервис отправки приглашений новым пользователям (Подробнее).
- Сервис обслуживания самостоятельной регистрации пользователей (Подробнее).
- Сервис обеспечения регистрации при авторизации через OAuth и ЕСИА (Подробнее).
- Сервис сборка событий syslog и отправки SNMP trap (Подробнее о настройке).
- Общий лог микросервисов продуктового слоя, собираемый из сообщений стандартного вывода.
- Сервис стенографирования записей разговоров (Подробнее о настройке).
- Тестировочный сервис зеркалирования UDP пакетов.
- Сервис регистрации заказов на обратный зконок (компонент сценариев "Заказ на обратный звонок" и др.).
- Сервис обеспечения функциональности email_to_fax.
- Сервис отслеживания абонентов, вызываемых через Hunt-номера и личные очереди.
- Кеш внешних номеров, подлежащих отслеживанию состояний (Подробнее о настройке).
- Сервис поставщика CTI-событий, включая супервизор серверов-адаптеров для поддержки различных протоколов.
- Мониторинг доступности микросервисов sg с функцией автоматического удаления связанных websocket-регистраций (webrtc-софтфонов) и tls-регистраций при потере.
Код |
|
Режим работы |
|
Режим резервирования |
|
Типы сайтов |
|
Слой |
|
Размещение |
|
Сохранение и восстановление состояния при перезагрузке |
|
Приложение |
|
Параметры
Имя | Тип | Умолчание | Описание |
---|---|---|---|
|
|
required |
Имя. Может состоять из латинских букв и цифр, должно начинаться с буквы. |
|
|
required |
Тип роли. Возможные значения: |
|
|
required |
Алиас сетевого интерфейса сервера, на котором будет происходить внутреннее взаимодействие ролей между собой. |
|
|
empty |
Дополнительные опции роли. Содержит json объект или список. |
|
|
empty |
Флаг активности роли. При установке в false роль не участвует в валидации и не запускается. |
|
|
required |
Номер группы. |
|
|
required |
Порядок экземпляра роли в рамках группы. |
|
|
empty |
Список имен доменов, которые обслуживает данная группа. |
|
empty |
Настройки для контроллера серверов PostgreSQL, находящихся в режиме потоковой репликации (версия pgsql 12+). Настройки значений для групп:
Настройки значений для серверов:
Указанное значение этого параметра не проверяется валидатором конфигурации в роли Все роли системы автоматически переключаются в работу с новым мастером, указанным в конфигурации, вне зависимости от данной настройки. Ведет выделенный лог-журнал "pgctrl_*.log". =Настройка PostgreSQL= Для того, чтобы сервис контроллера работал корректно, требуется предварительная настройка экземпляров PostgreSQL. Версия PostgreSQL не ниже 12. postgresql.conf
listen_addresses = '*' hot_standby = on wal_level = replica max_wal_senders = 10 wal_keep_segments = 32 promote_trigger_file = '/var/lib/postgresql/12/era_instance_01/master.signal' pg_hba.conf
host all era_replica 0.0.0.0/0 md5 Если второй сервер настроен в режиме мастера, то после первого запуска контроллер автоматически переведет одного из них в режим репликации. Дополнительно некоторые настройки можно задать в параметрах мастер-домена (подробнее…). Общий вид параметра на примере: [ { "key": "general", "referee": "8.8.8.8", "servers": [ { "pg_backup_folder": "/mnt/db/backup/era", "pg_basebackup_command": "/usr/lib/postgresql/14/bin/pg_basebackup", "pg_config_folder": "/mnt/db/era", "pg_ctl_command": "/usr/lib/postgresql/14/bin/pg_ctl", "pg_data_folder": "/mnt/db/era", "pg_database": "postgres", "pg_host": "db1.local", "pg_log_filepath": "/mnt/db/era/postgresql-14-era.log", "pg_port": 5441, "pg_replica_user": "era_replica", "pg_replica_pwd": "...", "pg_signal_filepath": "/mnt/db/era/master.signal", "ssh_host": "db1.local", "ssh_port": 2022, "ssh_user": "postgres", "ssh_pwd": "..." }, { "pg_backup_folder": "/mnt/db/backup/era", "pg_basebackup_command": "/usr/lib/postgresql/14/bin/pg_basebackup", "pg_config_folder": "/mnt/db/era", "pg_ctl_command": "/usr/lib/postgresql/14/bin/pg_ctl", "pg_data_folder": "/mnt/db/era", "pg_database": "postgres", "pg_host": "db2.local", "pg_log_filepath": "/mnt/db/era/postgresql-14-era.log", "pg_port": 5441, "pg_replica_user": "era_replica", "pg_replica_pwd": "...", "pg_signal_filepath": "/mnt/db/era/master.signal", "ssh_host": "db2.local", "ssh_port": 2022, "ssh_user": "postgres", "ssh_pwd": "..." } ] }, ... ] |
|
|
empty |
Настройки для контроллера создания архивных копий.
С помощью указания шаблонов настраивается хранение нескольких экземпляров архивных копий, а также их кольцевое замещение по кругу. По умолчанию используется домашний каталог пользователя на сервере хранилища, и файлы регулярно перезаписываются. Если операция создания резервной копии завершается неудачей, то весь процесс прерывается, и это отражается в состоянии системы. Следующая попытка будет предпринята в соответствии с расписанием не раньше чем через 20 минут. Контроллер может создавать резервные архивные копии для нескольких экземпляров СУБД PostgreSQL. Для этого их надо указывать в списке. При создании архива с резервной копией данных экземпляра СУБД PostgreSQL используется утилита 'pg_basebackup'. Настройки значений для экземпляра СУБД PostgreSQL:
Архивный файл имеет формат zip. Примерный алгоритм восстановления:
Контроллер может создавать резервную архивную копию каталога ':SYNC'.
Для восстановления достаточно распаковать/скопировать в каталог ':SYNC' на любом из серверов сайта. Общий вид объекта на примере: { "hours_interval": [20, 3], "weekdays": [2,4,7], "sync_folder": { "send_mode": "rsync", "excluded_paths": ["**/common/temp/*"], "storage_ssh_host": "storage.local", "storage_ssh_port": 8022, "storage_ssh_user": "user414", "storage_ssh_pwd": "...", "storage_ssh_path": "backup/dow_%weekday" }, "pgdb": [ { "servers": [ { "ssh_host": "192.168.0.191", "pg_host": "192.168.0.191" }, { "ssh_host": "192.168.0.192", "pg_host": "192.168.0.192" } ], "ssh_port": 9022, "ssh_user": "postgres", "ssh_pwd": "...", "pg_port": 5420, "pg_replica_user": "era_replica", "pg_replica_pwd": "...", "storage_ssh_host": "storage.local", "storage_ssh_port": 8022, "storage_ssh_user": "user414", "storage_ssh_pwd": "...", "storage_ssh_path": "backup/dow_%weekday" }, ... ] } |
|
|
|
|
Возможные варианты: |
|
|
|
транзакций). При одновременной перезагрузке/выключении всех экземпляров группы данные теряются. |
|
|
array<object> |
|
|
|
bool |
Пример конфигурации
Управление конфигурацией производится в приложении, доступном для администраторов мастер-домена. Приложение скрывает полное содержание конфигурации, однако тем не менее оно доступно через API.
Конфигурация содержит раздел для описания всех экземпляров всех ролей. Параметры определяются для каждого конкретного экземпляра роли.
{
"name": "mware2",
"roletype": "mware",
"iface": "eth0",
"pg_controller": [
{
"key": "general",
"servers": [
{
"ssh_host": "192.168.0.123",
"ssh_port": 9022,
"ssh_user": "postgres",
"ssh_pwd": "123456",
"pg_host": "192.168.0.123",
"pg_port": 5420,
"pg_replica_user": "era_replica",
"pg_replica_pwd": "654321",
"pg_database": "postgres",
"pg_ctl_command": "/usr/lib/postgresql/12/bin/pg_ctl",
"pg_basebackup_command": "pg_basebackup",
"pg_data_folder": "/var/lib/postgresql/12/instance01",
"pg_backup_folder": "/var/lib/postgresql/12/backups/instance01",
"pg_log_filepath": "/var/log/postgresql/postgresql-12-instance01.log",
"pg_signal_filepath": "/var/lib/postgresql/12/instance01/master.signal"
},
{
"ssh_host": "192.168.0.124",
"ssh_port": 9022,
"ssh_user": "postgres",
"ssh_pwd": "123456",
"pg_host": "192.168.0.124",
"pg_port": 5420,
"pg_replica_user": "era_replica",
"pg_replica_pwd": "654321",
"pg_database": "postgres",
"pg_ctl_command": "/usr/lib/postgresql/12/bin/pg_ctl",
"pg_basebackup_command": "pg_basebackup",
"pg_data_folder": "/var/lib/postgresql/12/instance01",
"pg_backup_folder": "/var/lib/postgresql/12/backups/instance01",
"pg_log_filepath": "/var/log/postgresql/postgresql-12-instance01.log",
"pg_signal_filepath": "/var/lib/postgresql/12/instance01/master.signal"
}
]
}
],
"backup_controller": {
"hours_interval": [20, 3],
"weekdays": [1,2,3,4,5,6,7],
"storage_ssh_host": "storage.local",
"storage_ssh_port": 8022,
"storage_ssh_user": "user414",
"storage_ssh_pwd": "pwd414",
"storage_ssh_path": "backup/dow_%weekday",
"sync_folder": {
"send_mode": "rsync",
"excluded_paths": ["**/common/fax/*", "**/some_temp_files/*"]
},
"pgdb": [
{
"servers": [
{
"ssh_host": "192.168.0.123",
"pg_host": "192.168.0.123"
}, {
"ssh_host": "192.168.0.124",
"pg_host": "192.168.0.124"
}
],
"ssh_port": 9022,
"ssh_user": "postgres",
"ssh_pwd": "123456",
"pg_port": 5420,
"pg_replica_user": "era_replica",
"pg_replica_pwd": "654321"
}
]
},
"group": 11120,
"order": 10
}