Подготовка
Для обновления используйте менеджер терминалов Tmux или Screen.
Перед созданием резервной копии убедитесь, что на сервере достаточно свободного места, и контролируйте его использование в процессе копирования.
Резервные копии сохраняются в директориях, в которых расположены запускаемые скрипты. После создания перенесите их на сервер или в отдельное хранилище.
В Платформе используются следующие средства хранения служебных данных:
- MySQL/Galera.
- PostgreSQL.
- Tarantool (сервисы Dusk и Breeze).
- RabbitMQ.
- Apache ZooKeeper.
- etcd.
- OpenSearch.
Для создания резервных копий баз данных (БД) на управляющем узле выполните команды:
# set -e; for i in /srv/backup/backup_xtra_*; do bash $i; done
В результате будут созданы архивы с резервными копиями вида:
/srv/backup/<DB_NAME>_db_bcp_<DATE>_<TIME>.tgz
Здесь:
<DB_NAME>— имя БД.<DATE>— дата создания резервной копии.<TIME>— время создания резервной копии.
Чтобы создать резервную копию БД мониторинга, запустите скрипт на сервере мониторинга:
$ sudo bash /srv/backup/backup_xtra_zabbix.sh
В результате будет создан файл с резервной копией вида:
/srv/backup/zabbix_db_bcp_<DATE>_<TIME>.tgz
Здесь:
<DATE>— дата создания резервной копии.<TIME>— время создания резервной копии.
Чтобы создать резервные копии БД, на управляющем узле выполните команды:
# set -e; for i in /srv/backup/backup_pg_*; do bash $i; done
В результате будут созданы файлы с резервными копиями вида:
/srv/backup/<DB_NAME>_pg_<DATE>_<TIME>.tgz
Здесь:
<DB_NAME>— имя БД.<DATE>— дата создания резервной копии.<TIME>— время создания резервной копии.
Чтобы создать резервные копии, выполните команды на первом управляющем узле:
-
Создайте каталоги для резервных копий:
$ sudo mkdir -p /var/lib/backups/tarantool -
Создайте резервные копии:
$ echo 'box.backup.start()' | sudo tarantoolctl enter breeze_01 \&& echo 'box.backup.start()' | sudo tarantoolctl enter dusk_01 \&& sudo cp -r /var/lib/tarantool/xlogs /var/lib/backups/tarantool/xlogs/ \&& sudo cp -r /var/lib/tarantool/snaps /var/lib/backups/tarantool/snaps/ \&& echo 'box.backup.stop()' | sudo tarantoolctl enter breeze_01 \&& echo 'box.backup.stop()' | sudo tarantoolctl enter dusk_01 -
Заархивируйте резервные копии:
$ sudo tar -czvf /var/lib/backups/tarantool.tar.gz /var/lib/backups/tarantool
-
Перед созданием резервной копии убедитесь, что каталога
/var/lib/backups/opensearchнет на узле мониторинга. -
Остановите OpenSearch и выполните резервное копирование каталогов и файлов.
-
Создайте на узле мониторинга каталог для резервной копии:
$ sudo mkdir -p /var/lib/backups/opensearch -
Создайте резервную копию:
$ sudo docker stop opensearch opensearch_dashboards \&& sudo cp -pr /var/lib/docker/volumes/opensearch-data1 /var/lib/backups/opensearch/ \&& sudo cp /etc/opensearch/opensearch-dashboards.yml /var/lib/backups/opensearch/ \&& sudo docker start opensearch opensearch_dashboards -
Заархивируйте резервную копию:
$ sudo tar -czvf /var/lib/backups/opensearch-$(date +%Y%m%d-%H%M).tar.gz /var/lib/backups/opensearch$ sudo rm -rf /var/lib/backups/opensearch
В результате будет создан файл /var/lib/backups/opensearch-<DATE>.tar.gz с резервной копией базы OpenSearch. Здесь <DATE> — дата создания резервной копии.
На одном из управляющих узлов создайте резервную копию:
$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot save /srv/backup/iam-$(date +%Y%m%d-%H%M).db
В результате будет создан файл iam-<DATE>.db, где <DATE> — дата создания резервной копии.
Создайте резервную копию:
$ sudo etcdctl --endpoints=127.0.0.1:23379 snapshot save /srv/backup/magnum-$(date +%Y%m%d-%H%M).db
В результате будет создан файл magnum-<DATE>.db, где <DATE> — дата создания резервной копии.
Создайте резервную копию:
$ sudo etcdctl --endpoints=127.0.0.1:24379 snapshot save /srv/backup/scrooge-$(date +%Y%m%d-%H%M).db
В результате будет создан файл scrooge-<DATE>.db, где <DATE> — дата создания резервной копии.
Сохраните /var/lib/zookeeper на всех управляющих узлах любым удобным способом, например:
$ sudo tar -czvf /srv/backup/zookeeper-$(date +%Y%m%d-%H%M).tar.gz /var/lib/zookeeper
-
Остановите сервис базы данных на всех управляющих узлах:
$ sudo systemctl stop mariadb-octavia -
Удалите все предыдущие данные на всех управляющих узлах:
$ sudo rm -rf /srv/mysql/octavia/data/* -
Зайдите по SSH на первый управляющий узел.
-
На первом управляющем узле распакуйте архив с резервной копией:
$ cd /srv/backup/$ tar xzvf OCTAVIA_db_bcp_20240624_1743.tgz -
Выведите содержимое файла
~/xtrabackup_galera_info:$ cat /srv/backup/extrabackup_octavia/xtrabackup_galera_info -
В выводе получите строку вида
<UUID>:<SEQNO>с двумя значениями, разделенными двоеточием:Пример вывода[root@control001 backup]# cat extrabackup_octavia/xtrabackup_galera_info4f095201-2ce3-11ef-82f6-cfa78bf73a14:52797 -
Создайте файл
/srv/backup/extrabackup_octavia/grastate.datследующего содержания:version: 2.1uuid: <UUID>seqno: <SEQNO>safe_to_bootstrap: 1Здесь:
<UUID>— первое значение поляuuidиз файла~/xtrabackup_galera_info.<SEQNO>— первое значение поляseqnoиз файла~/xtrabackup_galera_info.
-
Восстановите базу из резервной копии:
$ sudo mariabackup --defaults-file=/etc/octavia.cnf --copy-back \--target-dir=/srv/backup/extrabackup_octavia -
Установите владельца каталога после восстановления:
$ sudo chown -R mysql:root /srv/mysql/octavia/data -
Отредактируйте файл
/etc/octavia.cnf:-
Закомментируйте строку
wsrep_cluster_addressс адресами. -
Добавьте строку
wsrep_cluster_address="gcomm://".Пример...# wsrep_cluster_address="gcomm://10.33.3.11:13003,10.33.3.12:13003,10.33.3.13:13003"wsrep_cluster_address="gcomm://"...
-
-
На первом управляющем узле запустите сервис БД и проверьте, что он успешно запустился:
$ sudo systemctl start mariadb-octavia$ sudo systemctl status mariadb-octavia -
Запустите сервис на остальных управляющих узлах и проверьте, что он успешно запустился:
$ sudo systemctl start mariadb-octavia$ sudo systemctl status mariadb-octavia -
На первом управляющем узле отредактируйте файл
/etc/octavia.cnf:-
Удалите строку
wsrep_cluster_address="gcomm://", добавленную ранее. -
Раскомментируйте строку
wsrep_cluster_addressс адресами, закомментированную ранее.Пример...wsrep_cluster_address="gcomm://10.33.3.11:13003,10.33.3.12:13003,10.33.3.13:13003"...
-
-
На первом управляющем узле перезапустите сервис БД:
$ sudo systemctl restart mariadb-octavia
Восстановление БД mariadb-zabbix на сервере мониторинга выполните аналогично процедуре на управляющих узлах, приведенной в разделе Управляющие узлы.
-
Распакуйте архив резервной копии:
Пример команды$ tar xzvf magnum_addons_pg_20240626_1608.tgz -
Посмотрите содержимое файла
/srv/backup/backup_pg_magnum_addons.sh:$ cat /srv/backup/backup_pg_magnum_addons.shПример содержимого файлаcd /srv/backupDATE=`date "+%Y%m%d_%H%M"`export DB_NAME=magnum_addonsexport PGPASSWORD="9h3n8R23HL0z283xBZ1j"pg_dump -h standby.postgresql-${DB_NAME}.service.compute \-U postgres -p 5445 -d ${DB_NAME} > ${DB_NAME}_pg_${DATE}.sqltar cvzf ${DB_NAME}_pg_${DATE}.tgz ${DB_NAME}_pg_${DATE}.sqlrm -f ${DB_NAME}_pg_${DATE}.sql -
Запомните порт
5445. Подставьте значениеDB_NAMEиз этого файла в строкуstandby.postgresql-${DB_NAME}.service.compute, а также замените подстрокуstandbyнаmaster. Если в названии БД есть символы нижних подчеркиваний (_), замените их на дефисы (-). Пример адреса:master.postgresql-magnum-addons.service.compute. -
Получите пароль для Postgres из vault-файла:
$ cd inventory/vkcloud/$ ansible -m debug -i vkcloud.yml -a "msg=\"\n\n{{ vault_postgresql_login_password }}\n\n\"" all[0] | sed 's/\\n/\n/g' -
Войдите в консоль управления БД, подставив полученный адрес и порт в команду:
$ psql -h master.postgresql-magnum-addons.service.compute \-U postgres -p 5445 -d magnum_addons -c '\dt'Пример выводаPassword for user postgres:psql (12.12)Type "help" for help.magnum_addons=# \dtList of relationsSchema | Name | Type | Owner--------+------------------------+-------+---------------public | addon | table | magnum_addonspublic | cluster_addon | table | magnum_addonspublic | cluster_template_addon | table | magnum_addonspublic | schema_migrations | table | magnum_addonspublic | transition_log | table | magnum_addons(5 rows) -
Если в БД есть таблицы, удалите их:
$ psql -h master.postgresql-magnum-addons.service.compute \-U postgres -p 5445 -d magnum_addons \-c 'drop table addon,cluster_addon,cluster_template_addon,schema_migrations,transition_log' -
Восстановите базу из резервной копии:
$ psql -h master.postgresql-magnum-addons.service.compute \-U postgres -p 5445 \-d magnum_addons < magnum_addons_pg_20240626_1608.sql
Проверьте, что сервис, использующий БД, запущен и работает без ошибок. Например, чтобы проверить работу БД magnum_addons, создайте кластер Kubernetes и добавьте ему любой аддон (подробнее — в Руководстве пользователя VK Private Cloud в разделе Контейнеры → Управление кластером → Управление аддонами).
-
При наличии старой резервной копии, перенесите директорию резервных копий из Tarantool в
tarantool_old, чтобы сохранить ее:$ sudo mv /var/lib/backups/tarantool /var/lib/backups/tarantool_old -
На первом управляющем узле распакуйте архив резервной копии:
$ sudo tar -xzvf /var/lib/backups/tarantool.tar.gz -C / -
Поочередно зайдите по SSH на все управляющие узлы и остановите сервисы БД:
$ ssh <CPN001>$ sudo systemctl stop tarantool@breeze_01.service$ exit$ ssh <CPN002>$ sudo systemctl stop tarantool@breeze_02.service$ exit$ ssh <CPN003>$ sudo systemctl stop tarantool@breeze_03.service$ exit -
При наличии файлов существующей БД, скопируйте их:
$ sudo mv /var/lib/tarantool/xlogs/breeze_01 /var/lib/tarantool/xlogs/breeze_01_old$ sudo mv /var/lib/tarantool/snaps/breeze_01 /var/lib/tarantool/snaps/breeze_01_old$ sudo mv /var/lib/tarantool/xlogs/breeze_02 /var/lib/tarantool/xlogs/breeze_02_old$ sudo mv /var/lib/tarantool/snaps/breeze_02 /var/lib/tarantool/snaps/breeze_02_old$ sudo mv /var/lib/tarantool/xlogs/breeze_03 /var/lib/tarantool/xlogs/breeze_03_old$ sudo mv /var/lib/tarantool/snaps/breeze_03 /var/lib/tarantool/snaps/breeze_03_old -
На первом управляющем узле восстановите базу из резервной копии:
$ ssh <CPN001>$ sudo cp -r /var/lib/backups/tarantool/snaps/breeze_01 /var/lib/tarantool/snaps/$ sudo cp -r /var/lib/backups/tarantool/xlogs/breeze_01 /var/lib/tarantool/xlogs/$ sudo chown -R tarantool:tarantool /var/lib/tarantool$ exit -
На остальных управляющих узлах создайте пустые директории для сервисов:
$ ssh <CPN002>$ sudo mkdir /var/lib/tarantool/snaps/breeze_02 /var/lib/tarantool/xlogs/breeze_02$ sudo chown tarantool:tarantool /var/lib/tarantool/snaps/breeze_02$ sudo chown tarantool:tarantool /var/lib/tarantool/xlogs/breeze_02$ exit$ ssh <CPN003>$ sudo mkdir /var/lib/tarantool/snaps/breeze_03 /var/lib/tarantool/xlogs/breeze_03$ sudo chown tarantool:tarantool /var/lib/tarantool/snaps/breeze_03$ sudo chown tarantool:tarantool /var/lib/tarantool/xlogs/breeze_03$ exit -
Запустите сервисы по очереди начиная с первого управляющего узла:
$ ssh <CPN001>$ sudo systemctl start tarantool@breeze_01.service$ sudo systemctl status tarantool@breeze_01.service$ exit$ ssh <CPN002>$ sudo systemctl start tarantool@breeze_02.service$ sudo systemctl status tarantool@breeze_02.service$ exit$ ssh <CPN003>$ sudo systemctl start tarantool@breeze_03.service$ sudo systemctl status tarantool@breeze_03.service$ exit -
Проверьте корректность восстановления: авторизуйтесь в Портале самообслуживания. Если авторизация прошла успешно, БД восстановлены корректно.
-
Убедитесь, что каталог
/var/lib/backups/opensearchотсутствует:$ ls /var/lib/backups/opensearch -
При наличии указанного каталога, переместите его:
$ sudo mv /var/lib/backups/opensearch /var/lib/backups/opensearch_old -
Распакуйте резервную копию в
/var/lib/backups/opensearch:$ tar -xzvf /var/lib/backups/opensearch.tar.gz -C / -
Остановите OpenSearch, восстановите базу из резервной копии и запустите OpenSearch:
$ sudo docker stop opensearch opensearch_dashboards \&& sudo mv /var/lib/backups/opensearch/opensearch-data1 /var/lib/docker/volumes/ \&& sudo cp /var/lib/backups/opensearch/opensearch-dashboards.yml /etc/opensearch/opensearch-dashboards.yml \&& sudo chown -R centos:centos /var/lib/docker/volumes/opensearch-data1/_data \&& sudo chown opensearch:opensearch /etc/opensearch/opensearch-dashboards.yml \&& sudo docker start opensearch opensearch_dashboards
-
Остановите etcd на всех управляющих узлах:
$ sudo systemctl stop etcd-iam-node1$ sudo systemctl stop etcd-iam-node2$ sudo systemctl stop etcd-iam-node3 -
При наличии файлов существующей БД, скопируйте их:
$ sudo mv /srv/etcd/etcd-iam-node1 /srv/etcd/etcd-iam-node1-old$ sudo mv /srv/etcd/etcd-iam-node2 /srv/etcd/etcd-iam-node2-old$ sudo mv /srv/etcd/etcd-iam-node3 /srv/etcd/etcd-iam-node3-old -
Восстановите БД из резервной копии на всех управляющих узлах:
$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot restore --data-dir /srv/etcd/etcd-iam-node1/default.etcd/ iam.db$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot restore --data-dir /srv/etcd/etcd-iam-node2/default.etcd/ iam.db$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot restore --data-dir /srv/etcd/etcd-iam-node3/default.etcd/ iam.db -
Установите права на восстановленную БД:
$ chown -R etcd:etcd /srv/etcd/etcd-iam-node1/$ chown -R etcd:etcd /srv/etcd/etcd-iam-node2/$ chown -R etcd:etcd /srv/etcd/etcd-iam-node3/ -
Запустите etcd:
$ sudo systemctl start etcd-iam-node1$ sudo systemctl start etcd-iam-node2$ sudo systemctl start etcd-iam-node3
-
Остановите сервис на всех управляющих узлах:
$ sudo systemctl stop etcd-magnum-node1$ sudo systemctl stop etcd-magnum-node2$ sudo systemctl stop etcd-magnum-node3 -
При наличии файлов существующей БД, скопируйте их:
$ sudo mv /srv/etcd/etcd-magnum-node1 /srv/etcd/etcd-magnum-node1-old$ sudo mv /srv/etcd/etcd-magnum-node2 /srv/etcd/etcd-magnum-node2-old$ sudo mv /srv/etcd/etcd-magnum-node3 /srv/etcd/etcd-magnum-node3-old -
Восстановите БД из резервной копии на всех управляющих узлах:
$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot restore --data-dir /srv/etcd/etcd-magnum-node1/default.etcd/ magnum.db$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot restore --data-dir /srv/etcd/etcd-magnum-node2/default.etcd/ magnum.db$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot restore --data-dir /srv/etcd/etcd-magnum-node3/default.etcd/ magnum.db -
Установите права на восстановленную БД:
$ chown -R etcd:etcd /srv/etcd/etcd-magnum-node1/$ chown -R etcd:etcd /srv/etcd/etcd-magnum-node2/$ chown -R etcd:etcd /srv/etcd/etcd-magnum-node3/ -
Запустите etcd:
$ sudo systemctl start etcd-magnum-node1$ sudo systemctl start etcd-magnum-node2$ sudo systemctl start etcd-magnum-node3
-
Остановите etcd на всех управляющих узлах:
$ sudo systemctl stop etcd-scrooge-node1$ sudo systemctl stop etcd-scrooge-node2$ sudo systemctl stop etcd-scrooge-node3 -
При наличии файлов существующей БД, скопируйте их:
$ sudo mv /srv/etcd/etcd-scrooge-node1 /srv/etcd/etcd-scrooge-node1-old$ sudo mv /srv/etcd/etcd-scrooge-node2 /srv/etcd/etcd-scrooge-node2-old$ sudo mv /srv/etcd/etcd-scrooge-node3 /srv/etcd/etcd-scrooge-node3-old -
Восстановите БД из резервной копии на всех управляющих узлах:
$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot restore --data-dir /srv/etcd/etcd-scrooge-node1/default.etcd/ scrooge.db$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot restore --data-dir /srv/etcd/etcd-scrooge-node2/default.etcd/ scrooge.db$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot restore --data-dir /srv/etcd/etcd-scrooge-node3/default.etcd/ scrooge.db -
Установите права на восстановленную БД:
$ chown -R etcd:etcd /srv/etcd/etcd-scrooge-node1/$ chown -R etcd:etcd /srv/etcd/etcd-scrooge-node2/$ chown -R etcd:etcd /srv/etcd/etcd-scrooge-node3/ -
Запустите etcd:
$ sudo systemctl start etcd-scrooge-node1$ sudo systemctl start etcd-scrooge-node2$ sudo systemctl start etcd-scrooge-node3
Чтобы восстановить Apache Zookeeper, выполните следующие операции на всех управляющих узлах:
-
При наличии файлов существующей БД, скопируйте их:
$ sudo mv /var/lib/zookeeper /var/lib/zookeeper-old -
Распакуйте архив резервной копии:
$ sudo tar -xvf /tmp/zookeeper.tar.gz -C / -
Перезапустите службу Apache Zookeeper:
$ sudo systemctl restart zookeeper -
Проверьте состояние кластера:
$ echo ruok | nc localhost 2181$ echo stat | nc localhost 2181
Задайте переменные оболочки для работы с обновлением:
export NEW_RELEASE_NAME="4.1.1"export PREV_RELEASE_NAME="4.0.2"export NEW_DISTRIB_DIR="/home/redos/box-4.1.1"export PREV_DISTRIB_DIR="/home/redos/box-4.0.2"export PREV_INVENTORY_DIR="/home/redos/inventory"export INVGEN_ARCH="linux-amd64"
export NEW_RELEASE_NAME="4.1.1"export PREV_RELEASE_NAME="4.1.0"export NEW_DISTRIB_DIR="/home/redos/box-4.1.1"export PREV_DISTRIB_DIR="/home/redos/box-4.1.0"export PREV_INVENTORY_DIR="/home/redos/inventory"export INVGEN_ARCH="linux-amd64"
Здесь:
-
NEW_RELEASE_NAME— новая версия релиза Платформы. -
PREV_RELEASE_NAME— предыдущая версия релиза Платформы. -
NEW_DISTRIB_DIR— директория нового релиза. -
PREV_DISTRIB_DIR— директория предыдущего релиза. -
PREV_INVENTORY_DIR— директория предыдущего Inventory. -
INVGEN_ARCH— архитектура Inventory-генератора. Может быть одна из следующих:darwin-amd64.darwin-arm64.linux-amd64.linux-arm64.windows-amd64.
Создайте резервную копию Inventory предыдущего релиза:
$ cp -r $PREV_INVENTORY_DIR $PREV_INVENTORY_DIR-${PREV_RELEASE_NAME}.bck
В VK Private Cloud 4.1.1 нет типа эмуляции Icelake-Client. Если он используется в версии 4.0, замените его:
-
На вычислительных узлах в файле
/etc/nova/nova.confпроверьте значение параметраcpu_models.Пример фрагмента файла[libvirt]cpu_mode = customcpu_models = Icelake-Client -
Если значение параметра
cpu_modelsравноIcelake-Client, замените его наIcelake-Server.