VK Private Cloud logo
Помощь
Обновлена 17 июля 2026 г. в 15:55

Подготовка

Для обновления используйте менеджер терминалов Tmux или Screen.

Создание резервной копии баз данных

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

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

Список баз данных

В Платформе используются следующие средства хранения служебных данных:

  • MySQL/Galera.
  • PostgreSQL.
  • Tarantool (сервисы Dusk и Breeze).
  • RabbitMQ.
  • Apache ZooKeeper.
  • etcd.
  • OpenSearch.

MySQL/Galera

Управляющие узлы

Для создания резервных копий баз данных (БД) на управляющем узле выполните команды:

# 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> — время создания резервной копии.

Postgres

Чтобы создать резервные копии БД, на управляющем узле выполните команды:

# 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> — время создания резервной копии.

Tarantool

Чтобы создать резервные копии, выполните команды на первом управляющем узле:

  1. Создайте каталоги для резервных копий:

    $ sudo mkdir -p /var/lib/backups/tarantool
  2. Создайте резервные копии:

    $ 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
  3. Заархивируйте резервные копии:

    $ sudo tar -czvf /var/lib/backups/tarantool.tar.gz /var/lib/backups/tarantool

OpenSearch

  1. Перед созданием резервной копии убедитесь, что каталога /var/lib/backups/opensearch нет на узле мониторинга.

  2. Остановите OpenSearch и выполните резервное копирование каталогов и файлов.

  3. Создайте на узле мониторинга каталог для резервной копии:

    $ sudo mkdir -p /var/lib/backups/opensearch
  4. Создайте резервную копию:

    $ 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
  5. Заархивируйте резервную копию:

    $ 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> — дата создания резервной копии.

etcd

IAM

На одном из управляющих узлов создайте резервную копию:

$ sudo etcdctl --endpoints=127.0.0.1:22379 snapshot save /srv/backup/iam-$(date +%Y%m%d-%H%M).db

В результате будет создан файл iam-<DATE>.db, где <DATE> — дата создания резервной копии.

Magnum

Создайте резервную копию:

$ sudo etcdctl --endpoints=127.0.0.1:23379 snapshot save /srv/backup/magnum-$(date +%Y%m%d-%H%M).db

В результате будет создан файл magnum-<DATE>.db, где <DATE> — дата создания резервной копии.

Scrooge

Создайте резервную копию:

$ sudo etcdctl --endpoints=127.0.0.1:24379 snapshot save /srv/backup/scrooge-$(date +%Y%m%d-%H%M).db

В результате будет создан файл scrooge-<DATE>.db, где <DATE> — дата создания резервной копии.

Apache ZooKeeper

Сохраните /var/lib/zookeeper на всех управляющих узлах любым удобным способом, например:

$ sudo tar -czvf /srv/backup/zookeeper-$(date +%Y%m%d-%H%M).tar.gz /var/lib/zookeeper

Восстановление

MySQL/Galera

Управляющие узлы

  1. Остановите сервис базы данных на всех управляющих узлах:

    $ sudo systemctl stop mariadb-octavia
  2. Удалите все предыдущие данные на всех управляющих узлах:

    $ sudo rm -rf /srv/mysql/octavia/data/*
  3. Зайдите по SSH на первый управляющий узел.

  4. На первом управляющем узле распакуйте архив с резервной копией:

    $ cd /srv/backup/$ tar xzvf OCTAVIA_db_bcp_20240624_1743.tgz
  5. Выведите содержимое файла ~/xtrabackup_galera_info:

    $ cat /srv/backup/extrabackup_octavia/xtrabackup_galera_info
  6. В выводе получите строку вида <UUID>:<SEQNO> с двумя значениями, разделенными двоеточием:

    Пример вывода
    [root@control001 backup]# cat extrabackup_octavia/xtrabackup_galera_info4f095201-2ce3-11ef-82f6-cfa78bf73a14:52797
  7. Создайте файл /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.
  8. Восстановите базу из резервной копии:

    $ sudo mariabackup --defaults-file=/etc/octavia.cnf --copy-back \  --target-dir=/srv/backup/extrabackup_octavia
  9. Установите владельца каталога после восстановления:

    $ sudo chown -R mysql:root /srv/mysql/octavia/data
  10. Отредактируйте файл /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://"...
  11. На первом управляющем узле запустите сервис БД и проверьте, что он успешно запустился:

    $ sudo systemctl start mariadb-octavia$ sudo systemctl status mariadb-octavia
  12. Запустите сервис на остальных управляющих узлах и проверьте, что он успешно запустился:

    $ sudo systemctl start mariadb-octavia$ sudo systemctl status mariadb-octavia
  13. На первом управляющем узле отредактируйте файл /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"...
  14. На первом управляющем узле перезапустите сервис БД:

    $ sudo systemctl restart mariadb-octavia

Мониторинг

Восстановление БД mariadb-zabbix на сервере мониторинга выполните аналогично процедуре на управляющих узлах, приведенной в разделе Управляющие узлы.

Postgres

  1. Распакуйте архив резервной копии:

    Пример команды
    $ tar xzvf magnum_addons_pg_20240626_1608.tgz
  2. Посмотрите содержимое файла /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
  3. Запомните порт 5445. Подставьте значение DB_NAME из этого файла в строку standby.postgresql-${DB_NAME}.service.compute, а также замените подстроку standby на master. Если в названии БД есть символы нижних подчеркиваний (_), замените их на дефисы (-). Пример адреса: master.postgresql-magnum-addons.service.compute.

  4. Получите пароль для 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'
  5. Войдите в консоль управления БД, подставив полученный адрес и порт в команду:

    $ 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=# \dt                    List of relations Schema |          Name          | Type  |     Owner--------+------------------------+-------+--------------- public | addon                  | table | magnum_addons public | cluster_addon          | table | magnum_addons public | cluster_template_addon | table | magnum_addons public | schema_migrations      | table | magnum_addons public | transition_log         | table | magnum_addons(5 rows)
  6. Если в БД есть таблицы, удалите их:

    $ 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'
  7. Восстановите базу из резервной копии:

    $ 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

  1. При наличии старой резервной копии, перенесите директорию резервных копий из Tarantool в tarantool_old, чтобы сохранить ее:

    $ sudo mv /var/lib/backups/tarantool /var/lib/backups/tarantool_old
  2. На первом управляющем узле распакуйте архив резервной копии:

    $ sudo tar -xzvf /var/lib/backups/tarantool.tar.gz -C /
  3. Поочередно зайдите по 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
  4. При наличии файлов существующей БД, скопируйте их:

    $ 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
  5. На первом управляющем узле восстановите базу из резервной копии:

    $ 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
  6. На остальных управляющих узлах создайте пустые директории для сервисов:

    $ 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
  7. Запустите сервисы по очереди начиная с первого управляющего узла:

    $ 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
  8. Проверьте корректность восстановления: авторизуйтесь в Портале самообслуживания. Если авторизация прошла успешно, БД восстановлены корректно.

OpenSearch

  1. Убедитесь, что каталог /var/lib/backups/opensearch отсутствует:

    $ ls /var/lib/backups/opensearch
  2. При наличии указанного каталога, переместите его:

    $ sudo mv /var/lib/backups/opensearch /var/lib/backups/opensearch_old
  3. Распакуйте резервную копию в /var/lib/backups/opensearch:

    $ tar -xzvf /var/lib/backups/opensearch.tar.gz -C /
  4. Остановите 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

IAM

  1. Остановите etcd на всех управляющих узлах:

    $ sudo systemctl stop etcd-iam-node1$ sudo systemctl stop etcd-iam-node2$ sudo systemctl stop etcd-iam-node3
  2. При наличии файлов существующей БД, скопируйте их:

    $ 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
  3. Восстановите БД из резервной копии на всех управляющих узлах:

    $ 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
  4. Установите права на восстановленную БД:

    $ 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/
  5. Запустите etcd:

    $ sudo systemctl start etcd-iam-node1$ sudo systemctl start etcd-iam-node2$ sudo systemctl start etcd-iam-node3

Magnum

  1. Остановите сервис на всех управляющих узлах:

    $ sudo systemctl stop etcd-magnum-node1$ sudo systemctl stop etcd-magnum-node2$ sudo systemctl stop etcd-magnum-node3
  2. При наличии файлов существующей БД, скопируйте их:

    $ 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
  3. Восстановите БД из резервной копии на всех управляющих узлах:

    $ 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
  4. Установите права на восстановленную БД:

    $ 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/
  5. Запустите etcd:

    $ sudo systemctl start etcd-magnum-node1$ sudo systemctl start etcd-magnum-node2$ sudo systemctl start etcd-magnum-node3

Scrooge

  1. Остановите etcd на всех управляющих узлах:

    $ sudo systemctl stop etcd-scrooge-node1$ sudo systemctl stop etcd-scrooge-node2$ sudo systemctl stop etcd-scrooge-node3
  2. При наличии файлов существующей БД, скопируйте их:

    $ 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
  3. Восстановите БД из резервной копии на всех управляющих узлах:

    $ 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
  4. Установите права на восстановленную БД:

    $ 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/
  5. Запустите etcd:

    $ sudo systemctl start etcd-scrooge-node1$ sudo systemctl start etcd-scrooge-node2$ sudo systemctl start etcd-scrooge-node3

Apache Zookeeper

Чтобы восстановить Apache Zookeeper, выполните следующие операции на всех управляющих узлах:

  1. При наличии файлов существующей БД, скопируйте их:

    $ sudo mv /var/lib/zookeeper /var/lib/zookeeper-old
  2. Распакуйте архив резервной копии:

    $ sudo tar -xvf /tmp/zookeeper.tar.gz -C /
  3. Перезапустите службу Apache Zookeeper:

    $ sudo systemctl restart zookeeper
  4. Проверьте состояние кластера:

    $ echo ruok | nc localhost 2181$ echo stat | nc localhost 2181

Переменные

Задайте переменные оболочки для работы с обновлением:

Пример значений переменных для обновления Платформы с версии 4.0 до версии 4.1.1
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"
Пример значений переменных для обновления Платформы с версии 4.1 до версии 4.1.1
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

Создайте резервную копию Inventory предыдущего релиза:

$ cp -r $PREV_INVENTORY_DIR $PREV_INVENTORY_DIR-${PREV_RELEASE_NAME}.bck

Эмулятор CPU

В VK Private Cloud 4.1.1 нет типа эмуляции Icelake-Client. Если он используется в версии 4.0, замените его:

  1. На вычислительных узлах в файле /etc/nova/nova.conf проверьте значение параметра cpu_models.

    Пример фрагмента файла
    [libvirt]cpu_mode = customcpu_models = Icelake-Client
  2. Если значение параметра cpu_models равно Icelake-Client, замените его на Icelake-Server.