Утилита ecss-control служит для создания резервных архивов конфигурации, восстановления ECSS-10 из этих архивов, а также для разделения кластера на 2 независимые ноды для дальнейшего независимого обновления каждой из них. Данная утилита включена в состав пакета ecss-node.

Описание аргументов ecss-control

man

ECSS-10(8)                                               BSD System Manager's Manual                                               ECSS-10(8)

NAME
     ecss-control

SYNOPSIS
     ecss-controlS
     ACTION

Actions
     debug | de
              Включить отладочный режим

     verbose | v
              Включить отладочные логи

     stash <DESTINATION DIRECTORY>
              Архивация текущей конфигурации и логов ECSS-10

     stash-config | stash-cfg <DESTINATION DIRECTORY>
              Архивация текущей конфигурации ECSS-10 без логов.

     rollback | rb <SOURCE FILE>
              Применить конфигурацию ECSS-10 из указанного файла

     detach   Изолировать текущий хост, кроме SSH/22 и KA/112

     attach   Снять изолицию с хоста

     log-clean | lc
              Очистить логи ECSS-10

     help     Показать справку

DESCRIPTION
     ecss-control — Утилита для управления ECSS-10. Предназначена для сохранения/восстановления конфигурации. Также возможно
     использовать для изоляции хоста.

FILES
     /usr/bin/ecss-control

 Manual page ecss-control(8) line 1/45 90% (press h for help or q to quit)

debug

Данный аргумент является необязательным и используется в связке с другими аргументами. При его использовании на терминале отображается подробный трейс выполняемых команд.

Пример:

ssw@ecss1:~$ sudo ecss-control debug stash
+ export DEBUG=true
+ DEBUG=true
+ shift
+ [[ -n stash ]]
+ CMD=stash

verbose

Данный аргумент является необязательным и используется в связке с другими аргументами. При его использовании в терминале отображается последовательность действий, выполняемых той или иной командой.

Пример:

ssw@ecss1:~$ sudo ecss-control verbose stash
please enter root password for mysql db:
Enter password: 
-- Connecting to localhost...
-- Starting transaction...
-- Setting savepoint...
-- Retrieving table structure for table ecss_audit_commands...
-- Sending SELECT query...
-- Retrieving rows...

stash

Синтаксис:

stash [--no-sql | --no-log | --no-config | --last-log | --push ] [<каталог>] — в имени итогового файла будет указано, с какими опциями он был создан

Данный аргумент без параметров создает резервную копию конфигурации ECSS-10 вместе с логами(/var/log/ecss). При выполнении команды будет запрошен пароль root пользователя базы данных mysql, в которой хранится часть настроек ECSS-10.

Опции:

  • --no-sql — не копировать базы MySQL
  • --no-log — не копировать логи
  • --no-config — не копировать конфигурацию
  • --last-log — брать только последние логи;
  • --push — отправка данных для анализа в техподдержку;

Push options:

  • --clear — удалить архив после успешной отправки;
  • --files — все файлы или каталоги, указанные между этим и другим параметром, будут включены в отправку;
  • --comment — описание проблемы;
sasha@ecss1:~/ssw1_3.14$ sudo ecss-control stash --push --last-log
[sudo] password for sasha: 
please enter root password for mysql db:
Enter password: 
stashing ECSS-10 ...
create stashed file: /home/sasha/ssw1_3.14/ecss-stash-full-20190623-173101.tar.gz
done
connecting to cloud ...
make subdir 20190623
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
make subdir 20190623/issue-20190623-173101
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
done
pushing issue ...
start
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  216M    0     0  100  216M      0  3017k  0:01:13  0:01:13 --:--:--     0
done
Issue ID: 20190623/issue-20190623-173101

Сохраняемые каталоги конфигурации:

    /etc/ecss
    /var/lib/ecss/adaptation
    /var/lib/ecss/backups
    /var/lib/ecss/cp
    /var/lib/ecss/ecss-media-server
    /var/lib/ecss/eep
    /var/lib/ecss/modification
    /var/lib/ecss/mycelium
    /var/lib/ecss/oasys
    /var/lib/ecss/oasys.backup
    /var/lib/ecss/regime
    /var/lib/ecss/routing
    /var/lib/ecss/snmp
    /var/lib/ecss/ecss-data.jso

Сохраняемые каталоги логов

    /var/log/ecss  # всегда должен быть первым, важно для работы команды log-clean
    /var/log/atop
    /var/log/syslog

Сохраняемые базы:

MYSQLDB=(
    ecss_audit
    ecss_subscribers
    web_conf
)

Для настройки бекапа используется файл /etc/ecss/ecss-control.conf:

#BACKUP_CONFIGS=( )
BACKUP_CONFIGS=(
    /etc/ecss
    /var/lib/ecss/adaptation
    /var/lib/ecss/backups
    /var/lib/ecss/cp
    /var/lib/ecss/ecss-media-server
    /var/lib/ecss/eep
    /var/lib/ecss/modification
    /var/lib/ecss/mycelium
    /var/lib/ecss/oasys
    /var/lib/ecss/oasys.backup
    /var/lib/ecss/regime
    /var/lib/ecss/routing
    /var/lib/ecss/snmp
    /var/lib/ecss/ecss-data.json
)

#BACKUP_LOGS=( )
BACKUP_LOGS=(
    /var/log/ecss # always must be first, important for the clean-log command # всегда должен быть первым, важно для работы команды clean-log
    /var/log/atop
    /var/log/syslog*
)

#BACKUP_MYSQLDB=( )
BACKUP_MYSQLDB=(
    ecss_audit
    ecss_subscribers
    web_conf
)

Кроме того, добавил возможность задавать эти параметры через окружение:

  • ECSS_STASH_BACKUP_CONFIGS — список файлов/каталогов с конфигурациями (должны быть указаны через пробел)
  • ECSS_STASH_BACKUP_LOGS — список файлов/каталогов с логами (должны быть указаны через пробел)
  • ECSS_STASH_BACKUP_MYSQLDB — список имен БД (должны быть указаны через пробел)

В дальнейшем при помощи созданного архива можно восстановить конфигурацию ECSS-10 при помощи команды rollback.

Пример:

sasha@ecss1:~/ssw1_3.12$ sudo ecss-control stash
[sudo] password for sasha: 
please enter root password for mysql db:
Enter password: 
stashing ECSS-10...
tar: /var/log/ecss/mycelium/mycelium1@ecss1/watchdog.log.bin: file changed as we read it
tar: /var/log/ecss/pa-sip/sip1@ecss1/warning.log: file changed as we read it
tar: /var/log/ecss/pa-sip/sip1@ecss1/config.log: file changed as we read it

rollback

Данный аргумент позволяет восстановить конфигурацию ECSS-10 из ранее созданного архива.

Синтаксис:

rollback|rb [--no-clean] [--no-stash] <DESTINATION FILE>

rollback работает следующим образом:

выполняется stash текущей конфигурации и логов, при этом парсится имя файла на наличие опций (можно пропустить опцией --no-stash)

выполняется clean с теми же опциями (можно пропустить опцией --no-clean)

выполняется rollback

Пример:

sasha@ecss1:~/ssw1_3.12$ sudo ecss-control rollback ecss-stash-full-20181217-104135.tar.gz 
WARNING: Before rollback current configuration and logs will be stashed and then cleared
         Stash archive will be saved at /home/sasha/ssw1_3.12
please enter root password for mysql db:
Enter password: 
stashing ECSS-10...
create stashed file: /home/sasha/ssw1_3.12/ecss-stash-full-20181217-111939.tar.gz
done
cleaning ECSS-10...
done
rollback configuration from ecss-stash-full-20181217-104135.tar.gz
please enter root password for mysql db:
Enter password: 
stashed file successfull rollbacked

detach

Использование данного аргумента позволяет вывести ноду из кластера. Это требуется для обновления обновления ПО на новую версию без перерыва в обслуживании, подробное описание данного процесса приведено в пункте  Методика разделения (split) кластера. В результате выполнения команды будет заблокирован весь трафик между нодами за исключением SSH, keepalive/multicast, а в консоле будет вывод о том, от какой ноды было произведено отсоединение + ее IP адрес.

Пример:

sasha@ecss1:~/ssw1_3.14$ sudo ecss-control detach
detach host: ecss2, ip: 192.168.1.22

attach

Аргумент возвращает ранее изолированную ноду в кластер и разблокирует весь трафик между ними, подробное описание данного процесса приведено в пункте Методика разделения (split) кластера. В выводе команды будет отображаться разблокированный IP адрес.

Пример:

sasha@ecss1:~/ssw1_3.14$ sudo ecss-control attach
unlock ip: 192.168.1.22, rules: 7
complete

status

Позволяет просмотреть статус ноды, находится ли она в кластере или же изолирована от него.

Пример:

ssw@ecss1:~$ sudo ecss-control status
all nodes attached

clean

Команда с данным аргументом удаляет логи, сохраняя структуру каталогов, а также файлы конфигурации

Синтаксис:

clean [<OPTIONS>]

Опции:

--no-log — не удалять логи
--no-config — не удалять конфигурацию (аналогично log-clean)

Пример:

sasha@ecss1:~/ssw1_3.14$ sudo ecss-control clean --no-config
[sudo] password for sasha: 
cleaning ECSS-10...
don

log-clean

Команда с данным аргументом удаляет файлы логов из каталога /var/log/ecss/

Синтаксис:

ecss-conrol log-clean|lc

Пример:

sasha@ecss1:~/ssw1_3.14$ sudo ecss-control debug log-clean
+ export DEBUG=true
+ DEBUG=true
+ shift
+ [[ -n log-clean ]]
+ CMD=log-clean
+ case "${CMD,,}" in
+ sudo-test
++ id -u root
+ [[ 0 -ne 0 ]]
+ clean-log
+ local ecss_log=/var/log/ecss
+ echo 'Clean logs...'
Clean logs...
+ find /var/log/ecss -name '*.log' -type f -exec truncate -s0 '{}' ';'
+ find /var/log/ecss -not -name '*.log' -type f -delete

Если во время выполнения команды сервисы ecss были запущены, нужно перезапустить сервис ecss-web-conf, чтобы создались новые файлы логов.

sudo systemctl restart ecss-web-conf.service

Другие подсистемы перезапускать не нужно.

help

Вывод справки.

Пример:

sasha@ecss2:/var/log/ecss$ ecss-control help
    Usage: sudo /usr/bin/ecss-control [ACTION]
     where ACTION - one of:
        attach - back host to opertate
        detach - isolate current host from other ecss hosts, except SSH/22 and KA/112
        debug|de - enable debug trace
        help - print current help
        log-clean|lc - clean logs
        rollback|rb [--no-clean] [--no-stash] <DESTINATION FILE> - rollback configuration ecss10 from selected archive
            For correct execution before rollback current configuration and logs will be stashed and then cleared.
            After will be started rollback.
            Options:
                --no-clean - current configuration and logs won't be cleared;
                --no-stash - current configuration and logs won't be stashed;
        stash [<OPTIONS>] [<DESTINATION DIRECTORY>] [--push [<PUSH OPTIONS>]] - make archive of current configuration and logs ecss10
            If <DESTINATION DIRECTORY> not specified, then using current directory
            Options:
                --last-log  - stash only last logs;
                --no-sql    - skip SQL-database stashing;
                --no-config - skip configuration stashing$;
                --no-log    - skip logs stashing;
                --push      - push stashed data to tech support;
            Push options:
                --clear   - archive will be removed after executing;
                --files   - all files or directories specified between this and another option will be included to pushing;
                --comment - all input between this and another option will be used as issue description in pushing;
        clean [<OPTIONS>] - clean current configuration and logs ecss10
            Options:
                --no-config - skip configuration cleaning
                --no-log    - skip logs cleaning
        verbose|v - enable verbose output

    examples:
     /usr/bin/ecss-control stash ~