Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

第4章 Red Hat Ceph Storage Cluster のアップグレード

このセクションでは、Red Hat Ceph Storage の新しいメジャーバージョンまたはマイナーバージョンにアップグレードする方法について説明します。

管理ノードの /usr/share/ceph-ansible/infrastructure-playbooks/ ディレクトリーにある Ansiblerolling_update.yml Playbook を使用して、Red Hat Ceph Storage の 2 つのメジャーバージョンまたはマイナーバージョン間でアップグレードするか、非同期更新を適用します。

Ansible は Ceph ノードを以下の順序でアップグレードします。

  • ノードの監視
  • MGR ノード
  • OSD ノード
  • MDS ノード
  • Ceph Object Gateway ノード
  • その他すべての Ceph クライアントノード
注記

Red Hat Ceph Storage 3 では、/usr/share/ceph-ansible/group_vars/ ディレクトリーにある Ansible 設定ファイルにいくつかの変更が導入されており、特定のパラメーターの名前が変更されたり削除されたりしています。したがって、バージョン 3 にアップグレードした後、all.yml.sample ファイルと osds.yml.sample ファイルから新しいコピーを作成する前に、all.yml ファイルと osds.yml ファイルのバックアップコピーを作成してください。変更点の詳細は、付録H バージョン 2 と 3 の間の Ansible 変数の変更 をご覧ください。

注記

Red Hat Ceph Storage 3.1 以降では、Object Gateway および高速 NVMe ベースの SSD (および SATA SSD) を使用する場合のパフォーマンスのためにストレージを最適化するために、新しい Ansible プレイブックが導入されています。Playbook は、ジャーナルとバケットインデックスを SSD に一緒に配置することでこれを行います。これにより、すべてのジャーナルを 1 つのデバイスに配置する場合に比べてパフォーマンスを向上させることができます。これらの Playbook は、Ceph のインストール時に使用されます。既存の OSD は動作し続け、アップグレード中に追加のステップは必要ありません。このようにストレージを最適化するために OSD を同時に再設定する際に、Ceph クラスターをアップグレードする方法はありません。ジャーナルまたはバケットインデックスに異なるデバイスを使用するには、OSD を再プロビジョニングする必要があります。詳細は、Ceph Object Gateway for Production での LVM での NVMe の最適な使用を参照してください。

重要

Playbook rolling_update.yml には、同時に更新するノード数を調整する シリアル 変数が含まれます。Red Hat では、デフォルト値 (1) を使用することを強く推奨します。これにより、Ansible がクラスターノードを 1 つずつアップグレードします。

重要

いずれかの時点でアップグレードが失敗した場合は、ceph status コマンドでクラスターの状態を確認して、アップグレードの失敗理由を把握します。不具合の原因や解決方法がわからない場合は、Red Hat サポート にお問い合わせください。

重要

rolling_update.yml Playbook を使用して Red Hat Ceph Storage 3.x バージョンにアップグレードする場合、Ceph ファイルシステム (Ceph FS)を使用するユーザーは、Metadata Server (MDS) クラ スターを手動で更新する必要があります。これは、既知の問題によるものです。

ceph-ansible rolling-upgrade.yml を使用してクラスター全体をアップグレードする前に /etc/ansible/hosts の MDS ホストをコメントアウトしてから、MDS を手動でアップグレードします。etc/ansible/hosts ファイルでは

 #[mdss]
 #host-abc

MDS クラスターの更新方法など、この既知の問題の詳細については、Red Hat Ceph Storage 3.0 リリースノート を参照してください。

重要

Red Hat Ceph Storage クラスターを以前のバージョンからバージョン 3.2 にアップグレードする場合、Ceph Ansible 設定ではデフォルトのオブジェクトストアタイプが BlueStore に設定されます。OSD オブジェクトストアに FileStore を使用する場合は、Ceph Ansible 設定を明示的に FileStore に設定します。これにより、新たにデプロイされ、置き換えられた OSD は FileStore を使用します。

重要

Playbook rolling_update.yml を使用して Red Hat Ceph Storage 3.x バージョンにアップグレードし、マルチサイト Ceph Object Gateway 設定を使用している場合には、マルチサイト設定を指定するために all.yml ファイルを手動で更新する必要はありません。

前提条件

  • ストレージクラスター内のすべてのノードで root ユーザーとしてログインします。
  • ストレージクラスターのすべてのノードで、rhel-7-server-extras-rpms リポジトリーを有効にします。

    # subscription-manager repos --enable=rhel-7-server-extras-rpms
  • Ceph ノードが Red Hat コンテンツ配信ネットワーク (CDN) に接続されておらず、ISO イメージを使用して Red Hat Ceph Storage をインストールした場合は、ローカルリポジトリーを最新バージョンの Red Hat Ceph Storage で更新します。詳しくは 「Red Hat Ceph ストレージリポジトリーの有効化」 をご覧ください。
  • Red Hat Ceph Storage 2.x から 3.x にアップグレードする場合は、Ansible 管理ノードと RBD ミラーリングノードで、Red Hat Ceph Storage 3 Tools リポジトリーを有効にします。

    # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
  • Ansible 管理ノードで、Ansible リポジトリーを有効にします。

    [root@admin ~]# subscription-manager repos --enable=rhel-7-server-ansible-2.6-rpms
  • Ansible 管理ノードで、ansible パッケージおよび ceph-ansible パッケージの最新バージョンがインストールされていることを確認します。

    [root@admin ~]# yum update ansible ceph-ansible
  • rolling_update.yml Playbook で、health_osd_check_retrieshealth_osd_check_delay の値をそれぞれ 5030 に変更します。

    health_osd_check_retries: 50
    health_osd_check_delay: 30

    これらの値を設定すると、OSD ノードごとに Ansible は最大 25 分待機し、30 秒ごとにストレージクラスターの状態をチェックし、アップグレードプロセスを続行する前に待機します。

    注記

    ストレージクラスターで使用されているストレージ容量に基づいて、health_osd_check_retries オプションの値をスケールアップまたはダウンします。たとえば、436 TB 未満の 218 TB (ストレージ容量の 50%) を使用している場合は、health_osd_check_retries オプションを 50 に設定します。

  • アップグレードするクラスターに exclusive-lock 機能を使用する Ceph Block Device イメージが含まれている場合には、全 Ceph Block Device ユーザーにクライアントをブラックリストに登録するパーミッションがあるようにしてください。

    ceph auth caps client.<ID> mon 'allow r, allow command "osd blacklist"' osd '<existing-OSD-user-capabilities>'

4.1. ストレージクラスターのアップグレード

手順

Ansible の管理ノードから以下のコマンドを使用します。

  1. root ユーザーとして、/usr/share/ceph-ansible/ ディレクトリーにナビゲートします。

    [root@admin ~]# cd /usr/share/ceph-ansible/
  2. Red Hat Ceph Storage バージョン 3.x から最新バージョンにアップグレードする場合は、この手順をスキップします。group_vars/all.ymlgroup_vars/osds.yml ファイルをバックアップします。

    [root@admin ceph-ansible]# cp group_vars/all.yml group_vars/all_old.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml group_vars/osds_old.yml
    [root@admin ceph-ansible]# cp group_vars/clients.yml group_vars/clients_old.yml
  3. Red Hat Ceph Storage バージョン 3.x から最新バージョンにアップグレードする場合は、この手順をスキップします。Red Hat Ceph Storage 2.x から 3.x にアップグレードする場合は、group_vars/all.yml.samplegroup_vars/osds.yml.samplegroup_vars/clients.yml.sample ファイルの新しいコピーを作成して、それぞれ group_vars/all.ymlgroup_vars/osds.ymlgroup_vars/clients.yml に名前を変更します。それらを開いて編集します。詳しくは、付録H バージョン 2 と 3 の間の Ansible 変数の変更「Red Hat Ceph Storage クラスターのインストール」 をご覧ください。

    [root@admin ceph-ansible]# cp group_vars/all.yml.sample group_vars/all.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml.sample group_vars/osds.yml
    [root@admin ceph-ansible]# cp group_vars/clients.yml.sample group_vars/clients.yml
  4. Red Hat Ceph Storage バージョン 3.x から最新バージョンにアップグレードする場合は、この手順をスキップします。Red Hat Ceph Storage 2.x から 3.x にアップグレードする場合は、group_vars/clients.yml ファイルを開き、以下の行をアンコメントします。

    keys:
      - { name: client.test, caps: { mon: "allow r", osd: "allow class-read object_prefix rbd_children, allow rwx pool=test" },  mode: "{{ ceph_keyring_permissions }}" }
    1. client.test を実際のクライアント名に置き換え、クライアントキーをクライアント定義の行に追加します。以下に例を示します。

      key: "ADD-KEYRING-HERE=="

      これで、行全体の例は次のようになります。

      - { name: client.test, key: "AQAin8tUMICVFBAALRHNrV0Z4MXupRw4v9JQ6Q==", caps: { mon: "allow r", osd: "allow class-read object_prefix rbd_children, allow rwx pool=test" },  mode: "{{ ceph_keyring_permissions }}" }
      注記

      クライアントキーを取得するには、ceph auth get-or-create コマンドを実行して、指定されたクライアントのキーを表示します。

  5. group_vars/all.yml ファイルで、upgrade_ceph_packages オプションのコメントを外し、True に設定します。

    upgrade_ceph_packages: True
  6. group_vars/all.yml ファイルで、ceph_rhcs_version3 に設定します。

    ceph_rhcs_version: 3
    注記

    ceph_rhcs_version オプションを 3 に設定すると、最新バージョンの Red Hat Ceph Storage 3 がプルされます。

  7. group_vars/all.yml ファイルで、ceph_origin パラメーターを distro に設定します。

    ceph_origin: distro
  8. group_vars/all.yml ファイルに fetch_directory パラメーターを追加してください。

    fetch_directory: <full_directory_path>

    以下を置き換えます。

    • <full_directory_path> を、書き込み可能な場所 (Ansible ユーザーのホームディレクトリーなど) に置き換えます。ストレージクラスターの初期インストール時に使用した既存のパスを入力してください。

    既存のパスが失われていたり、なくなっていたりする場合は、まず次のことを行ってください。

    1. 既存の group_vars/all.yml ファイルに以下のオプションを追加します。

      fsid: <add_the_fsid>
      generate_fsid: false
    2. take-over-existing-cluster.yml Ansible playbook を実行します。

      [user@admin ceph-ansible]$ cp infrastructure-playbooks/take-over-existing-cluster.yml .
      [user@admin ceph-ansible]$ ansible-playbook take-over-existing-cluster.yml
  9. アップグレードするクラスターに Ceph Object Gateway ノードが含まれている場合は、radosgw_interface パラメーターを group_vars/all.yml ファイルに追加します。

    radosgw_interface: <interface>

    以下を置き換えます。

    • Ceph Object Gateway がリッスンするインターフェースを使用する <interface>
  10. Red Hat Ceph Storage 3.2 から、デフォルトの OSD オブジェクトストアは BlueStore です。従来の OSD オブジェクトストアを維持するには、osd_objectstore オプションを group_vars/all.yml ファイルの filestore に明示的に設定する必要があります。

    osd_objectstore: filestore
    注記

    osd_objectstore オプションを filestore に設定し、OSD を置き換えると BlueStore ではなく FileStore が使用されます。

  11. /etc/ansible/hosts にある Ansible インベントリーファイルで、[mgrs] セクションの下に Ceph Manager (ceph-mgr) ノードを追加します。Ceph Manager デーモンを Monitor ノードにコロケーションします。バージョン 3.x から最新のバージョンにアップグレードする場合は、この手順をスキップします。

    [mgrs]
    <monitor-host-name>
    <monitor-host-name>
    <monitor-host-name>
  12. infrastructure-playbooks ディレクトリーから現在のディレクトリーに、rolling_update.yml をコピーします。

    [root@admin ceph-ansible]# cp infrastructure-playbooks/rolling_update.yml .
    重要

    Playbook rolling_update.yml では、limit の ansible オプションを使用しないでください。

  13. /var/log/ansible/ ディレクトリーを作成し、ansible ユーザーに適切な権限を割り当てます。

    [root@admin ceph-ansible]# mkdir /var/log/ansible
    [root@admin ceph-ansible]# chown ansible:ansible  /var/log/ansible
    [root@admin ceph-ansible]# chmod 755 /var/log/ansible
    1. 次のように log_path 値を更新して、/usr/share/ceph-ansible/ansible.cfg ファイルを編集します。

      log_path = /var/log/ansible/ansible.log
  14. Ansible ユーザーとして、Playbook を実行します。

    [user@admin ceph-ansible]$ ansible-playbook rolling_update.yml
  15. RBD ミラーリングデーモンノードに root ユーザーとしてログインしているときに、rbd-mirror を手動でアップグレードします。

    # yum upgrade rbd-mirror

    デーモンを再起動:

    # systemctl restart  ceph-rbd-mirror@<client-id>
  16. クラスターの状態に問題がないことを確認します。root ユーザーとしてモニターノードにログインし、cephstatus コマンドを実行します。
[root@monitor ~]# ceph -s
  1. OpenStack 環境で動作する場合には、すべての cephx ユーザーがプールに RBD プロファイルを使用するように更新します。以下のコマンドは root ユーザーとして実行する必要があります。

    • Glance ユーザー

      ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=<glance-pool-name>'

      [root@monitor ~]# ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=images'

    • Cinder ユーザー

      ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=<cinder-volume-pool-name>, profile rbd pool=<nova-pool-name>, profile rbd-read-only pool=<glance-pool-name>'

      [root@monitor ~]# ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'

    • OpenStack の一般ユーザー

      ceph auth caps client.openstack mon 'profile rbd' osd 'profile rbd-read-only pool=<cinder-volume-pool-name>, profile rbd pool=<nova-pool-name>, profile rbd-read-only pool=<glance-pool-name>'

      [root@monitor ~]# ceph auth caps client.openstack mon 'profile rbd' osd 'profile rbd-read-only pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'

      重要

      ライブクライアントの移行を実行する前に、これらの CAPS 更新を行います。これにより、クライアントがメモリーで実行している新しいライブラリーを使用でき、古い CAPS 設定がキャッシュから破棄され、新しい RBD プロファイル設定が適用されるようになります。