4.8. Ceph Monitor ストアのリカバリー
Ceph Monitor は、クラスターマップを LevelDB などのキーバリューストアに保存します。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
実稼働の 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.8.1. BlueStore の使用時の Ceph Monitor ストアのリカバリー
Ceph Monitor ストアがすべての Ceph Monitor で破損し、BlueStore バックエンドを使用する場合には、以下の手順に従います。
コンテナー化環境でこの方法を使用する場合、Ceph リポジトリーをアタッチし、最初にコンテナー化されていない Ceph Monitor に復元する必要があります。
この手順では、データが失われる可能性があります。この手順で不明な点がある場合は、Red Hat テクニカルサポートに連絡して、リカバリープロセスの支援を受けてください。
前提条件
ベアメタルデプロイメント
-
rsync
パッケージおよびceph-test
パッケージがインストールされています。
-
コンテナーデプロイメント
- すべての OSD コンテナーが停止します。
- ロールに基づいて Ceph ノードで Ceph リポジトリーを有効にします。
-
ceph-test
パッケージおよびrsync
パッケージが OSD および Monitor ノードにインストールされている。 -
ceph-mon
パッケージが Monitor ノードにインストールされている。 -
ceph-osd
パッケージが OSD ノードにインストールされている。
手順
コンテナー で Ceph を使用する場合は、Ceph データを含むすべてのディスクを一時的な場所にマウントします。すべての OSD ノードに対してこの手順を繰り返します。
データパーティションをリスト表示します。デバイスの設定に使用したユーティリティーに応じて、
ceph-volume
またはceph-disk
を使用します。[root@osd ~]# ceph-volume lvm list
または
[root@osd ~]# ceph-disk list
データパーティションを一時的な場所にマウントします。
mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$i
SELinux コンテキストを復元します。
for i in {OSD_ID}; do restorecon /var/lib/ceph/osd/ceph-$i; done
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
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
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
BLUESTORE-DATABASE を BlueStore データベースへのボリュームグループ (VG) または論理ボリューム (LV) パスに置き換え、OSD-ID を OSD の ID に置き換えます。
破損したストアのある Ceph Monitor ノードから次のコマンドを使用します。すべてのノードのすべての OSD に対してこれを繰り返します。
すべての OSD ノードからクラスターマップを収集します。
[root@ mon~]# cd /root/ [root@mon ~]# ms=/tmp/monstore/ [root@mon ~]# db=/root/db/ [root@mon ~]# db_slow=/root/db.slow/ [root@mon ~]# mkdir $ms [root@mon ~]# for host in $osd_nodes; do echo "$host" rsync -avz $ms $host:$ms rsync -avz $db $host:$db rsync -avz $db_slow $host:$db_slow rm -rf $ms rm -rf $db rm -rf $db_slow sh -t $host <<EOF for osd in /var/lib/ceph/osd/ceph-*; do ceph-objectstore-tool --type bluestore --data-path \$osd --op update-mon-db --mon-store-path $ms done EOF rsync -avz $host:$ms $ms rsync -avz $host:$db $db rsync -avz $host:$db_slow $db_slow done
適切なケーパビリティーを設定します。
[root@mon ~]# ceph-authtool /etc/ceph/ceph.client.admin.keyring -n mon. --cap mon 'allow *' --gen-key [root@mon ~]# cat /etc/ceph/ceph.client.admin.keyring [mon.] key = AQCleqldWqm5IhAAgZQbEzoShkZV42RiQVffnA== caps mon = "allow *" [client.admin] key = AQCmAKld8J05KxAArOWeRAw63gAwwZO5o75ZNQ== auid = 0 caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *"
db
ディレクトリーおよびdb.slow
ディレクトリーから、すべてのsst
ファイルを一時的な場所に移動します。[root@mon ~]# mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db
収集したマップから Monitor ストアを再構築します。
[root@mon ~]# ceph-monstore-tool /tmp/monstore rebuild -- --keyring /etc/ceph/ceph.client.admin
注記このコマンドを実行後に、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
HOSTNAME は、Ceph Monitor ノードのホスト名に置き換えます。
破損したストアを交換します。すべての Ceph Monitor ノードでこの手順を繰り返します。
scp -r /tmp/monstore/store.db HOSTNAME:/var/lib/ceph/mon/ceph-HOSTNAME/
HOSTNAME は、Monitor ノードのホスト名に置き換えます。
新しいストアの所有者を変更します。すべての Ceph Monitor ノードでこの手順を繰り返します。
chown -R ceph:ceph /var/lib/ceph/mon/ceph-HOSTNAME/store.db
HOSTNAME は、Ceph Monitor ノードのホスト名に置き換えます。
コンテナーで Ceph を使用する場合は、すべてのノードで一時的にマウントされた OSD をアンマウントします。
[root@osd ~]# umount /var/lib/ceph/osd/ceph-*
すべての Ceph Monitor デーモンを起動します。
[root@mon ~]# systemctl start ceph-mon *
Monitor がクォーラムを形成できることを確認します。
ベアメタルデプロイメント
[root@mon ~]# ceph -s
コンテナー
[user@admin ~]$ docker exec ceph-mon-_HOSTNAME_ ceph -s
HOSTNAME は、Ceph Monitor ノードのホスト名に置き換えます。
Ceph Manager キーリングをインポートして、すべての Ceph Manager プロセスを起動します。
ceph auth import -i /etc/ceph/ceph.mgr.HOSTNAME.keyring systemctl start ceph-mgr@HOSTNAME
HOSTNAME は、Ceph Manager ノードのホスト名に置き換えてください。
すべての OSD ノード全体ですべての OSD プロセスを起動します。
[root@osd ~]# systemctl start ceph-osd *
OSD がサービスに返されることを確認します。
ベアメタルデプロイメント
[root@mon ~]# ceph -s
コンテナー
[user@admin ~]$ docker exec ceph-mon-_HOSTNAME_ ceph -s
HOSTNAME は、Ceph Monitor ノードのホスト名に置き換えます。
関連情報
- Ceph ノードをコンテンツ配信ネットワーク (CDN) に登録する方法の詳細は、Red Hat Ceph Storage インストールガイドの Red Hat Ceph Storage ノードの CDN への登録およびサブスクリプションの割り当て セクションを参照してください。
- リポジトリーの有効化に関する詳細は、Red Hat Ceph Storage インストールガイドの Red Hat Ceph Storage リポジトリーの有効化 セクションを参照してください。