付録A トラブルシューティング
A.1. CephFS のヘルスメッセージ
- クラスターのヘルスチェック
Ceph monitor デーモンは、MDS クラスターの特定の状態に応じて正常性メッセージを生成します。以下は、クラスターのヘルスメッセージとその説明の一覧です。
- mds rank(s) <ranks> have failed
- 現在、1 つ以上の MDS ランクが MDS デーモンに割り当てられていません。クラスターは、適切な交換デーモンが起動するまで復元されません。
- MDS rank(s)<ranks> is damaged
- MDS ランクク 1 つまたは複数で、保存されたメタデータに重大な破損が生じ、メタデータが修復されるまで再度起動できません。
- MDS クラスターが動作が低下しています。
-
現在、MDS のランク 1 つ以上が稼働していないため、この状況が解決されるまで、クライアントはメタデータ I/O を一時停止する可能性があります。これには、失敗または破損のランクが含まれます。これには MDS で実行されているランクも含まれますが、
再生
状態のランクなど、アクティブな
状態にないランクも含まれます。 - mds <names> are laggy
-
MDS デーモンは、
mds_beacon_interval
オプションで指定された間隔で、モニターに beacon メッセージを送信します(デフォルトは 4 秒)。MDS デーモンがmds_beacon_grace
オプションで指定した時間内にメッセージを送信できない場合(デフォルトは 15 秒)、Ceph モニターは MDS デーモンをlaggy
とマークし、利用可能な場合は自動的にスタンバイデーモンに置き換えます。
- デーモンでレポートされたヘルスチェック
MDS デーモンは、さまざまな不要な状況を特定し、それらを
ceph status
コマンドの出力で返すことができます。この状態には人間が判読できるメッセージや、JSON 出力に表示されるMDS_HEALTH
を開始する固有のコードがあります。以下は、デーモンメッセージ、そのコード、説明の一覧です。- "Behind on trimming…"
コード: MDS_HEALTH_TRIM
CephFS は、ログセグメントに分割されるメタデータジャーナルを維持します。ジャーナルの長さ (セグメント数) は、
mds_log_max_segments
設定で制御されます。セグメントの数が設定を超えた場合、MDS はメタデータの書き込みを開始し、最も古いセグメントを削除 (トリミング) できるようにします。このプロセスの速度が遅い場合や、ソフトウェアのバグがトリミングされると、この健全性メッセージが表示されます。このメッセージに表示されるしきい値は、セグメントの数が doublemds_log_max_segments
となるものです。- "Client <name> failing to respond to capability release"
コード: MDS_HEALTH_CLIENT_LATE_RELEASE, MDS_HEALTH_CLIENT_LATE_RELEASE_MANY
CephFS クライアントは、MDS により機能が発行されます。この機能はロックのように機能します。たとえば、別のクライアントがアクセスする必要がある場合、MDS はクライアントに対してその機能を解放するよう要求します。クライアントが応答しない場合は、すぐに実行できないか、またはまったく実行できない可能性があります。このメッセージは、クライアントが
mds_revoke_cap_timeout
オプションで指定された時間 (デフォルトは 60 秒) に準拠するために時間がかかる場合に表示されます。- "Client <name> failing to respond to cache pressure"
コード: MDS_HEALTH_CLIENT_RECALL, MDS_HEALTH_CLIENT_RECALL_MANY
クライアントはメタデータキャッシュを維持します。クライアントキャッシュ内の inode などの項目は、MDS キャッシュでも固定されます。MDS がキャッシュサイズの制限内に留まるように MDS を縮小する必要がある場合、MDS はメッセージをクライアントに送信してキャッシュを縮小します。クライアントが応答しなくなると、MDS がキャッシュサイズ内に適切に維持されなくなり、最終的に MDS のメモリーが不足し、予期せずに終了する可能性があります。このメッセージは、クライアントが
mds_recall_state_timeout
オプションで指定された時間 (デフォルトは 60 秒) に準拠するために時間がかかる場合に表示されます。詳しくは、??? を参照してください。- "Client name failing to advance its oldest client/flush tid"
コード: MDS_HEALTH_CLIENT_OLDEST_TID, MDS_HEALTH_CLIENT_OLDEST_TID_MANY
クライアントと MDS サーバー間で通信するための CephFS プロトコルは、oldest tid というフィールドを使用して、MDS が対応するためにクライアント要求が完全に完了している MDS に通知するものです。反応しないクライアントがこのフィールドを進めない場合、MDS はクライアント要求によって使用されるリソースを適切にクリーンアップできなくなる可能性があります。このメッセージは、クライアントが MDS 側で完了したが、クライアントの 最も古い tid 値でまだ対応していない
max_completed_requests
オプション(デフォルトは 100000)よりも多くの要求がある場合に表示されます。- "Metadata damage detected"
コード: MDS_HEALTH_DAMAGE
メタデータプールから読み取り時に、破損したメタデータまたは欠落しているメタデータが見つかりました。このメッセージは、MDS が動作を継続するために十分な破損した分離されたことを示しています。ただし、クライアントが破損したサブツリーへのアクセスにより I/O エラーが返されることを示します。
damage ls
administration socket コマンドを使用して、破損の詳細を表示します。このメッセージは、破損が発生するとすぐに表示されます。- "MDS in read-only mode"
Code: MDS_HEALTH_READ_ONLY
MDS は読み取り専用モードに入力されており、メタデータの変更を試みるクライアント操作に
EROFS
エラーコードを返します。MDS は読み取り専用モードに入ります。- メタデータプールへの書き込み中に書き込みエラーが発生した場合
-
force_readonly
管理ソケットコマンドを使用して、管理者が MDS を読み取り専用モードに強制するとき。
- "<N> slow requests are blocked"
コード: MDS_HEALTH_SLOW_REQUEST
1 つ以上のクライアント要求が完了しておらず、MDS が非常に遅いか、バグが発生したことを示しています。
ops
管理ソケットコマンドを使用して、未処理のメタデータ操作を一覧表示します。クライアントリクエストにmds_op_complaint_time
オプションで指定された値よりも長い時間がかかる場合に表示されます(デフォルトは 30 秒)。- 「too many inodes in cache」
コード: MDS_HEALTH_CACHE_OVERSIZED
MDS は、管理者が設定した制限に準拠するためにキャッシュをトリミングできませんでした。MDS キャッシュが大きすぎると、デーモンは利用可能なメモリーを使い切ったり、予期せずに終了する可能性があります。MDS キャッシュサイズが制限よりも 50% を超えると、このメッセージが表示されます(デフォルトでは)。詳しくは、??? を参照してください。