1台のWebサーバーのセットアップから2台のWebサーバーのセットアップに移行しているため、2つの負荷分散マシン間でPHPセッションの共有を開始する必要があります。すでにmemcachedがインストールされており(開始されているため)、php.ini
ファイル内の3行のみ(session.save_handlerおよびsession.save_path)を変更するだけで、新しいサーバー間でセッションを共有できることに驚きました。
私は置き換えました:
session.save_handler = files
で:
session.save_handler = memcache
次に、マスターWebサーバーでsession.save_path
localhostを指すように設定します。
session.save_path="tcp://localhost:11211"
スレーブWebサーバーではsession.save_path
、マスターを指すように設定します。
session.save_path="tcp://192.168.0.1:11211"
仕事は終わった、私はそれをテストし、それは動作します。しかし...
明らかにmemcacheを使用するということは、セッションがRAMにあり、マシンがリブートされるかmemcacheデーモンがクラッシュすると失われることを意味します-これには少し懸念がありますが、2つのWebサーバー間のネットワークトラフィックを特に心配しています(特になぜなら、誰かがスレーブWebサーバーに負荷分散されると、そのセッションはマスターWebサーバーからネットワークを介してフェッチされるからです。save_paths
ネットワークを使用する前にマシンが独自のセッションストレージを検索するように2つ定義できるかどうか疑問に思っていました。例えば:
マスター:
session.save_path="tcp://localhost:11211, tcp://192.168.0.2:11211"
スレーブ:
session.save_path="tcp://localhost:11211, tcp://192.168.0.1:11211"
これにより、サーバー間でセッションが正常に共有され、パフォーマンスが向上しますか?つまり、ネットワークトラフィックを50%節約します。または、この手法はフェイルオーバー専用です(たとえば、1つのmemcacheデーモンに到達できない場合)。
注:memcacheの複製について具体的に尋ねているわけではありません-PHP memcacheクライアントがプール内の各memcacheデーモン内でピークに達し、見つかった場合はセッションを返し、見つからない場合のみ新しいセッションを作成できるかどうかすべての店で。私がこれを書いているとき、私はPHPに少し質問していると思っています、笑...
想定:スティッキーセッションなし、ラウンドロビンロードバランシング、LAMPサーバー。