560 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			560 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ==================
 | ||
| Backup and Restore
 | ||
| ==================
 | ||
| 
 | ||
| This guide describes the StarlingX backup and restore functionality.
 | ||
| 
 | ||
| 
 | ||
| .. contents::
 | ||
|    :local:
 | ||
|    :depth: 2
 | ||
| 
 | ||
| --------
 | ||
| Overview
 | ||
| --------
 | ||
| 
 | ||
| This feature provides a last resort disaster recovery option for situations
 | ||
| where the StarlingX software and/or data are compromised. The provided backup
 | ||
| utility creates a deployment state snapshot, which can be used to restore the
 | ||
| deployment to a previously good working state.
 | ||
| 
 | ||
| There are two main options for backup and restore:
 | ||
| 
 | ||
| * Platform restore, where the platform data is re-initialized, but the
 | ||
|   applications are preserved – including OpenStack, if previously installed.
 | ||
|   During this process, you can choose to keep the Ceph cluster (Default
 | ||
|   option: ``wipe_ceph_osds=false``) or to wipe it and restore Ceph data from
 | ||
|   off-box copies (``wipe_ceph_osds=true``).
 | ||
| 
 | ||
| * OpenStack application backup and restore, where only the OpenStack application
 | ||
|   is restored. This scenario deletes the OpenStack application, re-applies the
 | ||
|   OpenStack application, and restores data from off-box copies (Glance, Ceph
 | ||
|   volumes, database).
 | ||
| 
 | ||
| This guide describes both restore options, including the backup procedure.
 | ||
| 
 | ||
| .. note::
 | ||
| 
 | ||
|       * Ceph application data is **not** backed up. It is preserved by the
 | ||
|         restore process by default (``wipe_ceph_osds=false``), but it is not
 | ||
|         restored if ``wipe_ceph_osds=true`` is used. You can protect against
 | ||
|         Ceph cluster failures by using off-box custom backups.
 | ||
| 
 | ||
|       * During restore, images for applications that are integrated with
 | ||
|         StarlingX are automatically downloaded to the local registry from
 | ||
|         external sources. If your system has custom Kubernetes pods that use the
 | ||
|         local registry and are **not** integrated with StarlingX, after restore
 | ||
|         you should confirm that the correct images are present, so the
 | ||
|         applications can restart automatically.
 | ||
| 
 | ||
| ----------
 | ||
| Backing up
 | ||
| ----------
 | ||
| 
 | ||
| There are two methods for backing up: local play method and remote play method.
 | ||
| 
 | ||
| ~~~~~~~~~~~~~~~~~
 | ||
| Local play method
 | ||
| ~~~~~~~~~~~~~~~~~
 | ||
| 
 | ||
| Run the following command:
 | ||
| 
 | ||
| ::
 | ||
| 
 | ||
|   ansible-playbook /usr/share/ansible/stx-ansible/playbooks/backup.yml -e "ansible_become_pass=<sysadmin password> admin_password=<sysadmin password>"
 | ||
| 
 | ||
| The ``<admin_password>`` and ``<ansible_become_pass>`` must be set correctly by
 | ||
| one of the following methods:
 | ||
| 
 | ||
| * The ``-e`` option on the command line
 | ||
| * An override file
 | ||
| * In the Ansible secret file
 | ||
| 
 | ||
| If you deploy the system with rook instead of ceph backend, you must add the ``rook_enabled=true`` variable.
 | ||
| 
 | ||
| ::
 | ||
| 
 | ||
|   ansible-playbook /usr/share/ansible/stx-ansible/playbooks/backup.yml -e "ansible_become_pass=<sysadmin password> admin_password=<sysadmin password> [ rook_enabled=true ]"
 | ||
| 
 | ||
| The output of the command is a file named in this format:
 | ||
| ``<inventory_hostname>_platform_backup_<timestamp>.tgz``
 | ||
| 
 | ||
| The prefixes ``<platform_backup_filename_prefix>`` and
 | ||
| ``<openstack_backup_filename_prefix>`` can be overridden via the ``-e`` option
 | ||
| on the command line or an override file.
 | ||
| 
 | ||
| The generated backup tar files will look like this:
 | ||
| ``localhost_platform_backup_2019_08_08_15_25_36.tgz`` and
 | ||
| ``localhost_openstack_backup_2019_08_08_15_25_36.tgz``. They are located in
 | ||
| the ``/opt/backups`` directory on controller-0.
 | ||
| 
 | ||
| ~~~~~~~~~~~~~~~~~~
 | ||
| Remote play method
 | ||
| ~~~~~~~~~~~~~~~~~~
 | ||
| 
 | ||
| #.  Log in to the host where Ansible is installed and clone the playbook code
 | ||
|     from opendev at https://opendev.org/starlingx/ansible-playbooks.git
 | ||
| 
 | ||
| #.  Provide an inventory file, either a customized one that is specified via the
 | ||
|     ``-i`` option or the default one which resides in the Ansible configuration
 | ||
|     directory (``/etc/ansible/hosts``). You must specify the IP of the controller
 | ||
|     host. For example, if the host-name is ``my_vbox``, the inventory-file should
 | ||
|     have an entry called ``my_vbox`` as shown in the example below:
 | ||
| 
 | ||
|     ::
 | ||
| 
 | ||
|       all:
 | ||
|         hosts:
 | ||
|           wc68:
 | ||
|             ansible_host: 128.222.100.02
 | ||
|          my_vbox:
 | ||
|             ansible_host: 128.224.141.74
 | ||
| 
 | ||
| #.  Run Ansible with the command:
 | ||
| 
 | ||
|     ::
 | ||
| 
 | ||
|       ansible-playbook <path-to-backup-playbook-entry-file> --limit host-name -i <inventory-file> -e <optional-extra-vars>
 | ||
| 
 | ||
|     The generated backup tar files can be found in ``<host_backup_dir>`` which
 | ||
|     is ``$HOME`` by default. It can be overridden by the ``-e`` option on the
 | ||
|     command line or in an override file.
 | ||
| 
 | ||
|     The generated backup tar file has the same naming convention as the local
 | ||
|     play method.
 | ||
| 
 | ||
| Example:
 | ||
| 
 | ||
| ::
 | ||
| 
 | ||
|   ansible-playbook /localdisk/designer/repo/cgcs-root/stx/stx-ansible-playbooks/playbookconfig/src/playbooks/backup-restore/backup.yml --limit my_vbox -i $HOME/br_test/hosts -e "host_backup_dir=$HOME/br_test ansible_become_pass=Li69nux* admin_password=Li69nux* ansible_ssh_pass=Li69nux* ansible_ssh_pass=Li69nux*"
 | ||
| 
 | ||
| #. If you deploy the system with rook instead of ceph backend, you must add the ``rook_enabled=true`` variable.
 | ||
| 
 | ||
| ~~~~~~~~~~~~~~~~~~~~~~
 | ||
| Backup content details
 | ||
| ~~~~~~~~~~~~~~~~~~~~~~
 | ||
| 
 | ||
| The backup contains the following:
 | ||
| 
 | ||
| * Postgresql config: Backup roles, table spaces and schemas for databases
 | ||
| 
 | ||
| * Postgresql data:
 | ||
| 
 | ||
|   * template1, sysinv, barbican db data, fm db data,
 | ||
| 
 | ||
|   * keystone db for primary region,
 | ||
| 
 | ||
|   * dcmanager db for dc controller,
 | ||
| 
 | ||
|   * dcorch db for dc controller
 | ||
| 
 | ||
| * ETCD database
 | ||
| 
 | ||
| * LDAP db
 | ||
| 
 | ||
| * Ceph crushmap
 | ||
| 
 | ||
| * DNS server list
 | ||
| 
 | ||
| * System Inventory network overrides. These are needed at restore to correctly
 | ||
|   set up the OS configuration:
 | ||
| 
 | ||
|   * addrpool
 | ||
| 
 | ||
|   * pxeboot_subnet
 | ||
| 
 | ||
|   * management_subnet
 | ||
| 
 | ||
|   * management_start_address
 | ||
| 
 | ||
|   * cluster_host_subnet
 | ||
| 
 | ||
|   * cluster_pod_subnet
 | ||
| 
 | ||
|   * cluster_service_subnet
 | ||
| 
 | ||
|   * external_oam_subnet
 | ||
| 
 | ||
|   * external_oam_gateway_address
 | ||
| 
 | ||
|   * external_oam_floating_address
 | ||
| 
 | ||
| * Docker registries on controller
 | ||
| 
 | ||
| * Docker proxy  (See :ref:`docker_proxy_config` for details.)
 | ||
| 
 | ||
| * Backup data:
 | ||
| 
 | ||
|   * OS configuration
 | ||
| 
 | ||
|     ok: [localhost] => (item=/etc) Note:  Although everything here is backed up,
 | ||
|     not all of the content will be restored.
 | ||
| 
 | ||
|   * Home directory ‘sysadmin’ user and all LDAP user accounts
 | ||
| 
 | ||
|     ok: [localhost] => (item=/home)
 | ||
| 
 | ||
|   * Generated platform configuration
 | ||
| 
 | ||
|     ok: [localhost] => (item=/opt/platform/config/<SW_VERSION>)
 | ||
| 
 | ||
|     ok: [localhost] => (item=/opt/platform/puppet/<SW_VERSION>/hieradata) - All the
 | ||
|     hieradata in this folder is backed up. However, only the static hieradata
 | ||
|     (static.yaml and secure_static.yaml) will be restored to bootstrap
 | ||
|     controller-0.
 | ||
| 
 | ||
|   * Keyring
 | ||
| 
 | ||
|     ok: [localhost] => (item=/opt/platform/.keyring/<SW_VERSION>)
 | ||
| 
 | ||
|   * Patching and package repositories
 | ||
| 
 | ||
|     ok: [localhost] => (item=/opt/patching)
 | ||
| 
 | ||
|     ok: [localhost] => (item=/var/www/pages/updates)
 | ||
| 
 | ||
|   * Extension filesystem
 | ||
| 
 | ||
|     ok: [localhost] => (item=/opt/extension)
 | ||
| 
 | ||
|   * atch-vault filesystem for distributed cloud system-controller
 | ||
| 
 | ||
|     ok: [localhost] => (item=/opt/patch-vault)
 | ||
| 
 | ||
|   * FluxCD manifests
 | ||
| 
 | ||
|     ok: [localhost] => (item=/opt/platform/armada/<SW_VERSION>)
 | ||
| 
 | ||
|   * Helm charts
 | ||
| 
 | ||
|     ok: [localhost] => (item=/opt/platform/helm_charts)
 | ||
| 
 | ||
| 
 | ||
| ---------
 | ||
| Restoring
 | ||
| ---------
 | ||
| 
 | ||
| This section describes the platform restore and OpenStack restore processes.
 | ||
| 
 | ||
| ~~~~~~~~~~~~~~~~
 | ||
| Platform restore
 | ||
| ~~~~~~~~~~~~~~~~
 | ||
| 
 | ||
| In the platform restore process, the etcd and system inventory databases are
 | ||
| preserved by default. You can choose to preserve the Ceph data or to wipe it.
 | ||
| 
 | ||
| * To preserve Ceph cluster data, use ``wipe_ceph_osds=false``.
 | ||
| 
 | ||
| * To start with an empty Ceph cluster, use ``wipe_ceph_osds=true``. After the
 | ||
|   restore procedure is complete and before you restart the applications, you
 | ||
|   must restore the Ceph data from off-box copies.
 | ||
| 
 | ||
| Steps:
 | ||
| 
 | ||
| #.  Backup: Run the backup.yml playbook, whose output is a platform backup
 | ||
|     tarball. Move the backup tarball outside of the cluster for safekeeping.
 | ||
| 
 | ||
| #.  Restore:
 | ||
| 
 | ||
|     a.  If using ``wipe_ceph_osds=true``, then power down all the nodes.
 | ||
| 
 | ||
|         **Do not** power down storage nodes if using ``wipe_ceph_osds=false``.
 | ||
| 
 | ||
|         .. important::
 | ||
| 
 | ||
|                 It is mandatory for the storage cluster to remain functional
 | ||
|                 during restore when ``wipe_ceph_osds=false``, otherwise data
 | ||
|                 loss will occur. Power down storage nodes only when
 | ||
|                 ``wipe_ceph_osds=true``.
 | ||
| 
 | ||
|     #.  Reinstall controller-0.
 | ||
| 
 | ||
|     #.  Run the Ansible restore_platform.yml playbook to restore a full system
 | ||
|         from the platform tarball archive. For this step, similar to the backup
 | ||
|         procedure, we have two options: local and remote play.
 | ||
| 
 | ||
|         **Local play**
 | ||
| 
 | ||
|         i.  Download the backup to the controller. You can also use an external
 | ||
|             storage device, for example, a USB drive.
 | ||
| 
 | ||
|         #.  Run the command:
 | ||
| 
 | ||
|         ::
 | ||
| 
 | ||
|           ansible-playbook /usr/share/ansible/stx-ansible/playbooks/restore_platform.yml -e "initial_backup_dir=<location_of_tarball> ansible_become_pass=<admin_password> admin_password=<admin_password> backup_filename=<backup_filename>"
 | ||
| 
 | ||
|     #.  If you deploy the system with rook instead of ceph backend, you must add the ``rook_enabled=true`` variable in above command.
 | ||
| 
 | ||
|         **Remote play**
 | ||
| 
 | ||
|         i.  Log in to the host where Ansible is installed and clone the playbook
 | ||
|             code from OpenDev at
 | ||
|             https://opendev.org/starlingx/ansible-playbooks.git
 | ||
| 
 | ||
|         #.  Provide an inventory file, either a customized one that is specified
 | ||
|             via the ``-i`` option or the default one that resides in the Ansible
 | ||
|             configuration directory (``/etc/ansible/hosts``). You must specify
 | ||
|             the IP of the controller host. For example, if the host-name is
 | ||
|             ``my_vbox``, the inventory-file should have an entry called
 | ||
|             ``my_vbox`` as shown in the example below.
 | ||
| 
 | ||
|             ::
 | ||
| 
 | ||
|               all:
 | ||
|               hosts:
 | ||
|                   wc68:
 | ||
|                   ansible_host: 128.222.100.02
 | ||
|               my_vbox:
 | ||
|                   ansible_host: 128.224.141.74
 | ||
| 
 | ||
|         #.  Run Ansible:
 | ||
| 
 | ||
|             ::
 | ||
| 
 | ||
|               ansible-playbook <path-to-backup-playbook-entry-file> --limit host-name -i <inventory-file> -e <optional-extra-vars>
 | ||
| 
 | ||
|             Where ``optional-extra-vars`` include:
 | ||
| 
 | ||
|             * ``<wipe_ceph_osds>`` is set to either ``wipe_ceph_osds=false``
 | ||
|               (Default:  Keep Ceph data intact) or
 | ||
|               ``wipe_ceph_osds=true`` (Start with an empty Ceph cluster).
 | ||
| 
 | ||
|             * ``<backup_filename>`` is the platform backup tar file. It must be
 | ||
|               provided via the ``-e`` option on the command line. For example,
 | ||
|               ``-e “backup_filename=localhost_platform_backup_2019_07_15_14_46_37.tgz”``
 | ||
| 
 | ||
|             * ``<initial_backup_dir>`` is the location on the Ansible
 | ||
|               control machine where the platform backup tar file is placed to
 | ||
|               restore the platform. It must be provided via the ``-e`` option on
 | ||
|               the command line.
 | ||
| 
 | ||
|             * ``<admin_password>``, ``<ansible_become_pass>`` and
 | ||
|               ``<ansible_ssh_pass>`` must be set correctly via the ``-e``
 | ||
|               option on the command line or in the Ansible secret file.
 | ||
|               ``<ansible_ssh_pass>`` is the password for the sysadmin user on
 | ||
|               controller-0.
 | ||
| 
 | ||
|             * ``<ansible_remote_tmp>`` should be set to a new directory (no
 | ||
|               need to create it ahead of time) under ``/home/sysadmin`` on
 | ||
|               controller-0 via the ``-e`` option on the command line.
 | ||
| 
 | ||
|             Example command:
 | ||
| 
 | ||
|             ::
 | ||
| 
 | ||
|               ansible-playbook /localdisk/designer/jenkins/tis-stx-dev/cgcs-root/stx/ansible-playbooks/playbookconfig/src/playbooks/restore_platform.yml --limit my_vbox -i $HOME/br_test/hosts -e "ansible_become_pass=Li69nux* admin_password=Li69nux* ansible_ssh_pass=Li69nux* initial_backup_dir=$HOME/br_test backup_filename=my_vbox_system_backup_2019_08_08_15_25_36.tgz ansible_remote_tmp=/home/sysadmin/ansible-restore"
 | ||
| 
 | ||
|     #.  If you deploy the system with rook instead of ceph backend, you must add the ``rook_enabled=true`` variable in above command.
 | ||
| 
 | ||
|     #.  After Ansible is executed, perform the following steps based on your
 | ||
|         deployment mode:
 | ||
| 
 | ||
|         **AIO-SX**
 | ||
| 
 | ||
|         i. Unlock controller-0 and wait for it to boot.
 | ||
| 
 | ||
|         #. Applications should transition from `restore-requested` to
 | ||
|            `applying` and make a final transition to `applied` state. If
 | ||
|            applications transition from `applying` to `restore-requested`
 | ||
|            state, ensure there is network access and access to the Docker
 | ||
|            registry. The process is repeated once per minute until all
 | ||
|            applications are transitioned to the `applied` state.
 | ||
| 
 | ||
|         **AIO-DX**
 | ||
| 
 | ||
|         i. Unlock controller-0 and wait for it to boot.
 | ||
| 
 | ||
|         #. Applications should transition from `restore-requested` to
 | ||
|            `applying` and make a final transition to `applied` state. If
 | ||
|            applications transition from `applying` to `restore-requested`
 | ||
|            state, ensure there is network access and access to the Docker
 | ||
|            registry. The process is repeated once per minute until all
 | ||
|            applications are transitioned to the `applied` state.
 | ||
| 
 | ||
|         #. Reinstall controller-1 (boot it from PXE, wait for it to become
 | ||
|            `online`).
 | ||
| 
 | ||
|         #. Unlock controller-1.
 | ||
| 
 | ||
|         **Standard (with controller storage)**
 | ||
| 
 | ||
|         i. Unlock controller-0 and wait for it to boot. After unlock, you will
 | ||
|            see all nodes, including storage nodes, as offline.
 | ||
| 
 | ||
|         #. Applications should transition from `restore-requested` to
 | ||
|            `applying` and make a final transition to `applied` state. If
 | ||
|            applications transition from `applying` to `restore-requested`
 | ||
|            state, ensure there is network access and access to the Docker
 | ||
|            registry. The process is repeated once per minute until all
 | ||
|            applications are transitioned to the `applied` state.
 | ||
| 
 | ||
|         #. Reinstall controller-1 and compute nodes (boot them from PXE, wait
 | ||
|            for them to become `online`).
 | ||
| 
 | ||
|         #. Unlock controller-1 and wait for it to be available.
 | ||
| 
 | ||
|         #. Unlock compute nodes and wait for them to be available.
 | ||
| 
 | ||
|         **Standard (without controller storage)**
 | ||
| 
 | ||
|         i. Unlock controller-0 and wait for it to boot. After unlock, you will
 | ||
|            see all nodes, except storage nodes, as offline. If
 | ||
|            ``wipe_ceph_osds=false`` is used, storage nodes must be powered on
 | ||
|            and in the `available` state throughout the procedure. Otherwise,
 | ||
|            storage nodes must be powered off.
 | ||
| 
 | ||
|         #. Applications should transition from `restore-requested` to
 | ||
|            `applying` and make a final transition to `applied` state. If
 | ||
|            applications transition from `applying` to `restore-requested`
 | ||
|            state, ensure there is network access and access to the Docker
 | ||
|            registry. The process is repeated once per minute until all
 | ||
|            applications are transitioned to the `applied` state.
 | ||
| 
 | ||
|         #. Reinstall controller-1 and compute nodes (boot them from PXE, wait
 | ||
|            for them to become `online`).
 | ||
| 
 | ||
|         #. Unlock controller-1 and wait for it to be available.
 | ||
| 
 | ||
|         #. If ``wipe_ceph_osds=true`` is used, then reinstall storage nodes.
 | ||
| 
 | ||
|         #. Unlock compute nodes and wait for them to be available.
 | ||
| 
 | ||
|         #. (Optional) Reinstall storage nodes.
 | ||
| 
 | ||
|     #.  Wait for Calico and Coredns pods to start. Run the
 | ||
|         ``system restore-complete`` command. Type 750.006 alarms will disappear
 | ||
|         one at a time, as the applications are being auto-applied.
 | ||
| 
 | ||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | ||
| OpenStack application backup and restore
 | ||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | ||
| 
 | ||
| In this procedure, only the OpenStack application will be restored.
 | ||
| 
 | ||
| Steps:
 | ||
| 
 | ||
| #.  Backup: Run the backup.yml playbook, whose output is a platform backup
 | ||
|     tarball. Move the backup tarball outside of the cluster for safekeeping.
 | ||
| 
 | ||
|     .. note::
 | ||
| 
 | ||
|             When OpenStack is running, the backup.yml playbook generates two
 | ||
|             tarballs: a platform backup tarball and an OpenStack backup tarball.
 | ||
| 
 | ||
| #.  Restore:
 | ||
| 
 | ||
|     a.  Delete the old OpenStack application and upload the application again.
 | ||
|         (Note that images and volumes will remain in Ceph.)
 | ||
| 
 | ||
|         .. parsed-literal::
 | ||
| 
 | ||
|             system application-remove |prefix|-openstack
 | ||
|             system application-delete |prefix|-openstack
 | ||
|             system application-upload |prefix|-openstack-<ver>.tgz
 | ||
| 
 | ||
|     #.  (Optional) If you want to delete the Ceph data, remove old Glance images
 | ||
|         and Cinder volumes from the Ceph pool.
 | ||
| 
 | ||
|     #.  Run the restore_openstack.yml Ansible playbook to restore the OpenStack
 | ||
|         tarball.
 | ||
| 
 | ||
|         If you don't want to manipulate the Ceph data, execute this command:
 | ||
| 
 | ||
|         ::
 | ||
| 
 | ||
|           ansible-playbook /usr/share/ansible/stx-ansible/playbooks/restore_openstack.yml -e 'initial_backup_dir=<location_of_backup_filename> ansible_become_pass=<admin_password> admin_password=<admin_password> backup_filename=<backup_filename>'
 | ||
| 
 | ||
|         For example:
 | ||
| 
 | ||
|         ::
 | ||
| 
 | ||
|           ansible-playbook /usr/share/ansible/stx-ansible/playbooks/restore_openstack.yml -e 'initial_backup_dir=/opt/backups ansible_become_pass=Li69nux* admin_password=Li69nux* backup_filename=localhost_openstack_backup_2019_12_13_12_43_17.tgz'
 | ||
| 
 | ||
|         If you want to restore Glance images and Cinder volumes from external
 | ||
|         storage (the Optional step above was executed) or you want to reconcile
 | ||
|         newer data in the Glance and Cinder volumes pool with older data, then
 | ||
|         you must execute the following steps:
 | ||
| 
 | ||
|         * Run restore_openstack playbook with the ``restore_cinder_glance_data``
 | ||
|           flag enabled. This step will bring up MariaDB services, restore
 | ||
|           MariaDB data, and bring up Cinder and Glance services.
 | ||
| 
 | ||
|           ::
 | ||
| 
 | ||
|             ansible-playbook /usr/share/ansible/stx-ansible/playbooks/restore_openstack.yml -e 'restore_cinder_glance_data=true initial_backup_dir=<location_of_backup_filename> ansible_become_pass=<admin_password> admin_password=<admin_password> backup_filename=<backup_filename>'
 | ||
| 
 | ||
|           For example:
 | ||
| 
 | ||
|           ::
 | ||
| 
 | ||
|             ansible-playbook /usr/share/ansible/stx-ansible/playbooks/restore_openstack.yml -e 'restore_cinder_glance_data=true ansible_become_pass=Li69nux* admin_password=Li69nux* backup_filename=localhost_openstack_backup_2019_12_13_12_43_17.tgz initial_backup_dir=/opt/backups'
 | ||
| 
 | ||
|         * Restore Glance images and Cinder volumes using image-backup.sh and
 | ||
|           tidy_storage_post_restore helper scripts.
 | ||
| 
 | ||
|           The tidy storage script is used to detect any discrepancy between
 | ||
|           Cinder/Glance DB and rbd pools.
 | ||
| 
 | ||
|           Discrepancies between the Glance images DB and the rbd images pool are
 | ||
|           handled in the following ways:
 | ||
| 
 | ||
|           * If an image is in the Glance images DB but not in the rbd images
 | ||
|             pool, list the image and suggested actions to take in a log file.
 | ||
| 
 | ||
|           * If an image is in the rbd images pool but not in the Glance images
 | ||
|             DB, create a Glance image in the Glance images DB to associate with
 | ||
|             the backend data. Also, list the image and suggested actions to
 | ||
|             take in a log file.
 | ||
| 
 | ||
|           Discrepancies between the Cinder volumes DB and the rbd cinder-volumes
 | ||
|           pool are handled in the following ways:
 | ||
| 
 | ||
|           * If a volume is in the Cinder volumes DB but not in the rbd
 | ||
|             cinder-volumes pool, set the volume state to "error". Also, list
 | ||
|             the volume and suggested actions to take in a log file.
 | ||
| 
 | ||
|           * If a volume is in the rbd cinder-volumes pool but not in the Cinder
 | ||
|             volumes DB, remove any snapshot(s) associated with this volume in
 | ||
|             the rbd pool and create a volume in the Cinder volumes DB to
 | ||
|             associate with the backend data. List the volume and suggested
 | ||
|             actions to take in a log file.
 | ||
| 
 | ||
|           * If a volume is in both the Cinder volumes DB and the rbd
 | ||
|             cinder-volumes pool and it has snapshot(s) in the rbd pool,
 | ||
|             re-create the snapshot in Cinder if it doesn't exist.
 | ||
| 
 | ||
|           * If a snapshot is in the Cinder DB but not in the rbd pool, it
 | ||
|             will be deleted.
 | ||
| 
 | ||
|           Usage:
 | ||
| 
 | ||
|           ::
 | ||
| 
 | ||
|             tidy_storage_post_restore <log_file>
 | ||
| 
 | ||
|           The image-backup.sh script is used to backup and restore Glance
 | ||
|           images from the ceph image pool.
 | ||
| 
 | ||
|           Usage:
 | ||
| 
 | ||
|           ::
 | ||
| 
 | ||
|             image-backup export <uuid> - export the image with <uuid> into backup file /opt/backups/image_<uuid>.tgz
 | ||
| 
 | ||
|             image-backup import image_<uuid>.tgz - import the image from the backup source file at /opt/backups/image_<uuid>.tgz
 | ||
| 
 | ||
|     #.  To bring up the remaining OpenStack services, run the playbook
 | ||
|         again with ``restore_openstack_continue`` set to true:
 | ||
| 
 | ||
|         ::
 | ||
| 
 | ||
|           ansible-playbook /usr/share/ansible/stx-ansible/playbooks/restore_openstack.yml -e 'restore_openstack_continue=true initial_backup_dir=<location_of_backup_filename> ansible_become_pass=<admin_password> admin_password=<admin_password> backup_filename=<backup_filename>'
 | ||
| 
 | ||
|         For example:
 | ||
| 
 | ||
|         ::
 | ||
| 
 | ||
|           ansible-playbook /usr/share/ansible/stx-ansible/playbooks/restore_openstack.yml -e 'restore_openstack_continue=true ansible_become_pass=Li69nux* admin_password=Li69nux* backup_filename=localhost_openstack_backup_2019_12_13_12_43_17.tgz initial_backup_dir=/opt/backups'
 | 
