6.7. RADOS
2 つのサイトのストレッチクラスターで DR テストを実行しても、Ceph が応答しなくなることがなくなりました
以前は、2 つのサイトのストレッチクラスターで DR テストを実行するときに、クラスターから新しいモニターを削除および追加すると、ConnectionTracker
クラスで不適切なランクが発生していました。そのため、モニターは peer_tracker
コピーで自分自身を識別できず、正しいフィールドを更新しませんでした。その結果、選択プロセスでデッドロックが発生し、Ceph が応答しなくなっていました。
今回の修正により、以下のとおり是正されました。
-
関数
notify_rank_removed()
に assert を追加し、Monmap
によって提供される想定ランクと手動で調整されたランクを、サニティチェックとして比較します。 -
Monmap
の更新ごとに変数removed_ranks
をクリアします。 -
各モニターで
ceph connection scores reset
コマンドを実行する際に、peer_tracker.rank
を手動でリセットするアクションが追加されました。peer_tracker.rank
は、モニターの現在のランクと一致します。 -
モニターのアップグレード時 (起動を含む) にクリーンな
peer_tracker
をチェックする関数をElector
およびConnectionTracker
クラスに追加しました。クリーンでないことが判明した場合、peer_tracker
はクリアされます。 -
Red Hat Ceph Storage では、ユーザーはモニターをシャットダウンする前に手動でモニターランクを削除することを選択できるため、
Monmap
で不整合が発生します。そのため、Monitor::notify_new_monmap()
では、関数がMonmap
に存在しないランクを削除するのを防ぎます。
クラスターは期待どおりに機能するようになり、不当なダウンタイムは発生しません。2 つのサイトのストレッチクラスターで DR テストを実行しても、クラスターが応答しなくなることがなくなりました。
一貫性のない接続スコアの問題を軽減するために、live_pinging
および dead_pinging
セットからランクが削除されました
以前は、2 つのモニターを連続して削除するときに、ランクサイズが Paxos のサイズと等しい場合、モニターは dead_pinging
セットからランクを削除しませんでした。そのため、ランクは dead_pinging
セットに残り、stretch-cluster モードが有効になっているときに接続スコアの一貫性が失われるなどの問題が発生していました。
今回の修正により、最高ランクのモニターが削除されるケースが追加されました。つまり、ランクが Paxos のサイズと等しい場合、live_pinging
および dead_pinging
セットからランクが削除されます。live_pinging
と dead_pinging
セットはクリーンな状態になり、モニターは正常に動作します。
Prometheus メトリクスは、要求されるたびにすべての Ceph Monitor の正しい Ceph バージョンを反映するようになりました。
以前のバージョンでは、Prometheus メトリクスは、モニターのアップグレード時に Ceph Monitor の一致しない Ceph バージョンを報告していました。その結果、この不整合を解決するには、アクティブな Ceph Manager デーモンを再起動する必要がありました。
今回の修正により、Ceph Monitor は、MON の選択が終了したときに、mon
メタデータを含むメタデータ更新要求を mgr
に明示的に送信します。
ceph daemon heap status
コマンドがヒープのステータスを表示するようになりました
以前は、ceph daemon
コマンドを使用してヒープ情報を取得できなかったため、ceph daemon heap stats
コマンドは、Ceph デーモンの現在のヒープ使用量を返す代わりに、空の出力を返していました。これは、ceph::osd_cmds::heap()
が stderr
と stdout
の概念を混同し、出力に違いが生じていたためです。
今回の修正により、ceph daemon heap stats
コマンドが ceph tell
コマンドを使用して得られるものと同様の Ceph デーモンのヒープ使用情報を返すようになりました。
ceph orch apply mon <num>
コマンドの使用時に Ceph Monitor がクラッシュしなくなりました
以前は、ceph orch apply mon <num>
コマンド使用してクラスター内のモニターを減らすと、ceph-adm
でシャットダウンする前にモニターが削除され、モニターがクラッシュしていました。
今回の修正により、すべてのコードパスにサニティチェックが追加され、ピアランクがモニターマップのランクのサイズ以上かチェックされます。条件が満たされている場合は、モニターのクラッシュにつながる特定の操作をスキップします。ピアランクは、最終的にはモニターマップの次のバージョンで解決されます。シャットダウンする前にモニターマップから削除しても、モニターはクラッシュしなくなりました。
エンドユーザーは、Ceph クラスターログから scrub または deep-scrub starts
メッセージを確認できるようになりました
以前は、Ceph クラスターログに scrub または deep-scrub starts メッセージが表示されなかったため、Ceph クラスターログから PG に対して PG スクラビングが開始されたかどうかをエンドユーザーが認識できませんでした。
この修正により、scrub または deep-scrub starts
メッセージが再導入されました。scrubbing または deep-scrubbingプロセスに進むたびに、Ceph クラスターログに PG のメッセージが表示されるようになりました。
Ceph Manager フェイルオーバー中のアサーションなし
以前は、Ceph Manager をアクティベートする際に、以前にアクティブなマネージャーによって送信された複数の service_map
バージョンを受信していました。コードの確認が間違っていることが原因で、以前のアクティブなマネージャーが送信したバージョンよりも新しいものが含まれるマップを、新たに有効になったマネージャーが受信する場合に、アサーションに失敗していました。
今回の修正により、初期サービスマップを処理するマネージャーのチェックが緩和され、Ceph Manager のフェイルオーバー中にアサーションが発生しなくなりました。
ユーザーは、クラスターのアップグレード後に複製されたオブジェクトを削除できる。
以前は、クラスターを Red Hat Ceph Storage 4 から Red Hat Ceph Storage 5 にアップグレードした後、以前のバージョンで作成されたオブジェクトのスナップショットを削除すると、クローンが残り削除できませんでした。これは、SnapMapper
キーが誤って変換されたためです。
今回の修正により、SnapMapper
のレガシーカンバセーションが更新され、新しいキー形式に一致するようになりました。以前のバージョンの Ceph で複製されたオブジェクトは、アップグレード後に簡単に削除できるようになりました。
RocksDB のエラーは小さな書き込みでは発生しない
BlueStore は、HDD の小さな書き込みを延期する戦略を採用し、データを RocksDB に保存します。RocksDB からの遅延データのクリーニングは、BlueFS とは同期されないバックグラウンドプロセスです。
この修正では、遅延リプレイが BlueFS データを上書きしなくなり、次のような RocksDB エラーが発生しなくなりました。
-
osd_superblock
の破損。 - 改行で終了しない CURRENT。
-
.SST
ファイルのチェックサムエラー。
書き込み場所には適切なオブジェクトが含まれているか空である可能性があるため、遅延データを書き込まないでください。この方法でオブジェクトデータが破損されることはありません。BlueFS は、この領域を割り当てることができる唯一のエンティティーです。
PG ログの破損した重複エントリーは、オフラインおよびオンラインのトリミングで削除できる
以前は、PG ログ重複エントリーのトリミングは、人間のオペレーターよりもはるかに高い頻度で PG オートスケーラーによって使用される低レベルの PG 分割操作中に阻止されていました。重複を取り除くと、PG ログのメモリー増大が大幅に増大し、OSD がメモリーが不足するとクラッシュしていました。OSD を再起動しても、PG ログはディスクに保存され、起動時に RAM に再ロードされるため、問題は解決しませんでした。
この修正により、オフライン (ceph-objectstore-tool
コマンドを使用) とオンライン (OSD 内) の両方のトリミングで、オンラインのトリミング装置を妨害してメモリー増加の原因となっていた PG ログの破損した重複エントリーを削除できるようになりました。将来の調査に役立つように、重複エントリーの数を OSD のログに出力するデバッグの改善が実装されています。