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 の新しいメジャーバージョンまたはマイナーバージョンにアップグレードする方法について説明します。
- ストレージクラスターをアップグレードするには、「ストレージクラスターのアップグレード」 を参照してください。
- Red Hat Ceph Storage Dashboard をアップグレードするには、「Red Hat Ceph Storage Dashboard のアップグレード」 を参照してください。
管理ノードの /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.ymlPlaybook で、health_osd_check_retriesとhealth_osd_check_delayの値をそれぞれ50と30に変更します。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 の管理ノードから以下のコマンドを使用します。
rootユーザーとして、/usr/share/ceph-ansible/ディレクトリーにナビゲートします。[root@admin ~]# cd /usr/share/ceph-ansible/
Red Hat Ceph Storage バージョン 3.x から最新バージョンにアップグレードする場合は、この手順をスキップします。
group_vars/all.ymlとgroup_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
Red Hat Ceph Storage バージョン 3.x から最新バージョンにアップグレードする場合は、この手順をスキップします。Red Hat Ceph Storage 2.x から 3.x にアップグレードする場合は、
group_vars/all.yml.sample、group_vars/osds.yml.sample、group_vars/clients.yml.sampleファイルの新しいコピーを作成して、それぞれgroup_vars/all.yml、group_vars/osds.yml、group_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
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 }}" }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コマンドを実行して、指定されたクライアントのキーを表示します。
group_vars/all.ymlファイルで、upgrade_ceph_packagesオプションのコメントを外し、Trueに設定します。upgrade_ceph_packages: True
group_vars/all.ymlファイルで、ceph_rhcs_versionを3に設定します。ceph_rhcs_version: 3
注記ceph_rhcs_versionオプションを3に設定すると、最新バージョンの Red Hat Ceph Storage 3 がプルされます。group_vars/all.ymlファイルで、ceph_originパラメーターをdistroに設定します。ceph_origin: distro
group_vars/all.ymlファイルにfetch_directoryパラメーターを追加してください。fetch_directory: <full_directory_path>
以下を置き換えます。
-
<full_directory_path>を、書き込み可能な場所 (Ansible ユーザーのホームディレクトリーなど) に置き換えます。ストレージクラスターの初期インストール時に使用した既存のパスを入力してください。
既存のパスが失われていたり、なくなっていたりする場合は、まず次のことを行ってください。
既存の
group_vars/all.ymlファイルに以下のオプションを追加します。fsid: <add_the_fsid> generate_fsid: false
take-over-existing-cluster.ymlAnsible playbook を実行します。[user@admin ceph-ansible]$ cp infrastructure-playbooks/take-over-existing-cluster.yml . [user@admin ceph-ansible]$ ansible-playbook take-over-existing-cluster.yml
-
アップグレードするクラスターに Ceph Object Gateway ノードが含まれている場合は、
radosgw_interfaceパラメーターをgroup_vars/all.ymlファイルに追加します。radosgw_interface: <interface>
以下を置き換えます。
-
Ceph Object Gateway がリッスンするインターフェースを使用する
<interface>
-
Ceph Object Gateway がリッスンするインターフェースを使用する
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 が使用されます。/etc/ansible/hostsにある Ansible インベントリーファイルで、[mgrs]セクションの下に Ceph Manager (ceph-mgr) ノードを追加します。Ceph Manager デーモンを Monitor ノードにコロケーションします。バージョン 3.x から最新のバージョンにアップグレードする場合は、この手順をスキップします。[mgrs] <monitor-host-name> <monitor-host-name> <monitor-host-name>
infrastructure-playbooksディレクトリーから現在のディレクトリーに、rolling_update.ymlをコピーします。[root@admin ceph-ansible]# cp infrastructure-playbooks/rolling_update.yml .
重要Playbook
rolling_update.ymlでは、limitの ansible オプションを使用しないでください。/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
次のように
log_path値を更新して、/usr/share/ceph-ansible/ansible.cfgファイルを編集します。log_path = /var/log/ansible/ansible.log
Ansible ユーザーとして、Playbook を実行します。
[user@admin ceph-ansible]$ ansible-playbook rolling_update.yml
RBD ミラーリングデーモンノードに
rootユーザーとしてログインしているときに、rbd-mirrorを手動でアップグレードします。# yum upgrade rbd-mirror
デーモンを再起動:
# systemctl restart ceph-rbd-mirror@<client-id>
-
クラスターの状態に問題がないことを確認します。
rootユーザーとしてモニターノードにログインし、cephstatus コマンドを実行します。
[root@monitor ~]# ceph -s
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 プロファイル設定が適用されるようになります。