5.4. コロケーションされた Ceph モニターを持つアンダークラウドおよびコントロールプレーンノードの復元

更新またはアップグレード中にエラーが発生した場合には、ReaR バックアップを使用して、アンダークラウドもしくはオーバークラウドのコントロールプレーンノードのいずれか (またはその両方) を以前の状態に復元することができます。

前提条件

手順

  1. バックアップノードで、Ceph バックアップをホストする NFS ディレクトリーをエクスポートします。<IP_ADDRESS/24> を IP アドレスおよびネットワークのサブネットマスクに置き換えてください。

    [root@backup ~]# cat >> /etc/exports << EOF
    /ceph_backups <IP_ADDRESS/24>(rw,sync,no_root_squash,no_subtree_check)
    EOF
  2. アンダークラウドノードで、source コマンドでアンダークラウドの認証情報を読み込み、以下のスクリプトを実行します。

    # source stackrc
    #! /bin/bash
    for i in `openstack server list -c Name -c Networks -f value | grep controller | awk -F'=' '{print $2}' | awk -F' ' '{print $1}'`; do ssh -q heat-admin@$i 'sudo systemctl stop ceph-mon@$(hostname -s) ceph-mgr@$(hostname -s)'; done

    ceph-mgr@controller.service コンテナーが停止したことを確認するには、以下のコマンドを入力します。

    [heat-admin@overcloud-controller-x ~]# sudo docker ps | grep ceph
  3. アンダークラウドノードで、source コマンドでアンダークラウドの認証情報を読み込み、以下のスクリプトを実行します。

    # source stackrc
    #! /bin/bash
    for i in `openstack server list -c Name -c Networks -f value | grep controller | awk -F'=' '{print $2}' | awk -F' ' '{print $1}'`; do ssh -q heat-admin@$i 'sudo mkdir /ceph_backups'; done
    
    #! /bin/bash
    for i in `openstack server list -c Name -c Networks -f value | grep controller | awk -F'=' '{print $2}' | awk -F' ' '{print $1}'`; do ssh -q heat-admin@$i 'sudo mount -t nfs  <BACKUP_NODE_IP_ADDRESS>:/ceph_backups /ceph_backups'; done
    
    #! /bin/bash
    for i in `openstack server list -c Name -c Networks -f value | grep controller | awk -F'=' '{print $2}' | awk -F' ' '{print $1}'`; do ssh -q heat-admin@$i 'sudo mkdir /ceph_backups/$(hostname -s)'; done
    
    #! /bin/bash
    for i in `openstack server list -c Name -c Networks -f value | grep controller | awk -F'=' '{print $2}' | awk -F' ' '{print $1}'`; do ssh -q heat-admin@$i 'sudo tar -zcv --xattrs-include=*.* --xattrs  --xattrs-include=security.capability --xattrs-include=security.selinux --acls -f /ceph_backups/$(hostname -s)/$(hostname -s).tar.gz  /var/lib/ceph'; done
  4. 復元するノードで、以下のタスクを実行します。

    1. 次に進む前にノードの電源を切ります。
    2. バックアッププロセス中に作成した ReaR バックアップファイルでノードを復元します。ファイルは、バックアップノードの /ceph_backups ディレクトリーにあります。
    3. Relax-and-Recover ブートメニューから、Recover <CONTROL_PLANE_NODE> を選択します。ここで、<CONTROL_PLANE_NODE> はコントロールプレーンノードの名前になります。
    4. プロンプトで以下のコマンドを入力します。

      RESCUE <CONTROL_PLANE_NODE> :~ # rear recover

      イメージの復元プロセスが完了すると、コンソールに以下のメッセージが表示されます。

    Finished recovering your system
    Exiting rear recover
    Running exit tasks
  5. 復元するノードに対して、Ceph バックアップを /ceph_backups ディレクトリーから /var/lib/ceph ディレクトリーにコピーします。

    1. システムのマウントポイントを特定します。

      RESCUE <CONTROL_PLANE_NODE>:~# df -h
      Filesystem      Size  Used Avail Use% Mounted on
      devtmpfs         16G     0   16G   0% /dev
      tmpfs            16G     0   16G   0% /dev/shm
      tmpfs            16G  8.4M   16G   1% /run
      tmpfs            16G     0   16G   0% /sys/fs/cgroup
      /dev/vda2        30G   13G   18G  41% /mnt/local

      /dev/vda2 ファイルシステムは /mnt/local にマウントされます。

    2. 一時ディレクトリーを作成します。

      RESCUE <CONTROL_PLANE_NODE>:~ # mkdir /tmp/restore
      RESCUE <CONTROL_PLANE_NODE>:~ # mount -v -t nfs -o rw,noatime <BACKUP_NODE_IP_ADDRESS>:/ceph_backups /tmp/restore/
    3. コントロールプレーンノードで、既存の /var/lib/ceph ディレクトリーを削除します。

      RESCUE <CONTROL_PLANE_NODE>:~ # rm -rf /mnt/local/var/lib/ceph/*
    4. 以前の Ceph マップを復元します。<control_plane_node> をコントロールプレーンノードの名前に置き換えます。

      RESCUE <CONTROL_PLANE_NODE>:~ # tar -xvC /mnt/local/ -f /tmp/restore/<CONTROL_PLANE_NODE>/<CONTROL_PLANE_NODE>.tar.gz --xattrs --xattrs-include='*.*' var/lib/ceph
    5. ファイルが復元されていることを確認します。

      RESCUE <CONTROL_PLANE_NODE>:~ # ls -l
      total 0
      drwxr-xr-x 2 root 107 26 Jun 18 18:52 bootstrap-mds
      drwxr-xr-x 2 root 107 26 Jun 18 18:52 bootstrap-osd
      drwxr-xr-x 2 root 107 26 Jun 18 18:52 bootstrap-rbd
      drwxr-xr-x 2 root 107 26 Jun 18 18:52 bootstrap-rgw
      drwxr-xr-x 3 root 107 31 Jun 18 18:52 mds
      drwxr-xr-x 3 root 107 31 Jun 18 18:52 mgr
      drwxr-xr-x 3 root 107 31 Jun 18 18:52 mon
      drwxr-xr-x 2 root 107  6 Jun 18 18:52 osd
      drwxr-xr-x 3 root 107 35 Jun 18 18:52 radosgw
      drwxr-xr-x 2 root 107  6 Jun 18 18:52 tmp
  6. ノードの電源を切ります。

    RESCUE <CONTROL_PLANE_NODE> :~ #  poweroff
  7. ノードの電源をオンにします。ノードは以前の状態で再開します。