[PHP-users 14269] Re: Fwd: phpでクラスタリング??

Y.Watanabe php-users@php.gr.jp
2003年 3月 25日 (火) 05:53:44 JST


わたなべです。

"Kumakura Yodai" wrote on 2003/03/25 14:10
with Subject: [PHP-users 14260] Fwd:  phpでクラスタリング??
>2台のサーバーは同時に両方稼動していて
>インターネットからやってくる人はまずロードバランサーでこの2台の
>どちらかのサーバーに接続します。
>そこで2台のサーバー間できちんと同期が取れて、
>どちらか一つのサーバーがダウンしても、
>sessionIdなどを引き継いで欲しいということです。

セッション情報を保存しているファイルを保存するディレクトリ
(php.iniで言うと sessin.save_path の値)
を、NFS等で共有できるディレクトリにしてしまえばよい
ということになります。

デフォルトではセッション情報は Webサーバの /tmp 配下に
1セッション=1ファイルの形で蓄積されます。

つまり
  
  ┌───────┐ ┌───────┐
  │ Web Server01 │ │ Web Server 02│
  │  /tmp        │ │    /tmp      │
  └───────┘ └───────┘

上記だと当然二つのサーバ間でセッションを共有することはできません。

  ┌───────┐ ┌───────┐
  │ Web Server01 │ │ Web Server 02│
  │  /sess       │ │    /sess     │
  └─────┬─┘ └─┬─────┘
              │         │
          ┌─┴─ ───┴┐
          │  NFS Server   │
          │/sessionfiles  │
          └────── ─┘

上記のようにNFSサーバーを新たに仕立て、その中に
セッションファイル保存用のディレクトリを一つ掘ります。
あとは server01,02において特定のディレクトリ(ここでは/sess)
がNFSサーバの/sessionfilesディレクトリにアクセスされるように
NFSのマウント設定するだけです。
当然server01,02のphp.iniのsession_save_pathも/sessにセットします。

こうしておけば、server01がダウンしたとしても、
セッション情報の取り扱いに影響を出すことなく
server02でサービスを継続させることができるでしょう。

「データベースを利用する方法もあると聞いたが・・・」という話は、
上の図でいうところのNFSサーバをDBサーバに置き換えたケースと
考えればいいでしょう。

もちろんNFSサーバがダウンしたら全てがダウンすることに
なりますが、それはデータベースでセッションを管理する場合でも
同じことです。



##### 蛇足 #####

メーリングリストにおいて自分が幸せになれそうな情報を
集めることができず悩んでいる場合には、
えてして下記を読むことが有効である場合があります ↓

真・技術系メーリングリスト FAQ
http://www.geocities.co.jp/SiliconValley/5656/

Q:メーリングリストで発言をしていたら「スレッドが切れる」とお叱りの
メールを多数頂きました。私にはスレッドが切れただけで、そんなに迷惑
だとは思えないのですが。 (New! 2002.12.01) 
http://www.geocities.co.jp/SiliconValley/5656/#20021201-01







PHP-users メーリングリストの案内