23 クラスタファイルシステム #
この章では、通常はクラスタの設定とCephFSのエクスポート後に実行する管理タスクについて説明します。CephFSの設定の詳細については、8.3.3項 「メタデータサーバの展開」を参照してください。
23.1 CephFSのマウント #
ファイルシステムが作成されてMDSがアクティブになったら、クライアントホストからファイルシステムをマウントできます。
23.1.1 クライアントの準備 #
クライアントホストがSUSE Linux Enterprise 12 SP2以降を実行している場合、システムはCephFSをそのまますぐにマウントできます。
クライアントホストがSUSE Linux Enterprise 12 SP1を実行している場合は、CephFSをマウントする前にすべての最新パッチを適用する必要があります。
いずれの場合も、CephFSをマウントするのに必要なものはすべてSUSE Linux Enterpriseに付属しています。SUSE Enterprise Storage 7.1製品は必要ありません。
完全なmount
構文をサポートするには、CephFSをマウントする前に、ceph-commonパッケージ(SUSE Linux Enterpriseに付属)をインストールする必要があります。
ceph-commonパッケージがない場合(つまり、mount.ceph
ヘルパーがない場合)、モニターのホスト名ではなく、IPアドレスを使用する必要があります。これは、カーネルクライアントがネームレゾリューションを実行できないためです。
基本的な構文は、次の通りです。
#
mount -t ceph MON1_IP[:PORT],MON2_IP[:PORT],...:CEPHFS_MOUNT_TARGET \
MOUNT_POINT -o name=CEPHX_USER_NAME,secret=SECRET_STRING
23.1.2 シークレットファイルの作成 #
Cephクラスタは、デフォルトで認証がオンの状態で動作します。秘密鍵(キーリングそのものではない)を保存するファイルを作成する必要があります。特定のユーザの秘密鍵を入手してファイルを作成するには、次の操作を行います。
キーリングファイル内の特定のユーザの鍵を表示します。
cephuser@adm >
cat /etc/ceph/ceph.client.admin.keyringマウントしたCephFS (Ceph File System)を使用するユーザの鍵をコピーします。通常、鍵は次のような形式です。
AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
ファイル名の部分にユーザ名を使用してファイルを作成します。たとえば、ユーザadminの場合は、
/etc/ceph/admin.secret
のようになります。前の手順で作成したファイルに鍵の値を貼り付けます。
ファイルに適切なアクセス権を設定します。このユーザは、ファイルを読み込める唯一のユーザである必要があります。ほかのユーザは一切アクセス権を持つことはできません。
23.1.3 CephFSのマウント #
mount
コマンドでCephFSをマウントできます。Monitorのホスト名またはIPアドレスを指定する必要があります。SUSE Enterprise Storageではcephx
認証がデフォルトで有効になっているため、ユーザ名とその関連シークレットも指定する必要があります。
#
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
以前のコマンドはシェルの履歴に残るため、ファイルからシークレットを読み込むアプローチの方が安全です。
#
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
シークレットファイルには実際のキーリングシークレットだけが含まれる必要があることに注意してください。この例では、ファイルに含まれるのは次の行だけです。
AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
マウント時に特定のMonitorがダウンしている事態に備え、mount
コマンドラインで複数のMonitorをコンマで区切って指定することをお勧めします。各Monitorのアドレスはhost[:port]
という形式です。ポートを指定しない場合は、デフォルトで6789が使用されます。
ローカルホストでマウントポイントを作成します。
#
mkdir /mnt/cephfs
CephFSをマウントします。
#
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
ファイルシステムのサブセットをマウントする場合は、サブディレクトリsubdir
を指定できます。
#
mount -t ceph ceph_mon1:6789:/subdir /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
mount
コマンドで複数のMonitorホストを指定できます。
#
mount -t ceph ceph_mon1,ceph_mon2,ceph_mon3:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
パス制約付きのクライアントを使用する場合は、MDSのケーパビリティにルートディレクトリに対する読み込みアクセスを含める必要があります。たとえば、キーリングは次のようになります。
client.bar key: supersecretkey caps: [mds] allow rw path=/barjail, allow r path=/ caps: [mon] allow r caps: [osd] allow rwx
allow r path=/
の部分は、パス制約付きのクライアントは、ルートボリュームを表示できても書き込みはできないことを意味します。これは、完全な分離が要件である使用事例で問題になることがあります。
23.2 CephFSのアンマウント #
CephFSをアンマウントするには、umount
コマンドを使用します。
#
umount /mnt/cephfs
23.3 /etc/fstab
でのCephFSのマウント #
クライアントの起動時にCephFSを自動的にマウントするには、対応する行をファイルシステムテーブル/etc/fstab
に挿入します。
mon1:6790,mon2:/subdir /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2
23.4 複数のアクティブMDSデーモン(アクティブ-アクティブMDS) #
CephFSは、デフォルトでは単一のアクティブMDSデーモン用に設定されています。大規模システム用にメタデータのパフォーマンスを拡張する場合、複数のアクティブMDSデーモンを有効にできます。これにより、各デーモンがお互いにメタデータワークロードを共有します。
23.4.1 アクティブ-アクティブMDSの使用 #
デフォルトの単一のMDSではメタデータのパフォーマンスがボトルネックになる場合、複数のアクティブMDSデーモンの使用を検討します。
デーモンを追加しても、すべてのワークロードタイプのパフォーマンスが向上するわけではありません。たとえば、単一のクライアント上で動作している単一のアプリケーションの場合、そのアプリケーションが大量のメタデータ操作を並列で実行していない限り、MDSデーモンの数を増やしてもメリットはありません。
一般的に大量のアクティブMDSデーモンのメリットを受けられるワークロードは、クライアントが複数あり、多数の別個のディレクトリを操作する可能性が高いワークロードです。
23.4.2 MDSのアクティブクラスタサイズの増加 #
各CephFSファイルシステムには、作成するランクの数を制御するmax_mds
設定があります。ファイルシステム内の実際のランク数は、新しいランクを引き受けるスペアデーモンが利用可能な場合にのみ増やされます。たとえば、実行中のMDSデーモンが1つだけで、max_mds
が2に設定されている場合、2番目のランクは作成されません。
次の例では、max_mds
オプションを2に設定して、デフォルトのランクとは別の新しいランクを作成します。変更を確認するには、max_mds
の設定前と設定後にceph status
を実行し、fsmap
が含まれる行を確認します。
cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby [...]cephuser@adm >
ceph
fs set cephfs max_mds 2cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active} [...]
新しく作成されたランク(1)は、「creating (作成中)」状態を経由して「active (アクティブ)」状態になります。
複数のアクティブMDSデーモンを使用していても、高可用性システムには、アクティブデーモンを実行するサーバに障害が発生した場合に処理を引き継ぐスタンバイデーモンも必要です。
そのため、高可用性システムのmax_mds
の実用的な最大数は、システムのMDSサーバの合計数から1を引いた数になります。複数のサーバ障害時に可用性を維持するには、切り抜ける必要があるサーバ障害の数に一致するようにシステムのスタンバイデーモンの数を増やします。
23.4.3 ランク数の減少 #
最初に、すべてのランク(削除するランクを含む)がアクティブになっている必要があります。つまり、少なくともmax_mds
MDSデーモンが利用可能である必要があります。
最初に、max_mds
をより低い数字に設定します。たとえば、単一のアクティブMDSに戻します。
cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active} [...]cephuser@adm >
ceph
fs set cephfs max_mds 1cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby [...]
23.4.4 ランクへのディレクトリツリーの手動固定 #
複数のアクティブメタデータサーバ設定では、バランサが動作し、メタデータの負荷をクラスタに均等に分散します。これは通常、ほとんどのユーザにとって十分有効に機能しますが、メタデータを特定のランクに明示的にマッピングして動的バランサを無効にした方が良い場合もあります。これにより、管理者やユーザは、アプリケーションの負荷を均等に分散したり、ユーザのメタデータ要求によるクラスタ全体への影響を抑えたりできます。
このために提供されているメカニズムを「エクスポートピン」と呼びます。これはディレクトリの拡張属性です。この拡張属性の名前はceph.dir.pin
です。標準のコマンドを使用して、この属性を設定できます。
#
setfattr -n ceph.dir.pin -v 2 /path/to/dir
拡張属性の値(-v
)は、ディレクトリサブツリーの割り当て先となるランクです。デフォルト値-1は、ディレクトリが固定されないことを示します。
ディレクトリのエクスポートピンは、設定されているエクスポートピンを持つ最も近い親から継承されます。したがって、ディレクトリにエクスポートピンを設定すると、そのすべての子に影響します。ただし、子ディレクトリのエクスポートピンを設定して親のピンを上書きできます。例:
#
mkdir -p a/b # "a" and "a/b" start with no export pin set.
setfattr -n ceph.dir.pin -v 1 a/ # "a" and "b" are now pinned to rank 1.
setfattr -n ceph.dir.pin -v 0 a/b # "a/b" is now pinned to rank 0
# and "a/" and the rest of its children
# are still pinned to rank 1.
23.5 フェールオーバーの管理 #
MDSデーモンがMonitorとの通信を停止した場合、そのMonitorはmds_beacon_grace
の秒数(デフォルトは15秒)待機してから、デーモンを「遅延」としてマークします。MDSデーモンのフェールオーバー中に処理を引き継ぐ「スタンバイ」デーモンを1つ以上設定できます。
23.5.1 スタンバイ再生の設定 #
各CephFSファイルシステムはスタンバイ再生デーモンを追加するように設定することもできます。こうしたスタンバイデーモンはアクティブMDSのメタデータジャーナルを追跡して、アクティブMDSが利用不能になるようなイベントが発生した場合のフェールオーバー時間を短縮します。各アクティブMDSに設定できる、追跡用のスタンバイ再生デーモンは一つだけです。
ファイルシステムにスタンバイ再生を設定するには、次のコマンドを使用します。
cephuser@adm >
ceph fs set FS-NAME allow_standby_replay BOOL
設定された場合、モニターは使用可能なスタンバイデーモンをファイルシステムのアクティブMDSを追跡するように割り当てます。
MDSがスタンバイ再生状態になると、そのMDSは追跡しているランクのスタンバイとしてのみ使用されます。別のランクが失敗し、他に利用可能なスタンバイがない場合でも、このスタンバイ再生デーモンは代わりとして使用されません。そのため、スタンバイ再生機能を使用する場合は、すべてのアクティブMDSにスタンバイ再生デーモンを設定することをお勧めします。
23.6 CephFSのクォータの設定 #
Cephファイルシステムの任意のサブディレクトリにクォータを設定できます。クォータは、ディレクトリ階層の指定したポイントの下層に保存される「バイト」または「ファイル」の数を制限します。
23.6.1 CephFSのクォータの制限 #
CephFSでのクォータの使用には、次の制限があります。
- クォータは協調的で非競合
Cephクォータは、ファイルシステムをマウントしているクライアントに依存し、制限に達すると書き込みを停止します。サーバ側では、悪意のあるクライアントが必要なだけデータを書き込むのを防止することはできません。クライアントが完全に信頼されていない環境では、ファイルシステムがいっぱいになるのを防ぐため、クォータを使用しないでください。
- クォータは正確ではない
ファイルシステムへの書き込み中のプロセスは、クォータ制限に達した直後に停止されます。そのため必然的に、設定された制限を超える量のデータを書き込むことができます。クライアントのライタは、設定された制限を超えてから1/10秒以内に停止されます。
- バージョン4.17からクォータはカーネルクライアントに実装される
クォータは、ユーザスペースクライアント(libcephfs、ceph-fuse)によってサポートされます。Linuxカーネルクライアント4.17以降は、SUSE Enterprise Storage 7.1クラスタ上のCephFSクォータをサポートします。カーネルクライアントが最新バージョンであっても、クォータ拡張属性を設定できても、古いクラスタ上のクォータは処理できません。SLE12-SP3以降のカーネルは、クォータの処理に必要なバックポートをすでに備えています。
- パスベースのマウント制限とともに使用する場合はクォータを慎重に設定する
クライアントは、クォータを適用するには、クォータが設定されているディレクトリiノードにアクセスできる必要があります。クライアントがMDSの機能に基づいて特定のパス(たとえば、
/home/user
)へのアクセスを制限されている場合に、そのクライアントがアクセスできない祖先ディレクトリ(/home
)にクォータが設定されているときは、クライアントはクォータを適用しません。パスベースのアクセス制限を使用する場合、クライアントがアクセスできるディレクトリにクォータを設定することを忘れないでください(たとえば、/home/user
や/home/user/quota_dir
)。
23.6.2 CephFSのクォータの設定 #
仮想拡張属性を使用して、CephFSクォータを設定できます。
ceph.quota.max_files
「ファイル」制限を設定します。
ceph.quota.max_bytes
「バイト」制限を設定します。
これらの属性がディレクトリiノード上に存在する場合、そこにクォータが設定されています。存在しない場合は、そのディレクトリにクォータは設定されていません(ただし、親ディレクトリに設定されている場合があります)。
100MBのクォータを設定するには、次のコマンドを実行します。
cephuser@mds >
setfattr -n ceph.quota.max_bytes -v 100000000 /SOME/DIRECTORY
10,000ファイルのクォータを設定するには、次のコマンドを実行します。
cephuser@mds >
setfattr -n ceph.quota.max_files -v 10000 /SOME/DIRECTORY
クォータ設定を表示するには、次のコマンドを実行します。
cephuser@mds >
getfattr -n ceph.quota.max_bytes /SOME/DIRECTORY
cephuser@mds >
getfattr -n ceph.quota.max_files /SOME/DIRECTORY
拡張属性の値が「0」の場合、クォータは設定されません。
クォータを削除するには、次のコマンドを実行します。
cephuser@mds >
setfattr -n ceph.quota.max_bytes -v 0 /SOME/DIRECTORYcephuser@mds >
setfattr -n ceph.quota.max_files -v 0 /SOME/DIRECTORY
23.7 CephFSスナップショットの管理 #
CephFSスナップショットは、スナップショットを作成した時点でのファイルシステムの読み込み専用ビューを作成します。スナップショットは任意のディレクトリに作成できます。スナップショットでは、ファイルシステムの指定ディレクトリの下層にあるすべてのデータが対象になります。スナップショットの作成後、バッファされたデータはさまざまなクライアントから非同期にフラッシュされます。その結果、スナップショットの作成は非常に高速です。
複数のCephFSファイルシステムが(ネームスペースを介して) 1つのプールを共有している場合、それらのスナップショットは競合し、1つのスナップショットを削除すると同じプールを共有している他のスナップショットのファイルデータがなくなります。
23.7.1 スナップショットの作成 #
CephFSスナップショット機能は、新しいファイルシステムではデフォルトで有効になっています。既存のファイルシステムでこの機能を有効にするには、次のコマンドを実行します。
cephuser@adm >
ceph fs set CEPHFS_NAME allow_new_snaps true
スナップショットを有効にすると、CephFSのすべてのディレクトリに特別な.snap
サブディレクトリが作成されます。
これは「仮想」サブディレクトリです。このサブディレクトリは親ディレクトリのディレクトリ一覧には表示されませんが、.snap
という名前はファイル名やディレクトリ名として使用できません。.snap
ディレクトリにアクセスするには、明示的にアクセスする必要があります。たとえば、次のようなコマンドを使用します。
>
ls -la /CEPHFS_MOUNT/.snap/
CephFSカーネルクライアントには、1つのファイルシステム内で400を超えるスナップショットを処理できないという制限があります。スナップショットの数は、使用しているクライアントに関係なく、常にこの制限を下回るようにする必要があります。SLE12-SP3などの古いCephFSクライアントを使用する場合は、スナップショットが400を超えるとクライアントがクラッシュするため、操作に害を及ぼすことに注意してください。
client snapdir
設定により、スナップショットサブディレクトリに異なる名前を設定できます。
スナップショットを作成するには、.snap
ディレクトリに、カスタム名を持つサブディレクトリを作成します。たとえば、/CEPHFS_MOUNT/2/3/
ディレクトリのスナップショットを作成するには、次のコマンドを実行します。
>
mkdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME
23.7.2 スナップショットの削除 #
スナップショットを削除するには、.snap
ディレクトリ内にあるそのサブディレクトリを削除します。
>
rmdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME