Red Hat Training

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

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 ノードから以下のコマンドを使用します。

  1. すべての 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
  2. 適切な機能を設定します。

    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 *'
  3. 収集したマップから 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
  4. 破損したストアをバックアップします。

    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
  5. 破損したストアを置き換えます。

    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 に対してこの手順を繰り返します。

  6. 新しいストアの所有者を変更します。

    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 に対してこの手順を繰り返します。

関連項目