4.3. Ceph ファイルシステム
MDS デーモン
はキューに入れられた作業ごとに各スレッドのハートビートをリセットするようになりました。
以前は、スレッドは、実行する作業が多い場合、mds_lock
を長時間保持していました。これにより、他のスレッドがリソース不足になり、長時間スタックすることになりました。その結果、MDS デーモンは監視するハートビートを時間内に報告できず、クラスターから追い出されました。
今回の修正により、MDS デーモンは、キューに入れられた各作業の後に各スレッドのハートビートをリセットします。
同時ルックアップおよびリンク解除操作中に Ceph Metadata Server がクラッシュしなくなる
以前は、コードに配置されたアサーションの誤った想定により、Ceph クライアントからの同時ルックアップおよびリンク解除操作にヒットし、Ceph メタデータサーバーがクラッシュしました。
今回の修正により、アサーションは、ルックアップとリンク解除操作の同時実行中に仮定が有効な関連する場所に移動され、クラッシュすることなく Ceph クライアント操作を提供する Ceph メタデータサーバーが継続されます。
レプリカ MDS が作成された直後にクライアントが getattr クライアント要求を送信した場合、レプリカ MDS が停止することはなくなりました
以前は、レプリカ MDS の作成直後にクライアントが getattr クライアントリクエストを送信した場合、CInode
がまだリンクされていないため、クライアントは #INODE-NUMBER
のパスを作成していました。レプリカ MDS は、認証 MDS が mdlog
をフラッシュし、最大 5 秒後に C_MDS_openc_finish
および link_primary_inode
が呼び出されるまで、再試行を続けます。
今回の修正により、レプリカ MDS が認証 MDS から CInode
を見つけようとすると、見つからない場合は手動で mdslog flush
がトリガーされます。
ユーザーが作成した Ceph File System サブボリュームグループは、サブボリュームグループを一覧表示するときに表示されるようになりました
以前は、Ceph ファイルシステム (CephFS) サブボリュームグループのリストには、ユーザーが作成した CephFS サブボリュームグループではなく、CephFS 内部グループが含まれていました。
今回の修正により、内部グループは CephFS サブボリュームグループリストからフィルタリングされます。その結果、ユーザーが作成した CephFS サブボリュームグループが表示されるようになりました。
保存されたスナップスケジュールは Ceph Storage から再ロードされます。
以前のリリースでは、Ceph Manager を再起動すると、保存ポリシーの仕様が Ceph Storage に保存されなかったため、失われていました。その結果、保持が機能しなくなります。
今回の修正により、スナップスケジュールに対するすべての変更が Ceph Storage に保持されるようになり、Ceph Manager が再起動されると、保存されたスナップスケジュールが Ceph Storage から再ロードされ、指定された保持ポリシー仕様で再起動されます。
(BZ#2061697)
RADOS オブジェクトを削除するための API が更新されました。
以前のリリースは、RADOS オブジェクトを削除するとプログラムがクラッシュし、ログにトレースバックが作成されていました。
今回の修正により、アップグレード後に RADOS オブジェクトが正しく削除されるように API が更新され、スタックトレースがログにダンプされなくなりました。
MDS は破損したすべての dentry を保存するようになりました。
以前は、メタデータサーバー (MDS) は、dirfrag
に dentry の破損がない場合にのみ、その dirfrag
の dentry を保存していました。その結果、最初に破損した dentry のみが破損テーブルに保存され、dirfrag
内のその後の破損は記憶されません。
今回の修正により、MDS は破損したすべての dentry を適切に保存できるようになりました。
ceph-mds
デーモンがアップグレード中にクラッシュしなくなりました。
以前のリリースは、inode のリカバリー時にメタデータサーバーでの想定が間違っていることが原因で、Ceph メタデータサーバーデーモン (ceph-mds
) がアップグレード中にクラッシュしていました。これにより、アップグレード中に ceph-mds が
アサートに達しました。
今回の修正により、ceph-mds
は inode のリカバリー中に正しい仮定を行うようになり、アップグレード中に ceph-mds
がクラッシュしなくなります。
(BZ#2061697)
standby-replay メタデータサーバーデーモンが予期せず削除されることがなくなりました
これまで Ceph Monitor は、特定の条件下で MDS マップから standby-replay メタデータサーバー (MDS) デーモンを削除していました。これにより、standby-replay MDS デーモンが Metadata Server クラスターから削除され、クラスター警告が生成されていました。
今回の修正により、MDS マップからの MDS デーモンの削除を検討する際に Ceph Monitor で使用されるロジックに、ランクを保持している standby-replay MDS デーモンに関する情報が含まれるようになりました。その結果、standby-replay MDS デーモンが予期せず MDS クラスターから削除されることがなくなります。
subvolume snapshot info
コマンドの出力に size
フィールドがなくなりました。
以前のリリースは、subvolume snapshot
コマンドの出力では、誤ったスナップショット size
が返されていました。これは、snapshot info
コマンドが、rstats
に依存して、スナップショットサイズを追跡していることが原因でした。rstats
はスナップショット自体ではなく、対応するサブボリュームからスナップショットのサイズを追跡します。
今回の修正により、rstats
が修正されるまで snapshot info
コマンドの出力から size
フィールドが削除されます。
ディスクがいっぱいのシナリオで設定ファイルが破損しなくなりました。
以前のリリースでは、設定ファイルは一時ファイルを使用せずにディスクに直接書き込まれていました。これには、既存の設定ファイルで内容を省略して設定データを書き込む必要がありました。これにより、ディスクがいっぱいになると切り捨ては成功しましたが、新しい設定データの書き込みは no space
エラーで失敗し、空の設定ファイルが生成されました。さらに、対応するサブボリュームに対する操作が失敗することになりました。
今回の修正により、設定データは一時設定ファイルに書き込まれ、元の設定ファイルに名前が変更されるため、元の設定ファイルの内容が切り捨てられることがなくなります。
不明なメッセージがある場合に MDS が中断されません。
以前のリリースでは、メタデータサーバー (MDS) は、理解できないメッセージを受信すると異常終了していました。その結果、悪意のあるクライアントは、新しいタイプのメッセージをサーバーに送信するだけでサーバーをクラッシュさせる可能性があります。これは、悪意のあるクライアントに加えて、新しいクライアントがサーバーに新しいメッセージを誤って送信するなど、プロトコルの問題が発生すると、新しいクライアントだけでなくシステム全体がクラッシュしていました。
今回の修正により、MDS はクライアントから不明なリクエストを受信した場合でも中断されなくなり、代わりにセッションを終了して、ブロックリストに登録し、クライアントを削除します。これにより、悪意のあるクライアントからのサービス拒否などの意図的な攻撃から MDS とシステム全体が保護されます。
NFS クライアントからのディレクトリーリスト表示が、NFS-Ganesha エクスポートで期待どおりに機能するようになりました。
以前のリリースでは、Ceph File System (CephFS) メタデータサーバー (MDS) は、ディレクトリー inode の ctime
のみを変更する CephFS 操作中にディレクトリー inode の変更属性 (change_attr
) がインクリメントされませんでした。そのため、NFS カーネルクライアントは、readdir
キャッシュを無効する必要があるにも拘らず、無効にしません。これは、CephFS によってサポートされる NFS Ganesha サーバーが、ディレクトリーinode の変更属性値を誤って報告する場合があるためです。その結果、NFS クライアントは、CephFS によってバックアップされた NFS Ganesha エクスポートの古いディレクトリーの内容をリストします。
今回の修正により、CephFS MDS は操作中にディレクトリー inode の変更属性をインクリメントするようになり、NFS クライアントからのディレクトリーリストが CephFS をサポートする NFS Ganesha サーバーエクスポートに対して想定どおりに機能するようになりました。
CephFS は正しいディレクトリーにアクセスできるようになりました。
以前のリリースは、不適切な任意アクセス制御 (DAC) 管理により、UID が 0
であってもディレクトリーアクセスが拒否されていました。
今回の修正により、ディレクトリーユーザー、グループ、その他の実際の権限が UID 0
に対して許可されていない場合でも、UID 0
へのディレクトリーアクセスが許可されるようになりました。これにより、スーパーユーザー権限が効果的に付与され、UID 0 へのディレクトリーアクセスに対する Ceph File System (CephFS) の動作が正しく行われるようになります。