初めてここに投稿するときは、多くの間違いをしないことを願っています。
2つのNFSサーバーを使用してセットアップしました。彼らはcorosync/pacemaker + drbdを使用して、アクティブ/パッシブnfsサーバーを提供しています。使用されるディストリビューションは、Ubuntuの最新のLTSバージョンです。
Clusterは、クライアントが接続するためのフローティングIPも提供しています。ボリュームレプリケーションは正常に機能します。
問題は、フェイルオーバー中にI/O操作が約90秒待機することです。フェイルオーバー後(新しいマシンがすでに新しいマスターとしてプロモートされている場合)、クライアントのtcpdumpは次のようなパケットを表示します。
reply ok 52 getattr ERROR:unk 10013
グーグルでエラー10013とnfsを探して私を このusenet投稿 に導きました
したがって、私のロックはnfsサーバーに保持され、90秒後にのみ解放されます。そのパラメーター(/ procに含まれている)を下げる必要がありますが、試してみると
root@nfs-ha-1:/# ls -l /proc/fs/nfsd/nfsv4gracetime
-rw------- 1 root root 0 Jan 31 11:00 /proc/fs/nfsd/nfsv4gracetime
root@nfs-ha-1:/# cat /proc/fs/nfsd/nfsv4gracetime
90
root@nfs-ha-1:/# echo 1 > /proc/fs/nfsd/nfsv4gracetime
bash: echo: write error: Device or resource busy
root@nfs-ha-1:/#
したがって、この問題に関する詳細情報、またはそのファイルに書き込む方法が必要です。ファイルは、実行時にnfs-serverを使用して作成されます。 nfsserverを停止すると、ディレクトリは単に空になり、書き込むことができなくなります。
root@nfs-ha-1:/proc/fs/nfsd# touch nfsv4gracetime
touch: cannot touch `nfsv4gracetime': No such file or directory
このフォローアップで、何が問題で、どのように解決するかを説明したいと思います。パラメータは特定の瞬間にのみ変更できます。
Nfs-kernelを停止した(モジュールをアンロードした)状態で/ proc/fs/nfsdに書き込もうとすると、ファイルは単に存在しません。 nfs-kernelを起動した後に試行すると、デバイスビジーエラーが発生します。
解決策は、nfs-kernel-serverのinitスクリプトを編集し、モジュールのmodprobeの後にパラメーターを(必要なファイルの通常のエコーを介して)変更することです。
したがって、パラメータを記述する必要がありますbetween do_modprobeおよびdo_mountディレクティブ。
Ubuntu 12.04LTSの/etc/init.d/nfs-kernel-serverからのサンプル
# See how we were called.
case "$1" in
start)
if [ -f /etc/exports ]
then
do_modprobe nfsd
echo 15 > /proc/fs/nfsd/nfsv4leasetime
echo 25 > /proc/fs/nfsd/nfsv4gracetime
# See if our running kernel supports the NFS kernel server
if ! grep -E -qs "[[:space:]]nfsd\$" /proc/filesystems; then
log_warning_msg "Not starting $DESC: no support in current kernel."
exit 0
fi
do_mount nfsd $PROCNFSD_MOUNTPOINT || NEED_SVCGSSD=no