[PHP-users 30566] Re: セッションを NFS 経由で共有してみました。
Shu Sawada
luna @ lunanet.gr.jp
2006年 10月 20日 (金) 03:04:56 JST
さわだです。こんばんわ。
> セッションって、同時に一つのデータを更新かけるような物でも無いかなと
> 思い、無手順でRPMのPHP+NFSで使ってた時期がありました。。。
> 特に問題も起こらなかった気がします。
なるほど、気にしすぎですかね ^^;
「実際困る?」と問われると、「だって気持ち悪い」としか答えられないんですが(苦笑
簡単に排他制御できれば、それが一番すっきりです。
#複数の計算機で共有したいというニーズ自体は、そんなにレアじゃないと思うので
> ちなみに、nfslockdってこんな時に便利なものだったりしないのでしょうか?
これ、今まであまり気にしたことが無かったんですが、
(僕はただのぺちぱーなので、あまり突っ込んだこと知らないですorz)
http://www.linux.or.jp/JM/html/nfs-utils/man8/lockd.8.html
> rpc.lockd プログラムはカーネルが NFS lock manager (NLM) を自動的に起動しない
> ような場合に NLM を起動する。しかし多くのカーネルは NLM を自動的に起動するので、
> 通常 rpc.lockd は必要ない。ただし実行しても害はない。
ということで、裏方として勝手に暗躍してくれているのだと思います。
前回はこの辺気にしていなかったので、もう一度試してみました。
NFSサーバの状態
731 ? S 0:00 portmap
760 ? S 0:00 rpc.statd
2184 ? SW 0:00 [nfsd]
2186 ? SW 0:00 [nfsd]
2185 ? SW 0:00 [lockd]
2187 ? SW 0:00 [rpciod]
2188 ? SW 0:00 [nfsd]
:
2193 ? SW 0:00 [nfsd]
2200 ? S 0:00 rpc.mountd
webサーバ1,2の状態
1366 ? S 0:00 portmap
1395 ? S 0:00 rpc.statd
1400 ? SW 0:00 [rpciod]
1401 ? SW 0:00 [lockd]
192.168.227.114:/tmp/nfstest on /mnt type nfs (rw,addr=192.168.227.114)
#OSは全てVine3.2です。
という状態で、
- 素のphp4.4.4では、セッションの排他処理はうまいこと動いてくれない
(flock()が効いていない)
- flock()をphp_flock() (=fcntl())に変えると、排他処理はうまく動く
というのが確認できた事実です。
nfslockdはあまり関係なさげなのかな、という気がします。
manがこう言っているので、
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/flock.2.html
> flock(2) は NFS 上のファイルのロックをしない。代わりに fcntl(2) を使用すること。
> これにより、十分に新しいバージョンの Linux と、ロック機能をサポートした
> NFS サーバを使用することにより、NFS 上でロックができる。
そんなに間違ったことをしてはいないんじゃないか、と思っているんですが、
僕のような似非にはわかんないです。何せLinux Cなんて書いたことが…。
FreeBSDあたりで試してみて、問題なく動くようなら英語圏の人に
「なんでflockなの?」って訊いてみたら、誰か教えてくれるかなぁ、、、
#プリプロセッサの分岐条件は HAVE_FCNTL を使った方がいいのかな
--
Shu Sawada
http://luna.lunanet.gr.jp/
http://www.cycleof5th.com/
PHP-users メーリングリストの案内