Регламентное обслуживание и резервное копирование
Описание
В данном документе приводится описание различных действий, которые должны быть выполнены пользователем системы ECSS-10 для сохранения баз данных и конфигурации системы. Эти работы необходимы для выполнения восстановления данных в случае возникновения серьезной неисправности и обеспечения при этом максимально возможной надежности и минимального времени простоя системы.
Необходимо обратить особое внимание на то, чтобы избежать ошибок при выполнении последовательности сохранения и обеспечить соответствующую периодичность процедур сохранения.
Перечень каталогов, где расположены файлы ECSS
- /var/lib/ecss/ — содержит служебные данные ECSS-10: контексты маршрутизации, базы данных, CDR, статистику;
- /var/log/ecss/ — содержит файлы логов подсистем ECSS-10;
- /usr/lib/ecss/ — содержит библиотеки и установленные релизы ECSS-10;
- /etc/netplan/ — сетевые параметры сервера;
- /etc/keepalived/ — сетевые настройки виртуальных интерфейсов (VRRP);
- /etc/ecss/ — содержит конфигурационные файлы подсистем ECSS-10;
- /etc/default/ — содержит конфигурационные файлы общих настроек подсистем ECSS-10;
- /etc/systemd/ — содержит скрипты запуска подсистем ECSS-10 и других приложений;
- /etc/hosts — в файле прописаны адреса для связи подсистем ECSS-10;
- /etc/dnsmasq.d — адреса и имена служб ECSS-10;
- /etc/nginx — настройки сайтов web-сервера.
Периодичность резервного копирования
В таблице приведен рекомендуемый перечень и периодичность работ по сохранению баз и конфигурации ECSS-10.
Таблица — Регламентные работы по сохранению баз данных и конфигурации ECSS-10
Период | Операция | Метод резервного копирования | Метод восстановления |
---|---|---|---|
один раз в неделю | /etc — конфигурация сервера и всех служб, полное или инкрементное резервное копирование (backup) | Копирование и архивирование | Замена директории из архива |
один раз в неделю | /var/lib/ecss — конфигурация узлов ECSS, полное или инкрементное резервное копирование (backup) | Копирование и архивирование | Замена директории из архива |
один раз в неделю | БД MySQL — инкрементное резервное копирование (backup) | Описан в разделе Backup и восстановление MySQL | Описан в разделе Backup и восстановление MySQL |
один раз в неделю | БД LDAP(если используется) — полное резервное копирование (backup) | Описан в разделе Backup и восстановление LDAP | Описан в разделе Backup и восстановление LDAP |
один раз в месяц | БД MySQL — полное резервное копирование (backup) | Описан в разделе Backup и восстановление MySQL | Описан в разделе Backup и восстановление MySQL |
Внеплановые:
| Все вышеперечисленное(полное резервное копирование указанных каталогов и баз данных), а также дополнительно /usr/lib/ecss – компоненты ECSS, полное резервное копирование (backup) | Копирование и архивирование | Замена директории из архива |
- В рамках ECSS-10 только подсистемы ecss-ds и ecss-mediator сохраняют свои данные на диск. Все остальные подсистемы (ecss-core, ecss-pa-megaco, ecss-pa-sip) оперируют только Runtime-данными, не требующими сохранения между перезапусками.
- В данном подразделе указаны команды, которые выполняются из командной консоли управления операционной системы Linux (shell) непосредственно хоста, на котором установлена система ECSS-10.
Для обеспечения надежности архивы рекомендуется скопировать на другой хост.
В зависимости от аварийной ситуации необходимо заменить текущий раздел на backup.
Методика резервного копирования каталогов
Ручное копирование
Полное копирование на примере каталога /etc:
cp -rv /<NAME> /tmp/etc
Инкрементное копирование на примере каталога /etc:
cp -ruv /etc /tmp/etc
где:
ключ -r копирует каталог /etc с его подкаталогами в каталог /tmp/etc;
ключ -u копирует только новые или обновленные файлы.
Архивирование на примере каталога /etc:
tar -zcvf <NAME> /tmp/etc/
где
<NAME> — имя архива, например, etc.tar.gz.
Разархивирование:
tar -xvf <NAME>
где
<NAME> — имя архива.
Копирование и архивация с помощью Midnight Commander:
- копирование — F5;
- архивирование — F2, выбрать из меню пункт 3;
- разархивирование — F2, выбрать из меню пункт y.
Копирование конфигурации и БД с помощью скрипта ecss-control
В пакет ecss-ds добавлена утилита ecss-control (идет в пакете ecss-node).
Доступны следующие команды:
- stash <DIRECTORY> — создание архива хостовой конфигурации ECSS-10 в заданной директории;
- rollback <FILE> — восстановление ранее созданной хостовой конфигурации ECSS-10 из соответствующего архива.
В процессе работы утилита запрашивает пароль от пользователя root к mysql.
Архивация (stash)
Для архивации используется команда ecss-contol с параметром stash.
Восстановление(rollback)
Для восстановления используется ecss-contol rollback
Backup и восстановление баз данных
Backup и восстановление MySQL
Выполнить Backup базы MySQL простым копированием каталогов (/var/lib/mysql, /var/lib/ecss-mysql) можно в том случае, если остановить сервис MySQL. Это обусловлено тем, что база в любой момент может быть модифицирована. Существует кэш и копирование может совпасть с моментом записи в файл (модификацией файла). В этом случае проблемы возникнут при попытке восстановления базы из Backup.
Варианты действий:
Вариант 1
Остановить сервис mysql, скопировать и заархивировать каталоги /var/lib/mysql, /var/lib/ecss-mysql, запустить сервис. Время остановки зависит от размера базы данных.
Вариант 2
Заблокировать данные на изменения, очистить кэш, выполнить cнимок файловой системы, если используется журналируемая файловая система. Разблокировать базу данных. В фоновом режиме выполнить копирование файлов. Преимущества данного способа: небольшое время простоя базы; база не отключается и доступна на чтение. Недостатки: повышается нагрузка на файловую систему на момент Backup.
Вариант 3
Выполнить backup базы через дамп. Преимущества данного способа: утилитой nice можно понизить приоритет и получать данные постепенно. Недостатки: выполняется длительное время; не подходит для инкрементных дампов, соответственно размер backup будет большой.
Дамп БД
mysqldump --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers -u<LOGIN> -P<PORT> -h<HOST> -p<PASS> <DBNAME> > dump.sql
где
<HOST> — хост, на котором размещен сервер MySQL;
<LOGIN> — логин к MySQL;
<PORT> — порт, на котором работает сервер;
<PASS> — пароль;
<DBNAME> — имя базы.
После выполнения данной команды в файле dump.sql будет копия MySQL-базы с именем "DBNAME".
Целесообразно имя файла dump.sql формировать с учетом даты и времени суток.
Например:
mysqldump --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers --user=root --password=ssw1 --databases ecss_audit ecss_calls_db ecss_dialer_db ecss_statistics ecss_subscribers web_conf history_db > ./all_dump.sql
Восстановление из дампа
mysql -u<LOGIN> -P<PORT> -h<HOST> -p<PASS> <DBNAME> < dump.sql
Описание процесса можно просмотреть по следующим ссылкам: https://dev.mysql.com/doc/refman/5.7/en/backup-methods.html; http://www.codenet.ru/db/mysql/MySql-Backup.php; http://habrahabr.ru/post/137380/; http://www.linuxjournal.su/?p=1064.
Вариант 4
Запустить инкрементный backup базы. Преимущества данного способа: сохраняются только изменения от момента последнего сохранения, соответственно быстро из без остановки системы. Недостатки: перед сохранением нужно сбросить кэш в файлы.
Метод сохранения Backup основан на базе механизма бинарных логов MySQL. Бинарные логи содержат полную историю изменений базы данных. Для работы инкрементного Backup необходимо, чтобы бинарные логи были включены для требуемой базы данных.
Процесс состоит из двух фаз:
- Создание первоначального полного снимка базы, выполняется аналогично варианту №3. В параметрах "mysqldump" указывается ключ --flush-logs, который приводит к принудительному сохранению бинарных логов, ротации файлов бинарных логов, чтобы при последующем их сохранении было известно с какого файла начинать синхронизацию.
mysqldump -uLOGIN -PPORT -hHOST -pPASS --flush-logs DBNAME > dump.sql
Такой снимок базы выполняется изначально при запуске всего механизма Backup данных, а также рекомендуется повторно выполнять полные снимки базы один раз в месяц. - Периодический Backup бинарных логов от момента предыдущего Backup. Эта операция выполняется простым копированием файлов (обычно расположены /var/lib/mysql) с момента предыдущего инкрементного или полного Backup по текущий момент, за исключением последнего файла, в который записываются текущие изменения. Такой периодический Backup рекомендуется выполнять один раз в неделю.
Восстановление Backup из инкрементных логов происходит следующим образом:
- Восстановление базы из последнего полного Backup.
- Применение инкрементных обновлений. Последовательно применяются к базе бинарные логи:
mysqlbinlog binlog_files | mysql -uLOGIN -pPASS
.
Backup и восстановление LDAP
Если для авторизации абонентов используется LDAP, то также нужно выполнять периодическое резервное копирование. Не рекомендуется выполнять backup базы данных LDAP простым копированием по тем же причинам, что и MySQL.
С подробным описанием можно ознакомиться по ссылке: https://pro-ldap.ru/books/openldap-ubuntu-in-practice/backup.html
Скрипт для создания backup:
#!/bin/sh LDAPBK=ldap-$( date +%y%m%d-%H%M ).ldif BACKUPDIR=/home/backups /usr/sbin/slapcat -v -b "dc=yourDC,dc=local" -l $BACKUPDIR/$LDAPBK gzip -9 $BACKUPDIR/$LDAPBK
- Необходимо изменить параметры dc=yourDC,dc=local на действующие.
- Backup по данной схеме рекомендуется проводить один раз в неделю.
Восстановление из backup:
Остановить slapd:
~$ sudo systemctl stop slapd
Удалить базу (убедиться, что вы находитесь в правильном каталоге для удаления командой rm):
~$ sudo rm -rf /var/lib/ldap/*
Восстановить базу из LDIF-файла:
~$ sudo -u openldap /usr/sbin/slapadd -l backup.ldif
Запустить slapd:
~$ sudo systemctl start slapd
Полный backup сервера ECSS
Для полного backup используется копирование всего жесткого диска (dd). Необходимо сохранить все содержимое диска (таблица разделов, разделы, данные). Преимущество данного метода в том, что за один шаг сохраняются все установленные на жестком диске системы. При таком backup сохранятся все данные, относящиеся к загрузчику. Таким образом, после восстановления можно сразу же загрузиться с этого жесткого диска.
Создание образа
- Убедитесь, что ни один из разделов диска, с которого будет делаться backup не примонтирован. Для этого выполните команду
mount
без параметров. - Выбрать раздел, на котором планируется разместить файл-образ. Это должен быть раздел другого жесткого диска с достаточным объемом свободного места. Объем свободного места должен соответствовать объему копируемого жесткого диска.
Смонтировать backup-раздел
sudo mount /dev/sdXY /mnt
Выполнить команду
sudo dd if=/dev/sdX bs=1M conv=noerror,sync | lzma -cv > /mnt/hdd.dd.lzma
где «sdX» — диск для копирования без сжатия, а не раздел.
В зависимости от размера жесткого диска и производительности компьютера процедура может занять продолжительное время (до нескольких часов).
По завершении п. 4 отмонтировать backup-раздел
sudo umount /mnt
Восстановление из образа
- Данный способ предполагает полный возврат к состоянию на момент создания архива с заменой всех данных!
- Перед началом работы необходимо убедиться в надежности электропитания. При высокой интенсивности записи возрастает риск повреждения диска в случае сбоя питания.
- Убедиться, что ни один раздел восстанавливаемого диска не используется.
Смонтировать backup-раздел
sudo mount /dev/sdXY /mnt
Выполнить команду
bzip2 -dc /mnt/hdd.dd.bz | sudo dd of=/dev/sdX bs=1M conv=sync,noerror
или для несжатого образа
sudo dd if=/mnt/hdd.dd.bz of=/dev/sdX bs=1M conv=sync,noerror
По завершении п.3 отмонтировать backup-раздел
sudo umount /mnt
- Если необходимо распаковать образ на другой жесткий диск, то он должен иметь размер не меньше оригинального. В случае, если новый диск большего объема, можно расширить разделы, либо создать новый раздел на свободном месте с помощью команды
parted/fdisk/gparted/etc
. - Не используйте оба жестких диска («дубликат» и «оригинал») одновременно! При подключении двух дисков в системе будет по два раздела на каждый UUID, что приведет к проблемам в работе или невозможности загрузки.
Клонирование сервера ECSS
- Подключить новый диск, на который будет производиться клонирование.
- Загрузить с liveCD ubuntu 18.04.
- Командой
df -h
илиmount
проверить, что ни один из разделов дисков (с которого будет делаться клон и на который будет делаться клон) не примонтирован. В случае если разделы примонтировались, то выполнить командуumount
. В shell выполнить следующую команду:
sudo dd if=/dev/sdX of=/dev/sdY bs=4M
где sdX — диск, с которого будет производиться клонирование,
sdY — диск, на который будет производиться клонирование.Ожидаем завершения выполнения команды. Операция может занять продолжительное время (до нескольких часов).
Сохранение и восстановление настроек отдельного домена (виртуальной АТС)
В системе ECSS-10 также имеется инструмент сохранения и восстановления конфигурации отдельного домена. Это производится с помощью команд CLI по пути /domain/<DOMAIN>/backup/.
Ниже приведено описание и примеры команд.
В текущем разделе описываются команды для сохранения и возврата к предыдущей версии конфигурации виртуальной АТС.
Для администратора виртуальной АТС команды выполняются на уровне виртуальной АТС в разделе /domain/<DOMAIN>/backup/ и применяются только для определенной виртуальной АТС.
delete
Данной командой выполняется удаление архивного файла конфигурации домена.
Путь команды:
/domain/<DOMAIN>/backup/store
Синтаксис:
delete <NODE> --backup <FILENAME>
Параметры:
- <NODE> - имя ноды;
- <FILENAME> - имя файла сохраненной ранее конфигурации. Файл ищется в каталоге /var/lib/ecss/backups/<DOMAIN>.
Пример:
admin@ds1@ecss1:/$ domain/biysk.local/backup/delete ds1@ecss1 --backup bsk_2021_020_09/v_14_7_0_72490_2021_02_09_15_40_52.bterm Domain's backup successfully deleted. [exec at: 09.02.2021 22:52:40, exec time: 108ms, nodes: ds1@ecss1 v.3.14.7.562]
store
Данной командой выполняется сохранение конфигурации системы ECSS-10.
Путь команды:
/domain/<DOMAIN>/backup/store
Синтаксис:
store <NODE> [<FLAGS>]
Параметры:
- <NODE> - имя ноды;
- <FLAGS> - дополнительные действия, задаются опционально:
- --prefix <PREFIX> - задается префикс имени файла для сохранения конфигурации;
- --backup-dir <DIR> - задается путь относительно директории по умолчанию (/var/lib/ecss/backups/<DOMAIN>) для сохранения конфигурации.
Примеры:
admin@mycelium1@ecss1:/$ domain/biysk.local/backup/store ds1@ecss1 --prefix bsk Domain configuration are successfully stored to: /var/lib/ecss/backups/biysk.local/bsk_v_14_7_0_72494_2021_02_12_03_34_29.bterm [exec at: 12.02.2021 10:34:29, exec time: 186ms, nodes: ds1@ecss1 v.3.14.7.566]
restore
Данной командой выполняется восстановление конфигурации - откат на ранее сохраненную конфигурацию системы.
Путь команды:
/domain/<DOMAIN>/backup/restore
Синтаксис:
restore <NODE> --backup <FILENAME>
Параметры:
- <NODE> - имя ноды;
- <FILENAME> - имя файла сохраненной ранее конфигурации. Файл ищется в каталоге /var/lib/ecss/backups/<DOMAIN>.
Пример:
admin@mycelium1@ecss1:/$ domain/biysk.local/backup/restore ds1@ecss1 --backup bsk_v_14_7_0_72494_2021_02_12_03_34_29.bterm Start read backup... Notify domain services before restore backup data... Restore data from the backup... Domain configuration successfully restored. [exec at: 12.02.2021 10:35:27, exec time: 6s 196ms, nodes: ds1@ecss1 v.3.14.7.566]