4.3. モニターストアのリカバリー
Ceph Monitors は、クラスターマップを 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
実稼働クラスターは、少なくとも 3 つのモニターを使用し、失敗した場合は別のモニターと置き換えることができます。ただし、特定の状況では、Monitor にストアがすべて破損する可能性があります。たとえば、Monitor ノードが誤ってディスクまたはファイルシステムの設定を設定したと、電源の停止により、下層のファイルシステムが破損する可能性があります。
ストアがすべての 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
-
古いバックアップからモニターストアを復元しないでください。以下の手順に従って、現在のクラスター状態からモニターストアを再構築します。
作業を開始する前に
-
rsync
ユーティリティーおよびceph-test
パッケージがインストールされていることを確認します。
手順: モニターストアのリカバリー
破損したストアで Monitor ノードから以下のコマンドを使用します。
すべての OSD ノードからクラスターマップを収集します。
ms=<directory> mkdir $ms for host in $host_list; do rsync -avz "$ms" root@$host:"$ms"; rm -rf "$ms" ssh root@$host <<EOF for osd in /var/lib/ceph/osd/ceph-*; do ceph-objectstore-tool --data-path \$osd --op update-mon-db --mon-store-path $ms done EOF rsync -avz root@$host:$ms $ms; done
<directory>
を、収集したクラスターマップを保存する一時ディレクトリーに置き換えます。以下に例を示します。$ ms=/tmp/monstore/ $ mkdir $ms $ for host in $host_list; do rsync -avz "$ms" root@$host:"$ms"; rm -rf "$ms" ssh root@$host <<EOF for osd in /var/lib/ceph/osd/ceph-*; do ceph-objectstore-tool --data-path \$osd --op update-mon-db --mon-store-path $ms done EOF rsync -avz root@$host:$ms $ms; done
適切な機能を設定します。
ceph-authtool <keyring> -n mon. --cap mon 'allow *' ceph-authtool <keyring> -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'
<keyring>
をクライアント管理キーリングへのパスに置き換えます。以下に例を示します。$ ceph-authtool /etc/ceph/ceph.client.admin.keyring -n mon. --cap mon 'allow *' $ ceph-authtool /etc/ceph/ceph.client.admin.keyring -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'
収集したマップから Monitor ストアを再構築します。
ceph-monstore-tool <directory> rebuild -- --keyring <keyring>
<directory>
を最初のステップの一時ディレクトリーに、<keyring>
をクライアント管理キーリングへのパスに置き換えます。以下に例を示します。$ ceph-monstore-tool /tmp/mon-store rebuild -- --keyring /etc/ceph/ceph.client.admin.keyring
注記cephfx
認証を使用しない場合は、--keyring
オプションを省略します。$ ceph-monstore-tool /tmp/mon-store rebuild
破損したストアをバックアップします。
mv /var/lib/ceph/mon/<mon-ID>/store.db \ /var/lib/ceph/mon/<mon-ID>/store.db.corrupted
<mon-ID>
を Monitor ID に置き換えます(例:<mon.0>
)。# mv /var/lib/ceph/mon/mon.0/store.db \ /var/lib/ceph/mon/mon.0/store.db.corrupted
破損したストアを置き換えます。
mv /tmp/mon-store/store.db /var/lib/ceph/mon/<mon-ID>/store.db
<mon-ID>
を Monitor ID に置き換えます(例:<mon.0>
)。# mv /tmp/mon-store/store.db /var/lib/ceph/mon/mon.0/store.db
破損したストアを持つすべての Monitor に対してこの手順を繰り返します。
新しいストアの所有者を変更します。
chown -R ceph:ceph /var/lib/ceph/mon/<mon-ID>/store.db
<mon-ID>
を Monitor ID に置き換えます(例:<mon.0>
)。# chown -R ceph:ceph /var/lib/ceph/mon/mon.0/store.db
破損したストアを持つすべての Monitor に対してこの手順を繰り返します。