4.7. Ceph Monitor ストアのリカバリー
Ceph Monitor は、クラスターマップを RocksDB などのキーバリューストアに保存します。Monitor 上でストアが破損した場合、Monitor は異常終了し、再起動できなくなります。Ceph ログには以下のエラーが含まれる場合があります。
Corruption: error in middle of record Corruption: 1 missing files; e.g.: /var/lib/ceph/mon/mon.0/store.db/1234567.ldb
Corruption: error in middle of record
Corruption: 1 missing files; e.g.: /var/lib/ceph/mon/mon.0/store.db/1234567.ldb
Red Hat Ceph Storage クラスターは少なくとも 3 つの Ceph Monitor を使用しており、1 つが故障しても別のものと交換できます。ただし、特定の状況では、すべての Ceph Monitor のストアが破損する可能性があります。たとえば、Ceph Monitor ノードのディスクやファイルシステムの設定が正しくない場合、停電によって基礎となるファイルシステムが破損する可能性があります。
すべての Ceph Monitor で破損がある場合には、ceph-monstore-tool
および ceph-objectstore-tool
と呼ばれるユーティリティーを使用して、OSD ノードに保管された情報で復元することができます。
これらの手順は、以下の情報を復元できません。
- Metadata Daemon Server (MDS) キーリングおよびマップ
配置グループの設定:
-
ceph pg set_full_ratio
コマンドを使用して設定するfull ratio
-
ceph pg set_nearfull_ratio
コマンドを使用して設定するほぼnearfull ratio
-
古いバックアップから Ceph Monitor ストアを復元しないでください。以下の手順に従って、現在のクラスター状態から Ceph Monitor ストアを再構築し、そこから復元します。
4.7.1. BlueStore の使用時の Ceph Monitor ストアのリカバリー リンクのコピーリンクがクリップボードにコピーされました!
Ceph Monitor ストアがすべての Ceph Monitor で破損し、BlueStore バックエンドを使用する場合には、以下の手順に従います。
コンテナー化環境でこの方法を使用する場合、Ceph リポジトリーをアタッチし、最初にコンテナー化されていない Ceph Monitor に復元する必要があります。
この手順では、データが失われる可能性があります。この手順で不明な点がある場合は、Red Hat テクニカルサポートに連絡して、リカバリープロセスの支援を受けてください。
前提条件
- すべての OSD コンテナーが停止します。
- ロールに基づいて Ceph ノードで Ceph リポジトリーを有効にします。
-
ceph-test
パッケージおよびrsync
パッケージが OSD および Monitor ノードにインストールされている。 -
ceph-mon
パッケージが Monitor ノードにインストールされている。 -
ceph-osd
パッケージが OSD ノードにインストールされている。
手順
Ceph データを含むすべてのディスクを一時的な場所にマウントします。すべての OSD ノードに対してこの手順を繰り返します。
ceph-volume
コマンドを使用してデータパーティションをリスト表示します。例:
[ceph: root@host01 /]# ceph-volume lvm list
[ceph: root@host01 /]# ceph-volume lvm list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow データパーティションを一時的な場所にマウントします。
構文
mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$i
mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$i
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux コンテキストを復元します。
構文
for i in {OSD_ID}; do restorecon /var/lib/ceph/osd/ceph-$i; done
for i in {OSD_ID}; do restorecon /var/lib/ceph/osd/ceph-$i; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD_ID を、OSD ノード上の Ceph OSD ID の数値のスペース区切りリストに置き換えます。
所有者とグループを
ceph:ceph
に変更します。構文
for i in {OSD_ID}; do chown -R ceph:ceph /var/lib/ceph/osd/ceph-$i; done
for i in {OSD_ID}; do chown -R ceph:ceph /var/lib/ceph/osd/ceph-$i; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD_ID を、OSD ノード上の Ceph OSD ID の数値のスペース区切りリストに置き換えます。
重要update-mon-db
コマンドが Monitor データベースに追加のdb
ディレクトリーおよびdb.slow
ディレクトリーを使用するバグにより、このディレクトリーもコピーする必要があります。これを行うには、以下を行います。コンテナー外部の一時的な場所を準備して、OSD データベースをマウントしてアクセスし、Ceph Monitor を復元するために必要な OSD マップをデプロイメントします。
構文
ceph-bluestore-tool --cluster=ceph prime-osd-dir --dev OSD-DATA --path /var/lib/ceph/osd/ceph-OSD-ID
ceph-bluestore-tool --cluster=ceph prime-osd-dir --dev OSD-DATA --path /var/lib/ceph/osd/ceph-OSD-ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD-DATA は OSD データへのボリュームグループ (VG) または論理ボリューム (LV) パスに、OSD-ID は OSD の ID に置き換えます。
BlueStore データベースと
block.db
との間のシンボリックリンクを作成します。構文
ln -snf BLUESTORE DATABASE /var/lib/ceph/osd/ceph-OSD-ID/block.db
ln -snf BLUESTORE DATABASE /var/lib/ceph/osd/ceph-OSD-ID/block.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow BLUESTORE-DATABASE を BlueStore データベースへのボリュームグループ (VG) または論理ボリューム (LV) パスに置き換え、OSD-ID を OSD の ID に置き換えます。
破損したストアのある Ceph Monitor ノードから次のコマンドを使用します。すべてのノードのすべての OSD に対してこれを繰り返します。
すべての OSD ノードからクラスターマップを収集します。
例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 適切なケーパビリティーを設定します。
例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow db
ディレクトリーおよびdb.slow
ディレクトリーから、すべてのsst
ファイルを一時的な場所に移動します。例:
[ceph: root@host01 /]# mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db
[ceph: root@host01 /]# mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 収集したマップから Monitor ストアを再構築します。
例:
[ceph: root@host01 /]# ceph-monstore-tool /tmp/monstore rebuild -- --keyring /etc/ceph/ceph.client.admin
[ceph: root@host01 /]# ceph-monstore-tool /tmp/monstore rebuild -- --keyring /etc/ceph/ceph.client.admin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記このコマンドを実行後に、OSD から抽出したキーリングと、
ceph-monstore-tool
コマンドラインで指定されたキーリングのみが Ceph の認証データベースにあります。クライアント、Ceph Manager、Ceph Object Gateway などの他のすべてのキーリングを再作成またはインポートし、それらのクライアントがクラスターにアクセスできるようにする必要があります。破損したストアをバックアップします。すべての Ceph Monitor ノードでこの手順を繰り返します。
構文
mv /var/lib/ceph/mon/ceph-HOSTNAME/store.db /var/lib/ceph/mon/ceph-HOSTNAME/store.db.corrupted
mv /var/lib/ceph/mon/ceph-HOSTNAME/store.db /var/lib/ceph/mon/ceph-HOSTNAME/store.db.corrupted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME は、Ceph Monitor ノードのホスト名に置き換えます。
破損したストアを交換します。すべての Ceph Monitor ノードでこの手順を繰り返します。
構文
scp -r /tmp/monstore/store.db HOSTNAME:/var/lib/ceph/mon/ceph-HOSTNAME/
scp -r /tmp/monstore/store.db HOSTNAME:/var/lib/ceph/mon/ceph-HOSTNAME/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME は、Monitor ノードのホスト名に置き換えます。
新しいストアの所有者を変更します。すべての Ceph Monitor ノードでこの手順を繰り返します。
構文
chown -R ceph:ceph /var/lib/ceph/mon/ceph-HOSTNAME/store.db
chown -R ceph:ceph /var/lib/ceph/mon/ceph-HOSTNAME/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME は、Ceph Monitor ノードのホスト名に置き換えます。
すべてのノードで一時的にマウントされたすべての OSD をアンマウントします。
例:
umount /var/lib/ceph/osd/ceph-*
[root@host01 ~]# umount /var/lib/ceph/osd/ceph-*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべての Ceph Monitor デーモンを起動します。
構文
systemctl start ceph-FSID@DAEMON_NAME
systemctl start ceph-FSID@DAEMON_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例:
systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@mon.host01.service
[root@mon ~]# systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@mon.host01.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Monitor がクォーラムを形成できることを確認します。
構文
ceph -s
ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME は、Ceph Monitor ノードのホスト名に置き換えます。
Ceph Manager キーリングをインポートして、すべての Ceph Manager プロセスを起動します。
構文
ceph auth import -i /etc/ceph/ceph.mgr.HOSTNAME.keyring systemctl start ceph-FSID@DAEMON_NAME
ceph auth import -i /etc/ceph/ceph.mgr.HOSTNAME.keyring systemctl start ceph-FSID@DAEMON_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例:
systemctl start ceph-b341e254-b165-11ed-a564-ac1f6bb26e8c@mgr.extensa003.exrqql.service
[root@host01 ~]# systemctl start ceph-b341e254-b165-11ed-a564-ac1f6bb26e8c@mgr.extensa003.exrqql.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME は、Ceph Manager ノードのホスト名に置き換えてください。
すべての OSD ノード全体ですべての OSD プロセスを起動します。クラスター上のすべての OSD に対して繰り返します。
構文
systemctl start ceph-FSID@osd.OSD_ID
systemctl start ceph-FSID@osd.OSD_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例:
systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@osd.0.service
[root@host01 ~]# systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@osd.0.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD がサービスに返されることを確認します。
例:
[ceph: root@host01 /]# ceph -s
[ceph: root@host01 /]# ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow