私のGFSクラスタでは、次のものを使用します。CDPN/dev/log
別のクラスタノードに別のchrootディレクトリを持つ機能:
/ホーム/ftpuser/foo: lrwxrwxrwx 1 root root 2010年9月26日18日dev - > .sys/@hostname/dev /home/ftpuser/foo/.sys: drwx--x--x 3 ルート ルート 3864 2010 年 9 月 26 日 server1.example.com drwx--x--x 3 ルート ルート 3864 2010 年 9 月 26 日 server2.example.com drwx--x--x 3 root3864 2010年9月26日 server3.example.com /home/ftpuser/foo/.sys/server2.example.com: drwx--x--x 2ルートルート3864 9月25日09時34分開発 /home/ftpuser/foo/.sys/server2.example.com/dev: srw-rw-rw- 1 root root 0 9月25日09:23 ログ /home/ftpuser/foo/dev: (ノード名に基づいて1つのサブディレクトリを透過的に選択します) srw-rw-rw- 1 root root 0 9月25日09:23 ログ
各ノードのrsyslogデーモンが互いに干渉しないようにこれを使用します。@hostname
パスの内容がそれを解釈したホストのホスト名に変更されるため、機能するため、ホストごとに異なるディレクトリがあります。クラスタはすべてのノードで同時にアクティブになります。
私の質問:
- NFS共有からその機能を取得する方法はありますか?
- 理論的には、すべてのファイルシステムのLinuxカーネルに実装できますか(マウントオプションでデフォルトで問題が発生しないように)。
この質問は次の質問に似ていますが、同じではありません。名前は同じですが、ホストによって内容が異なるNFSファイル
答え1
NFSにはCDPNが存在しないと思いますが、基本的なツールを使用するとほぼ同じ機能を実現できます。制限は、すべてのノード固有のファイルを同じ場所に配置する必要があります(または少なくとも場所のリストを維持する必要があります)、目的の@hostname
場所でこの機能を使用できないことです。
同じ場所にあるすべてのノードにローカルファイルシステムをマウントします(例:)/local
。そのファイルシステムでは、ターゲットがノードごとに異なり、リモートファイルシステムのノード固有の領域を指すシンボリックリンクを作成します。ローカルストレージは必要なく、シンボリックリンクのみを保存するだけで、メモリ内のファイルシステムになり、オーバーヘッドが最小限に抑えられます。
mount -t tmpfs -o noexec,nodev,nosuid,mode=755,nr_inodes=2,nr_blocks=2 local-redirect /local
ln -s "/nfs/.sys/$HOSTNAME" /local/storage
あなたの例で/local/storage
使用する場所を使用してください。.sys/@hostname
他のLinux関連のアプローチは、各ノードでバインドマウントを実行することです。共有ファイルシステムに空のディレクトリを置き、@hostname
NFSファイルシステムをマウントしてから、ここにバインドマウントします。
mount --bind "/.nfs/sys/$HOSTNAME" /nfs/.sys/@hostname