Menu Close

アンダークラウドおよびコントロールプレーンノードのバックアップおよび復元

Red Hat OpenStack Platform 16.1

アンダークラウドおよびオーバークラウドコントロールプレーンノードのバックアップの作成および復元

概要

本ガイドでは、アンダークラウドおよびコントロールプレーンノードのバックアップを作成し、復元する方法を説明します。バックアップは、Red Hat OpenStack Platform をアップグレードまたは行進する際に必要です。また、任意で環境の定期的なバックアップを作成することで、問題発生時のダウンタイムを最小限に抑えることができます。

はじめに

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社の CTO、Chris Wright のメッセージ を参照してください。

Red Hat ドキュメントへのフィードバックの提供

弊社ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があればお知らせください。

ドキュメントへのダイレクトフィードバック (DDF) 機能の使用 (英語版のみ)

特定の文章、段落、またはコードブロックに対して直接コメントを送付するには、DDF の Add Feedback 機能を使用してください。なお、この機能は英語版のドキュメントでのみご利用いただけます。

  1. Multi-page HTML 形式でドキュメントを表示します。
  2. ドキュメントの右上隅に Feedback ボタンが表示されていることを確認してください。
  3. コメントするテキスト部分をハイライト表示します。
  4. Add Feedback をクリックします。
  5. Add Feedback フィールドにコメントを入力します。
  6. (オプション) ドキュメントチームが連絡を取り問題についてお伺いできるように、ご自分のメールアドレスを追加します。
  7. Submit をクリックします。

第1章 アンダークラウドノードのバックアップ

アンダークラウドノードをバックアップするには、バックアップノードを設定し、アンダークラウドノードに Relax-and-Recover ツールをインストールし、バックアップイメージを作成します。バックアップは、通常の環境メンテナンスの一環として作成できます。

さらに、更新またはアップグレードを実行する前にアンダークラウドノードをバックアップする必要があります。バックアップを使用して、更新またはアップグレード時にエラーが発生した場合に、アンダークラウドノードを以前の状態に復元することができます。

1.1. サポート対象のバックアップ形式およびプロトコル

アンダークラウドおよびバックアップ/復元プロセスは、オープンソースのツールである Relax-and-Recover (ReaR)を使用してブート可能なバックアップイメージを作成し、復元します。ReaR は Bash で記述されており、複数のイメージ形式と複数の転送プロトコルをサポートします。

以下の一覧で、Red Hat OpenStack Platform がサポートするバックアップフォーマットおよびプロトコルを示しています。

ブート可能なメディア形式
  • ISO
ファイルトランスポートプロトコル
  • SFTP
  • NFS

1.2. バックアップノードへの NFS サーバーのインストールと構成

バックアップファイルを保存するために、新しい NFS サーバーをインストールして構成できます。バックアップノードに NFS サーバーをインストールして設定するには、インベントリーファイルを作成してSSH キーを設定して、NFS サーバーオプションを指定して openstack undercloud backup コマンドを実行します。

重要
  • NFS サーバーまたは SFTP サーバーをインストールして設定している場合は、この手順を実行する必要はありません。バックアップするノードに ReaR を設定するときに、サーバー情報を入力します。
  • デフォルトでは、Relax and Recover (ReaR) 設定は、NFS サーバーの IP アドレスが 192.168.24.1 であることを前提としています。NFS サーバーの IP アドレスが異なる場合は、設定 ReaR コマンドにパラメーター tripleo_backup_and_restore_nfs_server を追加します。

手順

  1. アンダークラウドノードにおいて、source コマンドでアンダークラウドの認証情報を読み込みます。

    [stack@undercloud-0 ~]$ source stackrc
    (undercloud) [stack@undercloud ~]$
  2. アンダークラウドノードで、バックアップノードのインベントリーファイルを作成します。ここで、<ip_address> および <user> を実際の環境の該当する値に置き換えます。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF'> ~/nfs-inventory.yaml
    [BackupNode]
    <backup_node> ansible_host=<ip_address> ansible_user=<user>
    EOF
  3. アンダークラウドノードで、以下の Ansible Playbook を作成します。ここで、<backup_node> をバックアップノードのホスト名に置き換えます。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_nfs_setup.yaml
    # Playbook
    # Substitute <backup_node> with the host name of your backup node.
    - become: true
      hosts: <backup_node>
      name: Setup NFS server for ReaR
      roles:
      - role: backup-and-restore
    EOF
  4. 公開 SSH 鍵をアンダークラウドノードからバックアップノードにコピーします。

    (undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>

    <backup_node> をバックアップノードのパスおよび名前に置き換えます。

  5. アンダークラウドノードで以下の ansible-playbook コマンドを入力し、バックアップノードを設定します。

    (undercloud) [stack@undercloud ~]$ ansible-playbook \
        -v -i ~/nfs-inventory.yaml \
        --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
        --become \
        --become-user root \
        --tags bar_setup_nfs_server \
        ~/bar_nfs_setup.yaml

1.3. アンダークラウドノードへの ReaR のインストール

アンダークラウドノードのバックアップを作成する前に、アンダークラウドに Relax and Recover (ReaR) をインストールして設定します。

前提条件

手順

  1. アンダークラウドノードにおいて、source コマンドでアンダークラウドの認証情報を読み込み、tripleo-ansible-inventory コマンドを使用して、すべてのオーバークラウドノードのホストおよび変数が含まれる静的なインベントリーファイル生成します。

    [stack@undercloud-0 ~]$ source stackrc
    (undercloud) [stack@undercloud ~]$ tripleo-ansible-inventory \
    --ansible_ssh_user heat-admin \
    --static-yaml-inventory /home/stack/tripleo-inventory.yaml

    カスタムのスタック名を使用する場合は、--stack <stack_name> オプションを tripleo-ansible-inventory コマンドに追加します。

  2. アンダークラウドノードで、以下の Ansible Playbook を作成します。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_setup-undercloud.yaml
    # Playbook
    # Installing and configuring ReaR on the undercloud node
    - become: true
      hosts: undercloud
      name: Install ReaR
      roles:
      - role: backup-and-restore
    EOF
  3. 以下のいずれかのオプションを選択します。

    1. NFS を使用する場合は、次の Ansible コマンドを入力して、アンダークラウドノードに ReaR をインストールします。

      (undercloud) [stack@undercloud ~]$ ansible-playbook \
          -v -i ~/tripleo-inventory.yaml \
          --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
          --become \
          --become-user root \
          -e tripleo_backup_and_restore_nfs_server=<nfs-ip> \
          --tags bar_setup_rear \
          ~/bar_rear_setup-undercloud.yaml
    2. SFTP を使用する場合は、次の Ansible コマンドを入力して、アンダークラウドノードに ReaR をインストールします。

      (undercloud) [stack@undercloud ~]$ ansible-playbook \
          -v -i ~/tripleo-inventory.yaml \
          --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
          --become \
          --become-user root \
          -e tripleo_backup_and_restore_output_url=sftp://<user>:<password>@<backup_node_ip>/ \
          -e tripleo_backup_and_restore_backup_url=iso:///backup/ \
          --tags bar_setup_rear \
          ~/bar_rear_setup-undercloud.yaml
  4. システムで UEFI ブートローダーを使用している場合は、アンダークラウドノードで以下の手順を実施します。

    1. 以下のツールをインストールします。

      $ sudo dnf install dosfstools efibootmgr
    2. USING_UEFI_BOOTLOADER パラメーターの値 0 を値 1 に置き換えて、/etc/rear/local.conf にある ReaR 設定ファイルで UEFI バックアップを有効にします。

1.4. アンダークラウドノードのスタンドアロンのデータベースバックアップの作成

Red Hat OpenStack Platform 環境を 13 から 16.1 にアップグレードする場合は、アンダークラウドのアップグレードを実施してから、アンダークラウドノードで Leapp アップグレードプロセスを実施する前に、スタンドアロンのデータベースバックアップを作成する必要があります。

オプションで、スタンドアロンのアンダークラウドデータベースのバックアップをルーチンのバックアップスケジュールに追加して、データセキュリティーをさらに高めることができます。アンダークラウドノードの完全バックアップには、アンダークラウドノードのデータベースバックアップが含まれます。ただし、アンダークラウドの完全な復元に失敗すると、完全なアンダークラウドバックアップのデータベース部分へのアクセスが失われる可能性があります。この場合、スタンドアロンのアンダークラウドデータベースのバックアップからデータベースを復旧することができます。

手順

  • アンダークラウドノードのデータベースバックアップを作成します。

    openstack undercloud backup --db-only

    db バックアップファイルは、openstack-backup-mysql-<timestamp>.sql という名前の /home/stack に保存されます。

1.5. バックアップ用の Open vSwitch (OVS)インターフェースの設定

お使いの環境で Open vSwitch (OVS)ブリッジを使用する場合は、アンダークラウドまたはコントロールプレーンノードをバックアップする前に OVS インターフェースを手動で設定する必要があります。復元プロセスでは、この情報を使用してネットワークインターフェースを復元します。

手順

  • /etc/rear/local.conf ファイルに、以下の形式で NETWORKING_PREPARATION_COMMANDS パラメーターを追加します。

    NETWORKING_PREPARATION_COMMANDS=('<command_1>' '<command_2>' ...')

    <command_1> および <command_2> を、ネットワークインターフェース名または IP アドレスを設定するコマンドに置き換えます。たとえば、ip link add br-ctlplane type bridge コマンドを追加してコントロールプレーンのブリッジ名を設定するか、ip link set eth0 up コマンドを追加してインターフェースの名前を設定できます。ネットワーク設定に基づいて、パラメーターにさらにコマンドを追加します。

1.6. アンダークラウドノードのバックアップの作成

アンダークラウドノードのバックアップを作成するには、backup-and-restore Ansible ロールを使用します。その後、ノードが破損したりアクセスできなくなったりした場合に備えて、バックアップを使用して、アンダークラウドノードを以前の状態に復元できます。アンダークラウドノードのバックアップには、アンダークラウドノードで実行されるデータベースのバックアップが含まれます。

Red Hat OpenStack Platform 環境を 13 から 16.1 にアップグレードする場合は、アンダークラウドのアップグレードを実行してから、オーバークラウドノードで Leapp によるアップグレードプロセスを実施する前に、データベースのバックアップを別に作成する必要があります。詳細は、「アンダークラウドノードのスタンドアロンのデータベースバックアップの作成」 を参照してください。

前提条件

手順

  1. アンダークラウドに stack ユーザーとしてログインします。
  2. MySQL の root パスワードを取得します。

    [stack@undercloud ~]$ PASSWORD=$(sudo /bin/hiera -c /etc/puppet/hiera.yaml mysql::server::root_password)
  3. アンダークラウドノードのデータベースのバックアップを作成します。

    [stack@undercloud ~]$ sudo podman exec mysql bash -c "mysqldump -uroot -p$PASSWORD --opt --all-databases" > /root/undercloud-all-databases.sql
  4. source コマンドでアンダークラウドの認証情報を読み込みます。

    [stack@undercloud ~]$ source stackrc
  5. アンダークラウドノードで、以下の Ansible Playbook を作成します。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_create_restore_images-undercloud.yaml
    # Playbook
    # Using ReaR on the undercloud node.
    - become: true
      hosts: undercloud
      name: Create the recovery images for the undercloud
      roles:
      - role: backup-and-restore
    EOF
  6. アンダークラウドノードのバックアップを作成するには、以下の ansible-playbook コマンドを入力します。

    (undercloud) [stack@undercloud ~]$ ansible-playbook \
        -v -i ~/tripleo-inventory.yaml \
        --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
        --become \
        --become-user root \
        --tags bar_create_recover_image \
        ~/bar_rear_create_restore_images-undercloud.yaml

第2章 コントロールプレーンノードのバックアップ

コントロールプレーンノードをバックアップするには、バックアップノードを設定し、コントロールプレーンノードに Relax-and-Recover ツールをインストールし、バックアップイメージを作成します。バックアップは、通常の環境メンテナンスの一環として作成できます。

更新またはアップグレードを実行する前にコントロールプレーンノードをバックアップする必要があります。更新またはアップグレード時にエラーが発生した場合に、バックアップを使用して、コントロールプレーンノードを以前の状態に復元することができます。また、バックアップは、通常の環境メンテナンスの一環として作成できます。

2.1. サポート対象のバックアップ形式およびプロトコル

アンダークラウドおよびバックアップ/復元プロセスは、オープンソースのツールである Relax-and-Recover (ReaR)を使用してブート可能なバックアップイメージを作成し、復元します。ReaR は Bash で記述されており、複数のイメージ形式と複数の転送プロトコルをサポートします。

以下の一覧で、Red Hat OpenStack Platform がサポートするバックアップフォーマットおよびプロトコルを示しています。

ブート可能なメディア形式
  • ISO
ファイルトランスポートプロトコル
  • SFTP
  • NFS

2.2. バックアップノードへの NFS サーバーのインストールと構成

バックアップファイルを保存するために、新しい NFS サーバーをインストールして構成できます。バックアップノードに NFS サーバーをインストールして設定するには、インベントリーファイルを作成してSSH キーを設定して、NFS サーバーオプションを指定して openstack undercloud backup コマンドを実行します。

重要
  • NFS サーバーまたは SFTP サーバーをインストールして設定している場合は、この手順を実行する必要はありません。バックアップするノードに ReaR を設定するときに、サーバー情報を入力します。
  • デフォルトでは、Relax and Recover (ReaR) 設定は、NFS サーバーの IP アドレスが 192.168.24.1 であることを前提としています。NFS サーバーの IP アドレスが異なる場合は、設定 ReaR コマンドにパラメーター tripleo_backup_and_restore_nfs_server を追加します。

手順

  1. アンダークラウドノードにおいて、source コマンドでアンダークラウドの認証情報を読み込みます。

    [stack@undercloud-0 ~]$ source stackrc
    (undercloud) [stack@undercloud ~]$
  2. アンダークラウドノードで、バックアップノードのインベントリーファイルを作成します。ここで、<ip_address> および <user> を実際の環境の該当する値に置き換えます。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF'> ~/nfs-inventory.yaml
    [BackupNode]
    <backup_node> ansible_host=<ip_address> ansible_user=<user>
    EOF
  3. アンダークラウドノードで、以下の Ansible Playbook を作成します。ここで、<backup_node> をバックアップノードのホスト名に置き換えます。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_nfs_setup.yaml
    # Playbook
    # Substitute <backup_node> with the host name of your backup node.
    - become: true
      hosts: <backup_node>
      name: Setup NFS server for ReaR
      roles:
      - role: backup-and-restore
    EOF
  4. 公開 SSH 鍵をアンダークラウドノードからバックアップノードにコピーします。

    (undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>

    <backup_node> をバックアップノードのパスおよび名前に置き換えます。

  5. アンダークラウドノードで以下の ansible-playbook コマンドを入力し、バックアップノードを設定します。

    (undercloud) [stack@undercloud ~]$ ansible-playbook \
        -v -i ~/nfs-inventory.yaml \
        --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
        --become \
        --become-user root \
        --tags bar_setup_nfs_server \
        ~/bar_nfs_setup.yaml

2.3. コントロールプレーンノードへの ReaR のインストール

コントロールプレーンノードのバックアップを作成する前に、各コントロールプレーンノードに Relax and Recover (ReaR) をインストールして設定します。

前提条件

手順

  1. アンダークラウドノードで、以下の Ansible Playbook を作成します。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_setup-controller.yaml
    # Playbook
    # Install and configuring ReaR on the control plane nodes
    - become: true
      hosts: Controller
      name: Install ReaR
      roles:
      - role: backup-and-restore
    EOF
    注記

    設定可能なロールを持つコントロールプレーンノードをデプロイした場合は、ホストタイプの Controller をコントロールプレーン内のノードのタイプに置き換えます。たとえば、データベース、メッセージング、およびネットワーキングを別々のノードにデプロイした場合は、ControllerOpenstack,Database,Messaging,Networker と入力します。

  2. 以下のいずれかのオプションを選択します。

    1. NFS を使用し、NFS サーバーの IP アドレスがデフォルト値の 192.168.24.1 の場合は、アンダークラウドノードで以下の Ansible コマンドを入力し、コントロールプレーンノードに ReaR をインストールします。

      (undercloud) [stack@undercloud ~]$ ansible-playbook \
          -v -i ~/tripleo-inventory.yaml \
          --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
          --become \
          --become-user root \
          --tags bar_setup_rear \
          ~/bar_rear_setup-controller.yaml
    2. SFTP を使用し、NFS サーバーの IP アドレスがデフォルト値の 192.168.24.1 以外の場合は、以下の Ansible コマンドを入力し、コントロールプレーンノードに ReaR をインストールします。

      (undercloud) [stack@undercloud ~]$ ansible-playbook \
          -v -i ~/tripleo-inventory.yaml \
          --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
          --become \
          --become-user root \
          -e tripleo_backup_and_restore_nfs_server=<nfs_ip> \
          --tags bar_setup_rear \
          ~/bar_rear_setup-controller.yaml

      <nfs_ip> を NFS サーバーの IP アドレスに置き換えます。

    3. SFTP を使用する場合は、次の Ansible コマンドを入力してコントロールプレーンノードに ReaR をインストールします。

      (undercloud) [stack@undercloud ~]$ ansible-playbook \
          -v -i ~/tripleo-inventory.yaml \
          --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
          --become \
          --become-user root \
          -e tripleo_backup_and_restore_output_url=sftp://<user>:<password>@<backup_node_ip>/ \
          -e tripleo_backup_and_restore_backup_url=iso:///backup/ \
          --tags bar_setup_rear \
          ~/bar_rear_setup-undercloud.yaml
  3. システムで UEFI ブートローダーを使用している場合は、コントロールプレーンノードで以下の手順を実施します。

    1. 以下のツールをインストールします。

      $ sudo dnf install dosfstools efibootmgr
    2. USING_UEFI_BOOTLOADER パラメーターの値 0 を値 1 に置き換えて、/etc/rear/local.conf にある ReaR 設定ファイルで UEFI バックアップを有効にします。

2.4. オーバークラウドノードのスタンドアロンのデータベースバックアップの作成

Red Hat OpenStack Platform 環境を 13 から 16.1 にアップグレードする場合は、オーバークラウドのアップグレードを実施した後、オーバークラウドノードで Leapp アップグレードプロセスを実施する前に、スタンドアロンのデータベースバックアップを作成する必要があります。

オプションで、スタンドアロンのオーバークラウドデータベースのバックアップをルーチンのバックアップスケジュールに追加して、追加のデータセキュリティーを提供できます。オーバークラウドノードの完全バックアップには、オーバークラウドノードのデータベースバックアップが含まれます。ただし、完全なオーバークラウドの復元に失敗した場合には、完全なオーバークラウドバックアップのデータベース部分へのアクセスが失われる可能性があります。この場合は、スタンドアロンのオーバークラウドのデータベースバックアップからデータベースを復旧することができます。

手順

  • オーバークラウドノードのデータベースバックアップを作成します。

    openstack overcloud backup --db-only

    db バックアップファイルは、openstack-backup-mysql-<timestamp>.sql という名前の /home/stack に保存されます。

2.5. バックアップ用の Open vSwitch (OVS)インターフェースの設定

お使いの環境で Open vSwitch (OVS)ブリッジを使用する場合は、アンダークラウドまたはコントロールプレーンノードをバックアップする前に OVS インターフェースを手動で設定する必要があります。復元プロセスでは、この情報を使用してネットワークインターフェースを復元します。

手順

  • /etc/rear/local.conf ファイルに、以下の形式で NETWORKING_PREPARATION_COMMANDS パラメーターを追加します。

    NETWORKING_PREPARATION_COMMANDS=('<command_1>' '<command_2>' ...')

    <command_1> および <command_2> を、ネットワークインターフェース名または IP アドレスを設定するコマンドに置き換えます。たとえば、ip link add br-ctlplane type bridge コマンドを追加してコントロールプレーンのブリッジ名を設定するか、ip link set eth0 up コマンドを追加してインターフェースの名前を設定できます。ネットワーク設定に基づいて、パラメーターにさらにコマンドを追加します。

2.6. コントロールプレーンノードのバックアップの作成

コントロールプレーンノードのバックアップを作成するには、backup-and-restore Ansible ロールを使用しします。その後、ノードが破損したりアクセスできなくなったりした場合に備えて、バックアップを使用して、コントロールプレーンノードを以前の状態に復元できます。コントロールプレーンのバックアップには、コントロールプレーンノードで実行されるデータベースのバックアップが含まれます。

前提条件

手順

  1. 各コントロールプレーンノードで、各ノードの config-drive パーティションを root ユーザーとしてバックアップします。

    [root@controller-x ~]$ dd if=<config_drive_partition> of=/mnt/config-drive
  2. アンダークラウドノードで、以下の Ansible Playbook を作成します。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_create_restore_images-controller.yaml
    # Playbook
    # Using ReaR on the control plane nodes.
    - become: true
      hosts: ceph_mon
      name: Backup ceph authentication
      tasks:
        - name: Backup ceph authentication role
          include_role:
            name: backup-and-restore
            tasks_from: ceph_authentication
          tags:
          -  bar_create_recover_image
    - become: true
      hosts: Controller
      name: Create the recovery images for the control plane
      roles:
      - role: backup-and-restore
    EOF
  3. アンダークラウドノードで以下の ansible-playbook コマンドを入力し、コントロールプレーンノードのバックアップを作成します。

    (undercloud) [stack@undercloud ~]$ ansible-playbook \
        -v -i ~/tripleo-inventory.yaml \
        --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
        --become \
        --become-user root \
        --tags bar_create_recover_image \
        ~/bar_rear_create_restore_images-controller.yaml

2.7. cron を使用したコントロールプレーンノードバックアップのスケジューリング

重要

この機能は、本リリースでは テクノロジープレビュー として提供しているため、Red Hat では全面的にはサポートしていません。これは、テスト用途にのみご利用いただく機能で、実稼働環境にデプロイすべきではありません。テクノロジープレビュー機能についての詳しい情報は、「対象範囲の詳細」を参照してください。

cron ジョブを設定し、Ansible backup-and-restore ロールを使用して ReaR でコントロールプレーンノードのバックアップを作成することができます。/var/log/rear-cron ディレクトリーでログを確認することができます。

前提条件

手順

  1. アンダークラウドノードで、以下のコマンドを入力してバックアップ用のスクリプトを作成します。

    [stack@undercloud ~]$ cat <<'EOF' > /home/stack/execute-rear-cron.sh
    
    #!/bin/bash
    
    OWNER="stack"
    TODAY=`date +%Y%m%d`
    FILE="/var/log/rear-cron.${TODAY}"
    sudo touch ${FILE}
    sudo chown ${OWNER}:${OWNER} ${FILE}
    
    CURRENTTIME=`date`
    echo "[$CURRENTTIME] rear start" >> ${FILE}
    source /home/stack/stackrc && /usr/bin/openstack overcloud backup 2>&1 >> ${FILE}
    CURRENTTIME=`date`
    echo "[$CURRENTTIME] rear end" >> ${FILE}
    EOF
  2. /home/stack/execute-rear-cron.sh スクリプトに実行可能な権限を設定します。

    [stack@undercloud ~]$ chmod 755 /home/stack/execute-rear-cron.sh
  3. crontab -e コマンドで crontab ファイルを編集し、任意のエディターで以下の cron ジョブを追加します。ファイルに加えた変更を保存するようにしてください。

    [stack@undercloud ~]# $ crontab -e
    #adding the following line
    0 0 * * * /home/stack/execute-rear-cron.sh

    /home/stack/execute-rear-cron.sh スクリプトは、stack ユーザーにより午前 0 時に実行されるようにスケジュールされます。

  4. cron ジョブがスケジュールされていることを確認するには、以下のコマンドを入力します。

    [stack@undercloud ~]$ crontab -l

    コマンド出力には、スケジュールされている cron ジョブが表示されます。

    0 0 * * * /home/stack/execute-rear-cron.sh

第3章 コンポーザブルロールを使用するコントロールプレーンノードのバックアップ

カスタムロールとも呼ばれるコンポーザブルロールを使用してコントロールプレーンをデプロイした場合は、コンポーザブルロール設定に基づいて各タイプのノードをキャプチャーするようにバックアッププロセスを設定します。コントロールプレーンノードをバックアップするには、バックアップノードを設定し、コントロールプレーンノードに Relax-and-Recover ツールをインストールし、バックアップイメージを作成します。

更新またはアップグレードを実行する前にコントロールプレーンノードをバックアップする必要があります。更新またはアップグレード時にエラーが発生した場合に、バックアップを使用して、コントロールプレーンノードを以前の状態に復元することができます。また、バックアップは、通常の環境メンテナンスの一環として作成できます。

3.1. サポート対象のバックアップ形式およびプロトコル

アンダークラウドおよびバックアップ/復元プロセスは、オープンソースのツールである Relax-and-Recover (ReaR)を使用してブート可能なバックアップイメージを作成し、復元します。ReaR は Bash で記述されており、複数のイメージ形式と複数の転送プロトコルをサポートします。

以下の一覧で、Red Hat OpenStack Platform がサポートするバックアップフォーマットおよびプロトコルを示しています。

ブート可能なメディア形式
  • ISO
ファイルトランスポートプロトコル
  • SFTP
  • NFS

3.2. バックアップノードへの NFS サーバーのインストールと構成

バックアップファイルを保存するために、新しい NFS サーバーをインストールして構成できます。バックアップノードに NFS サーバーをインストールして設定するには、インベントリーファイルを作成してSSH キーを設定して、NFS サーバーオプションを指定して openstack undercloud backup コマンドを実行します。

重要
  • NFS サーバーまたは SFTP サーバーをインストールして設定している場合は、この手順を実行する必要はありません。バックアップするノードに ReaR を設定するときに、サーバー情報を入力します。
  • デフォルトでは、Relax and Recover (ReaR) 設定は、NFS サーバーの IP アドレスが 192.168.24.1 であることを前提としています。NFS サーバーの IP アドレスが異なる場合は、設定 ReaR コマンドにパラメーター tripleo_backup_and_restore_nfs_server を追加します。

手順

  1. アンダークラウドノードにおいて、source コマンドでアンダークラウドの認証情報を読み込みます。

    [stack@undercloud-0 ~]$ source stackrc
    (undercloud) [stack@undercloud ~]$
  2. アンダークラウドノードで、バックアップノードのインベントリーファイルを作成します。ここで、<ip_address> および <user> を実際の環境の該当する値に置き換えます。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF'> ~/nfs-inventory.yaml
    [BackupNode]
    <backup_node> ansible_host=<ip_address> ansible_user=<user>
    EOF
  3. アンダークラウドノードで、以下の Ansible Playbook を作成します。ここで、<backup_node> をバックアップノードのホスト名に置き換えます。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_nfs_setup.yaml
    # Playbook
    # Substitute <backup_node> with the host name of your backup node.
    - become: true
      hosts: <backup_node>
      name: Setup NFS server for ReaR
      roles:
      - role: backup-and-restore
    EOF
  4. 公開 SSH 鍵をアンダークラウドノードからバックアップノードにコピーします。

    (undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>

    <backup_node> をバックアップノードのパスおよび名前に置き換えます。

  5. アンダークラウドノードで以下の ansible-playbook コマンドを入力し、バックアップノードを設定します。

    (undercloud) [stack@undercloud ~]$ ansible-playbook \
        -v -i ~/nfs-inventory.yaml \
        --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
        --become \
        --become-user root \
        --tags bar_setup_nfs_server \
        ~/bar_nfs_setup.yaml

3.3. コントロールプレーンノードへの ReaR のインストール

コントロールプレーンノードのバックアップを作成する前に、各コントロールプレーンノードに Relax and Recover (ReaR) をインストールして設定します。

前提条件

手順

  1. アンダークラウドノードで、以下の Ansible Playbook を作成します。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_setup-controller.yaml
    # Playbook
    # Install and configuring ReaR on the control plane nodes
    - become: true
      hosts: Controller
      name: Install ReaR
      roles:
      - role: backup-and-restore
    EOF
    注記

    設定可能なロールを持つコントロールプレーンノードをデプロイした場合は、ホストタイプの Controller をコントロールプレーン内のノードのタイプに置き換えます。たとえば、データベース、メッセージング、およびネットワーキングを別々のノードにデプロイした場合は、ControllerOpenstack,Database,Messaging,Networker と入力します。

  2. 以下のいずれかのオプションを選択します。

    1. NFS を使用し、NFS サーバーの IP アドレスがデフォルト値の 192.168.24.1 の場合は、アンダークラウドノードで以下の Ansible コマンドを入力し、コントロールプレーンノードに ReaR をインストールします。

      (undercloud) [stack@undercloud ~]$ ansible-playbook \
          -v -i ~/tripleo-inventory.yaml \
          --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
          --become \
          --become-user root \
          --tags bar_setup_rear \
          ~/bar_rear_setup-controller.yaml
    2. SFTP を使用し、NFS サーバーの IP アドレスがデフォルト値の 192.168.24.1 以外の場合は、以下の Ansible コマンドを入力し、コントロールプレーンノードに ReaR をインストールします。

      (undercloud) [stack@undercloud ~]$ ansible-playbook \
          -v -i ~/tripleo-inventory.yaml \
          --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
          --become \
          --become-user root \
          -e tripleo_backup_and_restore_nfs_server=<nfs_ip> \
          --tags bar_setup_rear \
          ~/bar_rear_setup-controller.yaml

      <nfs_ip> を NFS サーバーの IP アドレスに置き換えます。

    3. SFTP を使用する場合は、次の Ansible コマンドを入力してコントロールプレーンノードに ReaR をインストールします。

      (undercloud) [stack@undercloud ~]$ ansible-playbook \
          -v -i ~/tripleo-inventory.yaml \
          --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
          --become \
          --become-user root \
          -e tripleo_backup_and_restore_output_url=sftp://<user>:<password>@<backup_node_ip>/ \
          -e tripleo_backup_and_restore_backup_url=iso:///backup/ \
          --tags bar_setup_rear \
          ~/bar_rear_setup-undercloud.yaml
  3. システムで UEFI ブートローダーを使用している場合は、コントロールプレーンノードで以下の手順を実施します。

    1. 以下のツールをインストールします。

      $ sudo dnf install dosfstools efibootmgr
    2. USING_UEFI_BOOTLOADER パラメーターの値 0 を値 1 に置き換えて、/etc/rear/local.conf にある ReaR 設定ファイルで UEFI バックアップを有効にします。

3.4. バックアップ用の Open vSwitch (OVS)インターフェースの設定

お使いの環境で Open vSwitch (OVS)ブリッジを使用する場合は、アンダークラウドまたはコントロールプレーンノードをバックアップする前に OVS インターフェースを手動で設定する必要があります。復元プロセスでは、この情報を使用してネットワークインターフェースを復元します。

手順

  • /etc/rear/local.conf ファイルに、以下の形式で NETWORKING_PREPARATION_COMMANDS パラメーターを追加します。

    NETWORKING_PREPARATION_COMMANDS=('<command_1>' '<command_2>' ...')

    <command_1> および <command_2> を、ネットワークインターフェース名または IP アドレスを設定するコマンドに置き換えます。たとえば、ip link add br-ctlplane type bridge コマンドを追加してコントロールプレーンのブリッジ名を設定するか、ip link set eth0 up コマンドを追加してインターフェースの名前を設定できます。ネットワーク設定に基づいて、パラメーターにさらにコマンドを追加します。

3.5. コンポーザブルロールを使用するコントロールプレーンノードのバックアップの作成

コンポーザブルロールを使用するコントロールプレーンノードのバックアップを作成するには、backup-and-restore Ansible ロールを使用します。その後、ノードが破損したりアクセスできなくなったりした場合に備えて、バックアップを使用して、コントロールプレーンノードを以前の状態に復元できます。コントロールプレーンのバックアップには、コントロールプレーンノードで実行されるデータベースのバックアップが含まれます。

前提条件

手順

  1. 各コントローラーノードで、各ノードの config-drive パーティションをバックアップします。

    [heat-admin@controller-x ~]$ mkdir /mnt/config-drive
    [heat-admin@controller-x ~]$ dd if=<config_drive_partition> of=/mnt/config-drive
    注記

    この手順は、コントローラーノードでのみ実行する必要があります。

  2. アンダークラウドノードで、以下の Ansible Playbook を作成します。

    (undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_create_restore_images-controller.yaml
    # Playbook
    # Using ReaR on the Contorl-Plane - Composable Roles
    
    - become: true
      hosts: ControllerOpenstack,Database,Messaging,Networker
      name: Stop service management
      tasks:
        - include_role:
            name: backup-and-restore
            tasks_from: ../backup/tasks/service_manager_pause
          when:
           - tripleo_backup_and_restore_service_manager
    
    - become: true
      hosts: Database
      name: Database Backup
      tasks:
        - include_role:
            name: backup-and-restore
            tasks_from: ../backup/tasks/db_backup
    
    - become: true
      hosts: pacemaker
      name: Backup pacemaker configuration
      tasks:
        - include_role:
            name: backup-and-restore
            tasks_from: pacemaker_backup
    
    - become: true
      hosts: ControllerOpenstack,Database,Messaging,Networker
      name: Create recovery images with ReaR
      tasks:
        - include_role:
            name: backup-and-restore
            tasks_from: ../backup/tasks/main
    
    - become: true
      hosts: pacemaker
      name: Enabled pacemaker
      tasks:
        - name: Enable pacemaker
          command: pcs cluster start --all
          when: enabled_galera
          run_once: true
          tags:
           - bar_create_recover_image
    
    - become: true
      hosts: Database
      name: Restart galera
      tasks:
        - name: unPause database container
          command: "{{ tripleo_container_cli }} unpause {{ tripleo_backup_and_restore_mysql_container }}"
          when:
           - tripleo_container_cli is defined
            - not enabled_galera
            - tripleo_backup_and_restore_mysql_container is defined
          tags:
           - bar_create_recover_image
    
    - become: true
      hosts: ControllerOpenstack,Database,Messaging,Networker
      name: Unpause everything
      tasks:
        - name: Gather Container Service Name
          shell: |
           set -o pipefail
            /usr/bin/{{ tripleo_container_cli }} ps -a --filter='status=paused' --format '{{ '{{' }}.Names {{ '}}' }} '
          register: container_services
          changed_when: container_services.stdout is defined
          tags:
           - bar_create_recover_image
    
        - name: Unpause containers for database backup.
          command: "{{ tripleo_container_cli }} unpause {{ item }}"
          with_items: "{{ container_services.stdout_lines }}"
          when: tripleo_container_cli is defined
          tags:
           - bar_create_recover_image
  3. アンダークラウドノードで以下の ansible-playbook コマンドを入力し、コントロールプレーンノードのバックアップを作成します。

    重要

    スタックは操作しないでください。Pacemaker クラスターおよびコンテナーを停止すると、コンピュートノードへのコントロールプレーンサービスが一時的に中断します。また、ネットワーク接続、Ceph、および NFS または SFTP データプレーンサービスにも中断が発生します。この手順の最終ステップに従い、Pacemaker クラスターおよびコンテナーがサービスに戻るまで、インスタンスの作成、インスタンスの移行、要求の認証、クラスターの健全性の監視はできません。

    (undercloud) [stack@undercloud ~]$ ansible-playbook \
        -v -i ~/tripleo-inventory.yaml \
        --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \
        --become \
        --become-user root \
        --tags bar_create_recover_image \
        ~/bar_rear_create_restore_images-controller.yaml

3.6. cron を使用したコントロールプレーンノードバックアップのスケジューリング

重要

この機能は、本リリースでは テクノロジープレビュー として提供しているため、Red Hat では全面的にはサポートしていません。これは、テスト用途にのみご利用いただく機能で、実稼働環境にデプロイすべきではありません。テクノロジープレビュー機能についての詳しい情報は、「対象範囲の詳細」を参照してください。

cron ジョブを設定し、Ansible backup-and-restore ロールを使用して ReaR でコントロールプレーンノードのバックアップを作成することができます。/var/log/rear-cron ディレクトリーでログを確認することができます。

前提条件

手順

  1. アンダークラウドノードで、以下のコマンドを入力してバックアップ用のスクリプトを作成します。

    [stack@undercloud ~]$ cat <<'EOF' > /home/stack/execute-rear-cron.sh
    
    #!/bin/bash
    
    OWNER="stack"
    TODAY=`date +%Y%m%d`
    FILE="/var/log/rear-cron.${TODAY}"
    sudo touch ${FILE}
    sudo chown ${OWNER}:${OWNER} ${FILE}
    
    CURRENTTIME=`date`
    echo "[$CURRENTTIME] rear start" >> ${FILE}
    source /home/stack/stackrc && /usr/bin/openstack overcloud backup 2>&1 >> ${FILE}
    CURRENTTIME=`date`
    echo "[$CURRENTTIME] rear end" >> ${FILE}
    EOF
  2. /home/stack/execute-rear-cron.sh スクリプトに実行可能な権限を設定します。

    [stack@undercloud ~]$ chmod 755 /home/stack/execute-rear-cron.sh
  3. crontab -e コマンドで crontab ファイルを編集し、任意のエディターで以下の cron ジョブを追加します。ファイルに加えた変更を保存するようにしてください。

    [stack@undercloud ~]# $ crontab -e
    #adding the following line
    0 0 * * * /home/stack/execute-rear-cron.sh

    /home/stack/execute-rear-cron.sh スクリプトは、stack ユーザーにより午前 0 時に実行されるようにスケジュールされます。

  4. cron ジョブがスケジュールされていることを確認するには、以下のコマンドを入力します。

    [stack@undercloud ~]$ crontab -l

    コマンド出力には、スケジュールされている cron ジョブが表示されます。

    0 0 * * * /home/stack/execute-rear-cron.sh

3.7. 関連情報

第4章 アンダークラウドおよびコントロールプレーンノードの復元

アンダークラウドまたはコントロールプレーンノードが破損している場合、もしくは更新またはアップグレード中にエラーが発生した場合は、コントロールプレーンノードをバックアップから以前の状態に復元することができます。復元プロセスが Galera クラスターまたは共存する Ceph モニターを持つノードを自動的に復元できない場合は、これらのコンポーネントを手動で復元できます。

4.1. 復元プロセスのために、同じ場所に配置された Ceph モニターを備えたコントロールプレーンを準備

同じ場所に配置された Ceph モニターを使用してコントロールプレーンを復元する前に、Ceph モニターのバックアップファイルをノードファイルシステムにマウントするスクリプトと、ReaR がバックアップファイルを見つけるために使用する別のスクリプトを作成して、環境を準備します。

重要

/var/lib/ceph ディレクトリーのバックアップが作成できない場合は、Red Hat 技術サポートチームにお問い合わせいただき、ceph-mon インデックスを再ビルドする必要があります。詳細は、Red Hat Technical Support Team を参照してください。

前提条件

手順

  1. 復元する各ノードで、スクリプト /usr/share/rear/setup/default/011_backup_ceph.sh を作成し、次のコンテンツを追加します。

    mount -t <file_type> <device_disk> /mnt/local
    cd /mnt/local
    [ -d "var/lib/ceph" ] && tar cvfz /tmp/ceph.tar.gz var/lib/ceph --xattrs --xattrs-include='.' --acls
    cd /
    umount <device_disk>

    <file_type> および <device_disk> は、バックアップファイルの種類と場所に置き換えてください。通常、ファイルタイプは xfs で、場所は /dev/vda2 です。

  2. 同じノードで、スクリプト /usr/share/rear/wrapup/default/501_restore_ceph.sh を作成し、以下の出力を追加します。

    if [ -f "/tmp/ceph.tar.gz" ]; then
      rm -rf /mnt/local/var/lib/ceph/*
      tar xvC /mnt/local -f /tmp/ceph.tar.gz var/lib/ceph --xattrs --xattrs-include='.'
    fi

4.2. アンダークラウドノードの復元

ReaR を使用して作成したバックアップの ISO イメージを使用して、アンダークラウドノードを以前の状態に復元することができます。バックアップの ISO イメージは、バックアップノードにあります。ブート可能な ISO イメージを DVD に書き込むか、Integrated Lights-Out (iLO) リモートアクセスを通じてアンダークラウドノードにダウンロードします。

前提条件

手順

  1. アンダークラウドノードの電源をオフにします。次のステップに進む前に、アンダークラウドノードの電源が完全にオフになっていることを確認します。
  2. バックアップの ISO イメージでアンダークラウドノードをブートします。
  3. Relax-and-Recover ブートメニューが表示されたら、Recover <undercloud_node> を選択します。<undercloud_node> をアンダークラウドノードの名前に置き換えます。

    注記

    システムで UEFI を使用している場合は、Relax-and-Recover (no Secure Boot) オプションを選択します。

  4. root ユーザーとしてログインし、ノードを復元します。

    以下のメッセージが表示されます。

    Welcome to Relax-and-Recover. Run "rear recover" to restore your system!
    RESCUE <undercloud_node>:~ # rear recover

    アンダークラウドノードの復元プロセスが完了すると、コンソールに以下のメッセージが表示されます。

    Finished recovering your system
    Exiting rear recover
    Running exit tasks
  5. ノードの電源を切ります。

    RESCUE <undercloud_node>:~ #  poweroff

    ノードをブートすると、以前の状態で再開されます。

4.3. コントロールプレーンノードの復元

更新またはアップグレード中にエラーが発生した場合には、ReaR を使用して作成したバックアップの ISO イメージを使用して、コントロールプレーンノードを以前の状態に復元することができます。コントロールプレーンを復元する場合は、状態の整合性を確保するために、すべてのコントロールプレーンノードを復元する必要があります。

バックアップの ISO イメージは、バックアップノードにあります。ブート可能な ISO イメージを DVD に書き込むか、Integrated Lights-Out (iLO) リモートアクセスを通じてアンダークラウドノードにダウンロードします。

注記

Red Hat は、Open vSwitch (OVS) およびデフォルトの Open Virtual Network (OVN) などのネイティブ SDN を使用する Red Hat OpenStack Platform のバックアップをサポートします。サードパーティーの SDN についての詳細は、サードパーティーの SDN ドキュメントを参照してください。

前提条件

手順

  1. 各コントロールプレーンノードの電源をオフにします。次のステップに進む前に、コントロールプレーンノードの電源が完全にオフになっていることを確認します。
  2. 対応するバックアップの ISO イメージで各コントロールプレーンノードをブートします。
  3. Relax-and-Recover ブートメニューが表示されたら、各コントロールプレーンノードで Recover <control_plane_node> を選択します。<control_plane_node> を対応するコントロールプレーンノードの名前に置き換えます。

    注記

    システムで UEFI を使用している場合は、Relax-and-Recover (no Secure Boot) オプションを選択します。

  4. それぞれのコントロールプレーンノードで、root ユーザーとしてログインしてノードを復元します。

    以下のメッセージが表示されます。

    Welcome to Relax-and-Recover. Run "rear recover" to restore your system!
    RESCUE <control_plane_node>:~ # rear recover

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

    Finished recovering your system
    Exiting rear recover
    Running exit tasks
  5. コマンドラインコンソールが利用可能な場合は、各コントロールプレーンノードの config-drive パーティションを復元します。

    # once completed, restore the config-drive partition (which is ISO9660)
    RESCUE <control_plane_node>:~ $ dd if=/mnt/local/mnt/config-drive of=<config_drive_partition>
    注記

    コンポーザブルロールを持つコントロールプレーンをデプロイした場合は、コントローラーノードでのみこの手順を実行してください。

  6. ノードの電源を切ります。

    RESCUE <control_plane_node>:~ #  poweroff
  7. ブートシーケンスを通常のブートデバイスに設定します。ノードをブートすると、以前の状態で再開されます。
  8. サービスが正常に実行されていることを確認するには、pacemaker のステータスを確認します。root ユーザーとしてコントローラーノードにログインし、以下のコマンドを入力します。

    # pcs status
  9. オーバークラウドのステータスを確認するには、OpenStack Integration Test Suite (tempest)を使用します。詳細は、Validating your OpenStack cloud with the Integration Test Suite (tempest)を参照してください。

トラブルシューティング

  • pcs status で表示されるリソースアラームを以下のコマンドで解除します。
 # pcs resource clean
  • pcs status で表示される STONITH フェンシングの動作エラーを以下のコマンドで解除します。
# pcs resource clean
# pcs stonith history cleanup

4.4. Galera クラスターの手動による復元

復元手順の一部として Galera クラスターが復元されない場合は、Galera を手動で復元する必要があります。

注記

以下の手順では、1 つのコントローラーノードでいくつかのステップを実施する必要があります。手順の実施と同じコントローラーノードで、これらのステップを実施するようにしてください。

手順

  1. Controller-0 で、Galera クラスターの仮想 IP を取得します。

    $ sudo hiera -c /etc/puppet/hiera.yaml mysql_vip
  2. すべてのコントローラーノードで、仮想 IP を通じたデータベース接続を無効にします。

    $ sudo iptables -I INPUT  -p tcp --destination-port 3306 -d $MYSQL_VIP  -j DROP
  3. Controller-0 で MySQL の root パスワードを取得します。

    $ sudo hiera -c /etc/puppet/hiera.yaml mysql::server::root_password
  4. Controller-0 で、Galera リソースを unmanaged モードに設定します。

    $ sudo pcs resource unmanage galera-bundle
  5. すべてのコントローラーノードで、MySQL コンテナーを停止します。

    $ sudo podman container stop $(sudo podman container ls --all --format "{{.Names}}" --filter=name=galera-bundle)
  6. すべてのコントローラーノードで、現在のディレクトリーを移動します。

    $ sudo mv /var/lib/mysql /var/lib/mysql-save
  7. すべてのコントローラーノードで、新規ディレクトリー /var/lib/mysq を作成します。

    $ sudo mkdir /var/lib/mysql
    $ sudo chown 42434:42434 /var/lib/mysql
    $ sudo chcon -t container_file_t /var/lib/mysql
    $ sudo chmod 0755 /var/lib/mysql
    $ sudo chcon -r object_r /var/lib/mysql
    $ sudo chcon -u system_u /var/lib/mysql
  8. すべてのコントローラーノードで、MySQL コンテナーを起動します。

    $ sudo podman container start $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)
  9. すべてのコントローラーノードで、MySQL データベースを作成します。

    $ sudo podman exec -i $(sudo podman container ls --all --format "{{ .Names }}" \
          --filter=name=galera-bundle) bash -c "mysql_install_db --datadir=/var/lib/mysql --user=mysql --log_error=/var/log/mysql/mysql_init.log"
  10. すべてのコントローラーノードで、データベースを起動します。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
          --filter=name=galera-bundle) bash -c "mysqld_safe --skip-networking --wsrep-on=OFF --log-error=/var/log/mysql/mysql_safe.log" &
  11. すべてのコントローラーノードで、.my.cnf Galera 設定ファイルを移動します。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
          --filter=name=galera-bundle) bash -c "mv /root/.my.cnf /root/.my.cnf.bck"
  12. すべてのコントローラーノードで、Galera root パスワードをリセットします。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"  \
          --filter=name=galera-bundle) bash -c "mysql -uroot -e'use mysql;update user set password=PASSWORD(\"$ROOTPASSWORD\")where User=\"root\";flush privileges;'"
  13. すべてのコントローラーノード上の Galera コンテナー内で、.my.cnf Galera 設定ファイルを復元します。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"   \
          --filter=name=galera-bundle) bash -c "mv /root/.my.cnf.bck /root/.my.cnf"
  14. Controller-0 で、バックアップデータベースファイルを /var/lib/MySQL にコピーします。

    $ sudo cp $BACKUP_FILE /var/lib/mysql
    $ sudo cp $BACKUP_GRANT_FILE /var/lib/mysql
    注記

    これらのファイルへのパスは /home/heat-admin/ です。

  15. Controller-0 で、MySQL データベースを復元します。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"    \
    --filter=name=galera-bundle) bash -c "mysql -u root -p$ROOT_PASSWORD < \"/var/lib/mysql/$BACKUP_FILE\"  "
    
    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"    \
    --filter=name=galera-bundle) bash -c "mysql -u root -p$ROOT_PASSWORD < \"/var/lib/mysql/$BACKUP_GRANT_FILE\"  "
  16. すべてのコントローラーノードで、データベースをシャットダウンします。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"    \
          --filter=name=galera-bundle) bash -c "mysqladmin shutdown"
  17. Controller-0 で、ブートストラップノードを起動します。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"  --filter=name=galera-bundle) \
            /usr/bin/mysqld_safe --pid-file=/var/run/mysql/mysqld.pid --socket=/var/lib/mysql/mysql.sock --datadir=/var/lib/mysql \
            --log-error=/var/log/mysql/mysql_cluster.log  --user=mysql --open-files-limit=16384 \
            --wsrep-cluster-address=gcomm:// &
  18. 検証: Controller-0 で、クラスターのステータスを確認します。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
             --filter=name=galera-bundle) bash -c "clustercheck"

    「Galera cluster node is synced」のメッセージが表示されるのを確認してください。表示されない場合は、ノードを再作成する必要があります。

  19. Controller-0 で、設定からクラスターアドレスを取得します。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
    --filter=name=galera-bundle) bash -c "grep wsrep_cluster_address /etc/my.cnf.d/galera.cnf" | awk '{print $3}'
  20. 残りの各コントローラーノードでデータベースを起動し、クラスターを検証します。

    1. データベースを起動します。

      $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
            --filter=name=galera-bundle) /usr/bin/mysqld_safe --pid-file=/var/run/mysql/mysqld.pid --socket=/var/lib/mysql/mysql.sock \
            --datadir=/var/lib/mysql --log-error=/var/log/mysql/mysql_cluster.log  --user=mysql --open-files-limit=16384 \
            --wsrep-cluster-address=$CLUSTER_ADDRESS &
    2. MYSQL クラスターのステータスを確認します。

      $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
               --filter=name=galera-bundle) bash -c "clustercheck"

      「Galera cluster node is synced」のメッセージが表示されるのを確認してください。表示されない場合は、ノードを再作成する必要があります。

  21. すべてのコントローラーノードで MySQL コンテナーを停止します。

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle) \
            /usr/bin/mysqladmin -u root shutdown
  22. すべてのコントローラーノードで以下のファイアウォールルールを削除して、仮想 IP アドレス経由のデータベース接続を許可します。

    $ sudo iptables -D  INPUT  -p tcp --destination-port 3306 -d $MYSQL_VIP  -j DROP
  23. すべてのコントローラーノードで MySQL コンテナーを再起動します。

    $ sudo podman container restart $(sudo podman container ls --all --format  "{{ .Names }}" --filter=name=galera-bundle)
  24. すべてのコントローラーノードで clustercheck コンテナーを再起動します。

    $ sudo podman container restart $(sudo podman container ls --all --format  "{{ .Names }}" --filter=name=clustercheck)
  25. Controller-0 で、Galera リソースを managed モードに設定します。

    $ sudo pcs resource manage galera-bundle

検証

  1. サービスが正常に実行されていることを確認するには、pacemaker のステータスを確認します。

    $ sudo pcs status
  2. オーバークラウドのステータスを確認するには、OpenStack Integration Test Suite (tempest)を使用します。詳細は、Validating your OpenStack cloud with the Integration Test Suite (tempest)を参照してください。
  3. 特定のノードで問題が疑われる場合は、clustercheck でクラスターの状態を確認します。

    $ sudo podman exec clustercheck /usr/bin/clustercheck

4.5. アンダークラウドのノードデータベースを手動で復元する

アンダークラウドのデータベースがアンダークラウドの復元プロセスの一部として復元されない場合は、データベースを手動で復元することができます。データベースを復元できるのは、以前にスタンドアロンのデータベースバックアップを作成した場合のみです。

前提条件

手順

  1. director アンダークラウドノードに root ユーザーとしてログインします。
  2. すべての tripleo サービスを停止します。

    [root@director ~]# systemctl  stop  tripleo_*
  3. 次のコマンドを入力して、サーバーでコンテナーが実行していないことを確認します。

    [root@director ~]# podman ps

    実行中のコンテナーがある場合は、次のコマンドを入力してコンテナーを停止します。

    [root@director ~]# podman stop <container_name>
  4. 現在の /var/lib/mysql ディレクトリーのバックアップを作成してから、そのディレクトリーを削除します。

    [root@director ~]# cp -a /var/lib/mysql /var/lib/mysql_bck
    [root@director ~]# rm -rf /var/lib/mysql
  5. データベースディレクトリーを再作成し、新しいディレクトリーに SELinux の属性を設定します。

    [root@director ~]# mkdir /var/lib/mysql
    [root@director ~]# chown 42434:42434 /var/lib/mysql
    [root@director ~]# chmod 0755 /var/lib/mysql
    [root@director ~]# chcon -t container_file_t /var/lib/mysql
    [root@director ~]# chcon -r object_r /var/lib/mysql
    [root@director ~]# chcon -u system_u /var/lib/mysql
  6. mariadb イメージのローカルタグを作成します。<image_id> および <undercloud.ctlplane.example.com> を、ご自身の環境に該当する値に置き換えます。

    [root@director ~]# podman images | grep mariadb
    <undercloud.ctlplane.example.com>:8787/rh-osbs/rhosp16-openstack-mariadb                 	16.2_20210322.1   <image_id>   3 weeks ago   718 MB
    [root@director ~]# podman tag <image_id> mariadb
    [root@director ~]# podman images | grep maria
    localhost/mariadb                                                                         	latest        	<image_id>   3 weeks ago   718 MB
    <undercloud.ctlplane.example.com>:8787/rh-osbs/rhosp16-openstack-mariadb                 	16.2_20210322.1   <image_id>   3 weeks ago   718 MB
  7. /var/lib/mysql ディレクトリーをコンテナーで初期化します。

    [root@director ~]# podman run --net=host -v /var/lib/mysql:/var/lib/mysql localhost/mariadb mysql_install_db --datadir=/var/lib/mysql --user=mysql
  8. データベースにインポートするデータベースのバックアップファイルをコピーします。

    [root@director ~]# cp /root/undercloud-all-databases.sql /var/lib/mysql
  9. データベースサービスを開始して、データをインポートします。

    [root@director ~]# podman run --net=host -dt -v /var/lib/mysql:/var/lib/mysql  localhost/mariadb  /usr/libexec/mysqld
  10. データを読み込み、max_allowed_packet パラメーターを設定します。

    1. コンテナーにログインし、設定を行います。

      [root@director ~]# podman exec -it <container_id> /bin/bash
          ()[mysql@5a4e429c6f40 /]$ mysql -u root -e "set global max_allowed_packet = 1073741824;"
          ()[mysql@5a4e429c6f40 /]$ mysql -u root < /var/lib/mysql/undercloud-all-databases.sql
          ()[mysql@5a4e429c6f40 /]$ mysql -u root -e 'flush privileges'
          ()[mysql@5a4e429c6f40 /]$ exit
          exit
    2. コンテナーを停止します。

      [root@director ~]# podman stop <container_id>
    3. コンテナーが動いていないことを確認します。

      [root@director ~]# podman ps
      CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
      [root@director ~]#
  11. すべての tripleo サービスを再起動します。

    [root@director ~]# systemctl start multi-user.target