3.3. Ceph Storage クラスターの低レベルの監視
ストレージ管理者は、低レベルの視点から Red Hat Ceph Storage クラスターの正常性をモニターできます。通常、低レベルのモニタリングでは、Ceph OSD が適切にピアリングされるようにする必要があります。ピアの障害が発生すると、配置グループは動作が低下した状態で動作します。このパフォーマンスの低下状態は、ハードウェア障害、Ceph デーモンのハングまたはクラッシュした Ceph デーモン、ネットワークレイテンシー、完全なサイト停止など多くの異なる状態によって生じる可能性があります。
3.3.1. 前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
3.3.2. 配置グループセットの監視
CRUSH が配置グループを OSD に割り当てると、プールのレプリカ数を確認し、配置グループの各レプリカが別の OSD に割り当てられるように配置グループを OSD に割り当てます。たとえば、プールに配置グループの 3 つのレプリカが必要な場合、CRUSH はそれらをそれぞれ osd.1
、osd.2
、および osd.3
に割り当てることができます。CRUSH は実際には、CRUSH マップで設定した障害ドメインを考慮した擬似ランダムな配置を求めているため、大規模なクラスター内で最も近い OSD に割り当てられた配置グループを目にすることはほとんどありません。特定の配置グループのレプリカを Acting Set として組み込む必要がある OSD のセットを参照します。場合によっては、Acting Set の OSD が down
になった場合や、配置グループ内のオブジェクトのリクエストに対応できない場合があります。このような状況になっても、慌てないでください。以下に一般的な例を示します。
- OSD を追加または削除しています。次に、CRUSH は配置グループを他の OSD に再度割り当てます。これにより、動作セットの設定を変更し、バックフィルプロセスでデータの移行を生成します。
-
OSD が
down
になり、再起動されてリカバリー中 (recovering
) となっています。 -
動作セットの OSD は
down
となっているが、要求に対応できず、別の OSD がそのロールを一時的に想定しています。
Ceph は Up Set を使用してクライアント要求を処理します。これは、実際に要求を処理する OSD のセットです。ほとんどの場合、Up Set と Acting Set はほぼ同じです。そうでない場合には、Ceph がデータを移行しているか、OSD が復旧するか、問題がある場合に、通常 Ceph がこのようなシナリオで stuck stale メッセージと共に HEALTH WARN
状態を出すことを示しています。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
配置グループの一覧を取得するには、次のコマンドを実行します。
[root@mon ~]# ceph pg dump
Acting Set にどの OSD があるか、特定の配置グループの Up Set を表示するには、以下を実行します。
[root@mon ~]# ceph pg map PG_NUM
結果により、osdmap エポック (
eNNN
)、配置グループ番号 (PG_NUM
)、Up Set の OSD (up[]
(、動作セット (acting[]
) であることが分かります。[root@mon ~]# ceph osdmap eNNN pg PG_NUM-> up [0,1,2] acting [0,1,2]
注記Up Set と Acting Set が一致しない場合は、クラスター自体をリバランスするか、クラスターで潜在的な問題があることを示している可能性があります。
3.3.3. Ceph OSD のピアリング
配置グループにデータを書き込む前に、そのデータを active
状態にし、clean
な状態で なければなりません。Ceph が配置グループの現在の状態を決定するためには、配置グループのプライマリー OSD、すなわちアクティングセットの最初の OSD が、セカンダリーおよびターシエリィー OSD とピアリングを行い、配置グループの現在の状態についての合意を確立します。PG のレプリカが 3 つあるプールを想定します。
3.3.4. 配置グループの状態
ceph health
、ceph -s
、ceph -w
などのコマンドを実行すると、クラスターが常に HEALTH OK
をエコーバックしないことが分かります。OSD が実行中であるかを確認したら、配置グループのステータスも確認する必要があります。数多くの配置グループのピア関連状況で、クラスターが HEALTH OK
を しない ことが予想されます。
- プールを作成したばかりで、配置グループはまだピアリングしていません。
- 配置グループは復旧しています。
- クラスターに OSD を追加したり、クラスターから OSD を削除したりしたところです。
- CRUSH マップを変更し、配置グループが移行中である必要があります。
- 配置グループの異なるレプリカに一貫性のないデータがあります。
- Ceph は配置グループのレプリカをスクラビングします。
- Ceph には、バックフィルの操作を完了するのに十分なストレージ容量がありません。
前述の状況のいずれかにより Ceph が HEALTH WARN
をエコーしても慌てる必要はありません。多くの場合、クラスターは独自にリカバリーします。場合によっては、アクションを実行する必要がある場合があります。配置グループを監視する上で重要なことは、クラスターの起動時にすべての配置グループが active
で、できれば clean
な状態であることを確認することです。
すべての配置グループのステータスを表示するには、以下を実行します。
[root@mon ~]# ceph pg stat
その結果、配置グループマップバージョン (vNNNNNN
)、配置グループの合計 (x
)、および配置グループの数 (y
) が、active+clean
などの特定の状態にあることを示します。
vNNNNNN: x pgs: y active+clean; z bytes data, aa MB used, bb GB / cc GB avail
Ceph では、配置グループについて複数の状態を報告するのが一般的です。
スナップショットトリミングの PG の状態
スナップショットが存在する場合には、追加の PG ステータスが 2 つ報告されます。
-
snaptrim
: PG は現在トリミング中です。 -
snaptrim_wait
: PG はトリム処理を待機中です。
出力例:
244 active+clean+snaptrim_wait 32 active+clean+snaptrim
Ceph は、配置グループの状態に加えて、使用データ量 (aa
)、ストレージ容量残量 (bb
)、配置グループの総ストレージ容量をエコーバックします。いくつかのケースでは、これらの数字が重要になります。
-
near full ratio
またはfull ratio
に達しています。 - CRUSH 設定のエラーにより、データがクラスター全体に分散されません。
配置グループ ID
配置グループ ID は、プール名ではなくプール番号で設定され、ピリオド (.) と配置グループ ID が続きます (16 進数)。ceph osd lspools
の出力で、プール番号およびその名前を表示することができます。デフォルトのプール名 data
、metadata
、rbd
はそれぞれプール番号 0
、1
、2
に対応しています。完全修飾配置グループ ID の形式は以下のとおりです。
POOL_NUM.PG_ID
出力例:
0.1f
配置グループの一覧を取得するには、次のコマンドを実行します。
[root@mon ~]# ceph pg dump
JSON 形式で出力をフォーマットし、ファイルに保存するには、以下を実行します。
[root@mon ~]# ceph pg dump -o FILE_NAME --format=json
特定の配置グループをクエリーするには、次のコマンドを実行します。
[root@mon ~]# ceph pg POOL_NUM.PG_ID query
JSON 形式の出力例:
{ "state": "active+clean", "up": [ 1, 0 ], "acting": [ 1, 0 ], "info": { "pgid": "1.e", "last_update": "4'1", "last_complete": "4'1", "log_tail": "0'0", "last_backfill": "MAX", "purged_snaps": "[]", "history": { "epoch_created": 1, "last_epoch_started": 537, "last_epoch_clean": 537, "last_epoch_split": 534, "same_up_since": 536, "same_interval_since": 536, "same_primary_since": 536, "last_scrub": "4'1", "last_scrub_stamp": "2013-01-25 10:12:23.828174" }, "stats": { "version": "4'1", "reported": "536'782", "state": "active+clean", "last_fresh": "2013-01-25 10:12:23.828271", "last_change": "2013-01-25 10:12:23.828271", "last_active": "2013-01-25 10:12:23.828271", "last_clean": "2013-01-25 10:12:23.828271", "last_unstale": "2013-01-25 10:12:23.828271", "mapping_epoch": 535, "log_start": "0'0", "ondisk_log_start": "0'0", "created": 1, "last_epoch_clean": 1, "parent": "0.0", "parent_split_bits": 0, "last_scrub": "4'1", "last_scrub_stamp": "2013-01-25 10:12:23.828174", "log_size": 128, "ondisk_log_size": 128, "stat_sum": { "num_bytes": 205, "num_objects": 1, "num_object_clones": 0, "num_object_copies": 0, "num_objects_missing_on_primary": 0, "num_objects_degraded": 0, "num_objects_unfound": 0, "num_read": 1, "num_read_kb": 0, "num_write": 3, "num_write_kb": 1 }, "stat_cat_sum": { }, "up": [ 1, 0 ], "acting": [ 1, 0 ] }, "empty": 0, "dne": 0, "incomplete": 0 }, "recovery_state": [ { "name": "Started\/Primary\/Active", "enter_time": "2013-01-23 09:35:37.594691", "might_have_unfound": [ ], "scrub": { "scrub_epoch_start": "536", "scrub_active": 0, "scrub_block_writes": 0, "finalizing_scrub": 0, "scrub_waiting_on": 0, "scrub_waiting_on_whom": [ ] } }, { "name": "Started", "enter_time": "2013-01-23 09:35:31.581160" } ] }
関連情報
- スナップショットトリミングの設定に関する詳細は、Red Hat Ceph Storage 4 の 設定ガイド のOSD (Object Storage Daemon) の設定オプションの章を参照してください。
3.3.5. 配置グループの状態の作成
プールを作成すると、指定した数の配置グループが作成されます。Ceph は、1 つ以上の配置グループの 作成
時に作成をエコーします。これが作成されると、配置グループのアクティングセットの一部である OSD がピアリングを行います。ピアリングが完了すると、配置グループのステータスは active+clean
になり、Ceph クライアントが配置グループへの書き込みを開始できるようになります。
3.3.6. 配置グループのピア状態
Ceph が配置グループをピアリングする場合、Ceph は配置グループのレプリカを保存する OSD を配置グループ内のオブジェクトおよびメタデータの 状態について合意 に持ち込みます。Ceph がピアリングを完了すると、配置グループを格納する OSD が配置グループの現在の状態について合意することを意味します。ただし、ピアリングプロセスを完了しても、各レプリカに最新のコンテンツがある わけではありません。
権威の履歴
Ceph は、動作セットのすべての OSD が書き込み操作を持続させるまで、クライアントへの書き込み操作を 承認しません。これにより、有効なセットの少なくとも 1 つメンバーが、最後に成功したピア操作以降の確認済みの書き込み操作がすべて記録されるようになります。
それぞれの確認応答書き込み操作の正確なレコードにより、Ceph は配置グループの新しい権威履歴を構築して公開することができます。完全かつ完全に命令された一連の操作が実行されれば、OSD の配置グループのコピーを最新の状態にすることができます。
3.3.7. 配置グループのアクティブな状態
Ceph がピア処理を完了すると、配置グループが active
になる可能性があります。active
状態とは、配置グループのデータがプライマリー配置グループで一般的に利用可能で、読み取り操作および書き込み操作用のレプリカになります。
3.3.8. 配置グループの clean の状態
配置グループが クリーン
な状態にある場合、プライマリー OSD とレプリカ OSD は正常にピアリングを行い、配置グループ用の迷子のレプリカが存在しないことを意味します。Ceph は、配置グループ内のすべてのオブジェクトを正しい回数で複製します。
3.3.9. 配置グループの状態が低下した状態
クライアントがプライマリー OSD にオブジェクトを書き込む際に、プライマリー OSD はレプリカ OSD にレプリカを書き込むロールを担います。プライマリー OSD がオブジェクトをストレージに書き込んだ後に、配置グループは、Ceph がレプリカオブジェクトを正しく作成したレプリカ OSD からプライマリー OSD が確認応答を受け取るまで、動作が 低下
した状態になります。
配置グループが active+degraded
になる理由は、OSD がまだすべてのオブジェクトを保持していない場合でも active
である可能性があることです。OSD が down
する場合、Ceph は OSD に割り当てられた各配置グループを degraded
としてマークします。OSD がオンラインに戻る際に、OSD を再度ピアする必要があります。ただし、クライアントは、active
であれば、degraded
である配置グループに新しいオブジェクトを記述できます。
OSD が down
していてパフォーマンスの低下 (degraded
) が続く場合には、Ceph は down
状態である OSD をクラスターの外 (out
) としてマークし、down
状態である OSD から別の OSD にデータを再マッピングする場合があります。down
とマークされた時間と out
とマークされた時間の間の時間は mon_osd_down_out_interval
によって制御され、デフォルトでは 600
に設定されています。
また、配置グループは、Ceph が配置グループにあるべきだと考えるオブジェクトを 1 つ以上見つけることができないため、低下
してしまうこともあります。未検出オブジェクトへの読み取りまたは書き込みはできませんが、動作が低下した (degraded
) 配置グループ内の他のすべてのオブジェクトにアクセスできます。
3 方のレプリカプールに 9 つの OSD があるとします。OSD の数の 9 がダウンすると、9 の OSD に割り当てられた PG は動作が低下します。OSD 9 がリカバリーされない場合は、クラスターから送信され、クラスターがリバランスします。このシナリオでは、PG のパフォーマンスが低下してから、アクティブな状態に戻ります。
3.3.10. 配置グループの状態のリカバリー
Ceph は、ハードウェアやソフトウェアの問題が継続している規模でのフォールトトレランスを目的として設計されています。OSD がダウンする (down
) と、そのコンテンツは配置グループ内の他のレプリカの現在の状態のままになる可能性があります。OSD が up
状態に戻ったら、配置グループの内容を更新して、現在の状態を反映させる必要があります。その間、OSD は リカバリー
の状態を反映する場合があります。
ハードウェアの故障は、複数の OSD のカスケード障害を引き起こす可能性があるため、回復は常に些細なことではありません。たとえば、ラックやキャビネット用のネットワークスイッチが故障して、多数のホストマシンの OSD がクラスターの現在の状態から遅れてしまうことがあります。各 OSD は、障害が解決されたら回復しなければなりません。
Ceph は、新しいサービス要求とデータオブジェクトの回復と配置グループを現在の状態に復元するニーズの間でリソース競合のバランスを取るためのいくつかの設定を提供しています。osd recovery delay start
設定により、回復プロセスを開始する前に OSD を再起動し、ピアリングを再度行い、さらにはいくつかの再生要求を処理できます。osd recovery threads
設定により、デフォルトで 1 つのスレッドでリカバリープロセスのスレッド数が制限されます。osd recovery thread timeout
は、複数の OSD が驚きの速さで失敗、再起動、再ピアする可能性があるため、スレッドタイムアウトを設定します。osd recovery max active
設定では、OSD が送信に失敗するのを防ぐために OSD が同時に実行するリカバリー要求の数を制限します。osd recovery の max chunk
設定により、復元されたデータチャンクのサイズが制限され、ネットワークの輻輳を防ぐことができます。
3.3.11. バックフィルの状態
新規 OSD がクラスターに参加する際に、CRUSH はクラスター内の OSD から新たに追加された OSD に配置グループを再割り当てします。新規 OSD が再割り当てされた配置グループをすぐに許可するように強制すると、新規 OSD に過剰な負荷が生じる可能性があります。OSD を配置グループでバックフィルすると、このプロセスはバックグラウンドで開始できます。バックフィルが完了すると、新しい OSD の準備が整い次第、リクエストへの対応を開始します。
バックフィル操作中は、いくつかの状態のうちの 1 つが表示されます。* backfill_wait
は、バックフィル操作が保留されているが、まだ進行していないことを示します * backfill
は、バックフィル操作が進行中であることを示します * backfill_too_full
は、バックフィル操作が要求されたが、ストレージ容量が不足しているために完了できなかったことを示します。
配置グループをバックフィルできない場合は、incomplete
とみなされることがあります。
Ceph は、OSD、特に新しい OSD への配置グループの再割り当てに伴い負荷の急増を管理するいくつかの設定を提供しています。デフォルトでは、osd_max_backfills
は、OSD から 10 への同時バックフィルの最大数を設定します。osd backfill full ratio
により、OSD は、OSD が完全な比率 (デフォルトでは 85%) に近づけている場合にバックフィル要求を拒否することができます。OSD がバックフィル要求を拒否する場合は、osd backfill retry interval
により、OSD はデフォルトで 10 秒後に要求を再試行できます。また、OSD は、スキャン間隔 (デフォルトで 64 および 512) を管理するために、osd backfill scan min
および osd backfill scan max
を設定することもできます。
ワークロードによっては、通常のリカバリーを完全に回避し、代わりにバックフィルを使用することが推奨されます。バックフィルはバックグラウンドで実行されるため、I/O は OSD のオブジェクトで続行できます。復元せずにバックフィルを強制するには、osd_min_pg_log_entries
を 1
に設定し、osd_max_pg_log_entries
を 2
に設定します。この状況がご使用のワークロードに適切な場合についての詳細は、Red Hat サポートアカウントチームにお問い合わせください。
3.3.12. リカバリーまたはバックフィル操作の優先度の変更
一部の配置グループ (PG) にリカバリーやバックフィルが必要で、一部の配置グループに他のグループよりも重要なデータが含まれているという状況が発生する場合があります。pg force-recovery
または pg force-backfill
コマンドを使用して、優先度の高いデータを持つ PG が最初にリカバリーまたはバックフィルされるようにします。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
pg force-recovery
またはpg force-backfill
コマンドを実行し、優先度の高いデータを持つ PG の優先順位を指定します。構文
ceph pg force-recovery PG1 [PG2] [PG3 ...] ceph pg force-backfill PG1 [PG2] [PG3 ...]
例
[root@node]# ceph pg force-recovery group1 group2 [root@node]# ceph pg force-backfill group1 group2
このコマンドにより、Red Hat Ceph Storage は指定された配置グループ (PG) でリカバリーまたはバックフィルを実行してから、他の配置グループを処理します。コマンドを実行しても、現在実行中のバックフィルまたはリカバリー操作は中断されません。現在実行中の操作が終了した後、指定の PG に対してできるだけ早期にリカバリーまたはバックフィルが行われます。
3.3.13. 指定の配置グループでリカバリーまたはバックフィルの操作を変更またはキャンセル
ストレージクラスター内の特定の配置グループ (PG) で優先度の高い force-recovery
または force-backfill
操作をキャンセルすると、これらの PG の操作はデフォルトのリカバリー設定またはバックフィル設定に戻ります。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
指定の配置グループでリカバリーまたはバックフィルの操作を変更またはキャンセルするには、以下を実行します。
構文
ceph pg cancel-force-recovery PG1 [PG2] [PG3 ...] ceph pg cancel-force-backfill PG1 [PG2] [PG3 ...]
例
[root@node]# ceph pg cancel-force-recovery group1 group2 [root@node]# ceph pg cancel-force-backfill group1 group2
これにより、
force
フラグが取り消され、デフォルトの順序で PG を処理します。指定された PG のリカバリーまたはバックフィル操作が完了したら、処理の順序がデフォルトに戻ります。
関連情報
- RADOS でのリカバリーおよびバックフィル操作の優先順位の詳細については、RADOS での配置グループのリカバリーおよびバックフィル の優先順位を参照してください。
3.3.14. プールのリカバリーまたはバックフィル操作の優先度の強制
プールのすべての配置グループに優先度の高いリカバリーまたはバックフィルが必要な場合は、force-recovery
または force-backfill
オプションを使用して操作を開始します。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
指定されたプールのすべての配置グループで優先度の高いリカバリーまたはバックフィルを強制するには、以下を実行します。
構文
ceph osd pool force-recovery POOL_NAME ceph osd pool force-backfill POOL_NAME
例
[root@node]# ceph osd pool force-recovery pool1 [root@node]# ceph osd pool force-backfill pool1
注記force-recovery
およびforce-backfill
コマンドの使用には注意が必要です。これらの操作の優先度を変更すると、Ceph の内部優先度計算の順序付けが乱れる可能性があります。
3.3.15. プールのリカバリーまたはバックフィル操作の優先度のキャンセル
プールのすべての配置グループで優先度の高い force-recovery
または force-backfill
操作をキャンセルすると、そのプールの PG の操作はデフォルトのリカバリーまたはバックフィルの設定に戻ります。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
指定されたプールのすべての配置グループで優先度の高いリカバリーまたはバックフィル操作をキャンセルするには、以下を実行します。
構文
ceph osd pool cancel-force-recovery POOL_NAME ceph osd pool cancel-force-backfill POOL_NAME
例
[root@node]# ceph osd pool cancel-force-recovery pool1 [root@node]# ceph osd pool cancel-force-backfill pool1
3.3.16. プールのリカバリー操作またはバックフィルの操作の優先度の再調整
現在、同じ基礎となる OSD を使用している複数のプールがあり、一部のプールに優先度の高いデータが含まれている場合、操作の実行順序を再調整できます。recovery_priority
オプションを使用して、優先度の高いデータのあるプールに優先度の高い値を割り当てます。これらのプールは、優先度の低い値を持つプールやデフォルトの優先度に設定されたプールよりも先に実行されます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
プールのリカバリーやバックフィルの優先度を再調整するには、以下を実行します。
構文
ceph osd pool set POOL_NAME recovery_priority VALUE
例
ceph osd pool set pool1 recovery_priority 10
VALUE は優先順位を設定します。たとえば、プールが 10 個ある場合、優先度の値が 10 のプールは最初に処理され、次に優先順位が 9 のプールが処理されます。一部のプールのみ優先度が高い場合は、そのプールのみにに優先度の値を設定できます。優先度の値が設定されていないプールは、デフォルトの順序で処理されます。
3.3.17. RADOS における配置グループのリカバリーの優先順位
ここでは、RADOS における配置グループ (PG) のリカバリーおよびバックフィルの相対的な優先度の値について説明します。高い値が先に処理されます。非アクティブな PG の値は、アクティブまたはデグレードの PG よりも優先度が高い値になります。
操作 | 値 | 詳細 |
---|---|---|
OSD_RECOVERY_PRIORITY_MIN | 0 | 最小リカバリー値 |
OSD_BACKFILL_PRIORITY_BASE | 100 | MBackfillReserve のベースのバックフィル優先度 |
OSD_BACKFILL_DEGRADED_PRIORITY_BASE | 140 | MBackfillReserve のベースのバックフィル優先度 (デグレード PG) |
OSD_RECOVERY_PRIORITY_BASE | 180 | MBackfillReserve のベースのリカバリー優先度 |
OSD_BACKFILL_INACTIVE_PRIORITY_BASE | 220 | MBackfillReserve のベースのバックフィル優先度 (非アクティブ PG) |
OSD_RECOVERY_INACTIVE_PRIORITY_BASE | 220 | MRecoveryReserve のベースのリカバリー優先度 (非アクティブ) |
OSD_RECOVERY_PRIORITY_MAX | 253 | MBackfillReserve の手動または自動で設定される最大リカバリー優先度 |
OSD_BACKFILL_PRIORITY_FORCED | 254 | MBackfillReserve のバックフィル優先度 (手動で強制) |
OSD_RECOVERY_PRIORITY_FORCED | 255 | MRecoveryReserve のリカバリー優先度 (手動で強制) |
OSD_DELETE_PRIORITY_NORMAL | 179 | OSD が満杯状態でない場合の PG の削除の優先度 |
OSD_DELETE_PRIORITY_FULLISH | 219 | OSD がほぼ満杯状態である場合の PG の削除の優先度 |
OSD_DELETE_PRIORITY_FULL | 255 | OSD が満杯である場合の削除の優先度 |
3.3.18. 配置グループの再マッピングの状態
配置グループにサービスを提供する動作セットが変更すると、古い動作セットから新しい動作セットにデータを移行します。新規プライマリー OSD がリクエストを処理するには、多少時間がかかる場合があります。したがって、配置グループの移行が完了するまで、古いプライマリーに要求への対応を継続するように依頼する場合があります。データの移行が完了すると、マッピングは新しい動作セットのプライマリー OSD を使用します。
3.3.19. 配置グループの stale 状態
Ceph はハートビートを使用してホストとデーモンが実行されていることを確認しますが、ceph-osd
デーモンも スタック
状態になり、統計をタイムリーに報告しない場合があります。たとえば、一時的なネットワーク障害などが挙げられます。デフォルトでは、OSD デーモンは、配置グループ、アップスルー、ブート、失敗の統計情報を半秒 (0.5
) ごとに報告しますが、これはハートビートのしきい値よりも頻度が高くなります。配置グループの動作セットの プライマリー OSD がモニターへの報告に失敗した場合や、他の OSD がプライマリー OSD の down
を報告した場合、モニターは配置グループに stale
マークを付けます。
ストレージクラスターを起動すると、ピアリング処理が完了するまで stale
状態になるのが一般的です。ストレージクラスターがしばらく稼働している間に、配置グループが stale
状態になっているのが確認された場合は、その配置グループのプライマリー OSD が down
になっているか、モニターに配置グループの統計情報を報告していないことを示しています。
3.3.20. 配置グループの不配置の状態
PG が OSD に一時的にマップされる一時的なバックフィルシナリオがあります。一時的
な状況がなくなった場合には、PG は一時的な場所に留まり、適切な場所にない可能性があります。いずれの場合も、それらは 誤って配置
されます。それは、実際には正しい数の追加コピーが存在しているのに、1 つ以上のコピーが間違った場所にあるためです。
たとえば、3 つの OSD が 0、1、2 であり、すべての PG はこれらの 3 つのうちのいくつかの配列にマップされます。別の OSD (OSD 3) を追加する場合、一部の PG は、他のものではなく OSD 3 にマッピングされるようになりました。しかし、OSD 3 がバックフィルされるまで、PG には一時的なマッピングがあり、古いマッピングからの I/O を提供し続けることができます。その間、PG には一時的な待っピンがありますが、コピーが 3 つあるため degraded
はしていないため、間違った場所に置かれます (misplaced
)。
例
pg 1.5: up=acting: [0,1,2]
ADD_OSD_3
pg 1.5: up: [0,3,1] acting: [0,1,2]
[0,1,2] は一時的なマッピングです。そのため、up
セットは acting
なセットとは等しくならず、[0,1,2] がまだ 3 つのコピーであるため、PG は誤って配置されます (misplaced
) が、パフォーマンスは低下 (degraded
) しません。
例
pg 1.5: up=acting: [0,3,1]
OSD 3 はバックフィルされ、一時的なマッピングは削除され、パフォーマンスは低下せず、誤って配置されなくなりました。
3.3.21. 配置グループの不完全な状態
PG は、不完全なコンテンツがあり、ピアリングが失敗したとき、すなわち、リカバリーを実行するためのな現在の完全な OSD が十分にないときに、incomplete
状態になる。
例えば、OSD 1、2、3 が動作中の OSD セットで、それが OSD 1、4、3 に切り替わったとすると、osd.1
が 4 をバックフィルする間、OSD 1、2、3 の一時的な動作中の OSD セットを要求することになリマス。この間、OSD 1、2、および 3 すべてがダウンすると、osd.4
は、すべてのデータが完全にバックフィルされていない可能性がある唯一のものとして残されています。このとき、PG は incomplete
となり、リカバリーを実行するのに十分な現在の完全な OSD がないことを示す不完全な状態になります。
別の方法として、osd.4
が関与しておらず、OSD の 1、2、3 がダウンしたときに動作セットが単に OSD 1、2、3 になっている場合、PG はおそらく動作セットが変更されてからその PG で何も聞いていないことを示す stale
になります。新規 OSD に通知する OSD がない理由。
3.3.22. スタックした配置グループの特定
前述のように、配置グループは、その状態が active+clean
ではないため、必ずしも問題になるとは限りません。一般的に、Ceph の自己修復機能は、配置グループが停止しても機能しない場合があります。スタック状態には、以下が含まれます。
- Unclean: 配置グループには、必要な回数複製しないオブジェクトが含まれます。これらは回復中である必要があります。
-
Inactive: 配置グループは、最新のデータを持つ OSD が
up
に戻るのを待っているため、読み取りや書き込みを処理できません。 -
Stale: 配置グループは不明な状態です。配置グループは、これらをホストする OSD がしばらくモニタークラスターに報告されず、
mon osd report timeout
設定で設定できるためです。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
スタックした配置グループを特定するには、以下のコマンドを実行します。
ceph pg dump_stuck {inactive|unclean|stale|undersized|degraded [inactive|unclean|stale|undersized|degraded...]} {<int>}
3.3.23. オブジェクトの場所の検索
Ceph クライアントは最新のクラスターマップを取得し、CRUSH アルゴリズムはオブジェクトを配置グループにマッピングする方法を計算してから、配置グループを OSD に動的に割り当てる方法を計算します。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
オブジェクトの場所を見つけるには、オブジェクト名とプール名のみが必要です。
ceph osd map POOL_NAME OBJECT_NAME