PHP クラスターセッション共有

WBOY
リリース: 2016-06-20 12:28:23
オリジナル
1070 人が閲覧しました

著作権声明: この記事は Jiyi からの転載です

元のアドレス: http://www.onmpw.com/tm/xwzj/network_144.html

再版が必要な場合は、Tingyun College チームのメンバーである Ruan Xiaoyi まで電子メールでご連絡ください: ruanqy#tingyun.com

クラスターの概念は複雑ではありません。実際、クラスターは複数のコンピューターが連携して動作するものです。同じ目標のために。 Web アプリケーションでは、複数のサーバーが 1 つのサイトに対してサービスを提供します。

PHP クラスターを構築する最初のステップは、負荷分散を設定することです。まず、3 つのホストが必要です:

Nginx负载:192.166.5.111PHP应用1:192.168.5.112PHP应用2:192.168.5.113
ログイン後にコピー

以前は、PHP アプリケーションが配置されているホストに、Nginx や Apache などの Web サーバーをインストールし、Nginx を使用する必要がありました。負荷として。 Nginx ロードと PHP アプリケーションの間の通信は、Nginx ロードは実際にはプロキシに相当します。しかし、現在は状況が異なります。 Fastcgi テクノロジーを適用すると、PHP アプリケーション層に Web サーバーをインストールする必要がなくなります。 PHP5.5バージョンでは内部モジュールとしてfpmをサポートするようになりました。この場合、Nginx ロードと PHP アプリケーション間の通信はトランスポート層で行われ、この 2 つの間の通信にはソケットが使用されます。もちろん、これには fpm サービスのサポートが必要です。

Nginx の設定

まず Nginx (192.168.5.111) をセットアップし、nginx.conf 設定ファイルを編集します

http{         ……         upstream onmpw_phpApps{            server 192.168.18.88:9000;            server 192.168.18.191:9000;        }        ……       Server{         listen        80;         server_name   load.onmpw.com   ##这里是域名         root           /www/onmpw                  ……         location ~ \.php$ {                   root         /www/onmpw   ##这里是PHP应用所在目录                   fastcgi_pass   onmpw_phpApps;                   ……         }      }}
ログイン後にコピー

上記はNginxの設定を行いました。主要な部分のみが含まれており、残りは通常 Nginx + PHP を Web サービスとして使用するときに行う設定と同じです。

PHP が配置されているホストの設定

ここでの設定は比較的簡単です。

最初に php-fpm.conf ファイルを編集し、リスニング IP とポートを変更してから、fpm サービスを開始します

ホスト 192.168.5.112

Listen = 192.168.5.112:9000   //这里的端口可以自行设置。保存退出# /usr/local/php/sbin/php-fpm   //开启服务
ログイン後にコピー

ホスト 192.168 .5.113

Listen = 192.168.5.113:9000# /usr/local/php/sbin/php-fpm
ログイン後にコピー

これでPHPホストの設定は完了です。もちろん、コードは 2 つのホストのそれぞれにアップロードする必要があります。

上記の設定の後、基本的な PHP クラスターがセットアップされました。ただし、この場合、静的リソースにアクセスするだけ、または対話しない場合には問題はありません。対話が必要な場合は、セッション共有の問題が伴います。デフォルトでは、PHP はセッションをローカル ディスクに保存します。では、これら 2 つのホスト間でセッションを共有するにはどうすればよいでしょうか? 次に、この問題を解決します。

PHP ホスト間のセッション共有

以前にオンラインで解決策を見たことがあります。 PHP はセッションをファイルに保存するため、Nginx ロード ホスト上に分散ファイル システム (NFS) を構築して、両方の PHP ホストのセッションがこのファイル システムに保存されるようにすることができます。これはセッションを共有する目的を達成するために使用されます。

個人的にはセッションをデータベースに保存することを好みます。そこで今回紹介するのは、セッションをredisに保存するというものです。したがって、Redis サーバーを追加する必要があります

Redis服务器:192.168.5.114
ログイン後にコピー

PHP はデフォルトでは Redis での操作をサポートしません。したがって、ここでは、Redis 操作をサポートするためにサードパーティの拡張機能を手動でインストールする必要があります。 PHP で Redis をサポートする方法については、「PHP で Redis を操作する 2 つの方法」を参照してください。

ここで、私たちの PHP はすでに Redis をサポートしていると思います。次のステップは、セッションを Redis に保存することです。方法は 2 つあります。1 つは、PHP 構成ファイル php.ini を直接変更する方法で、もう 1 つはセッション メカニズムを書き換える方法です。

Redis にセッションを保存するには、PHP 構成ファイル php.ini を変更します。

vim を使用して php.ini を開きます。 session.save_handler と session.save_path の 2 つの項目を変更する必要があります。 。

session.save_handler = Redissession.save_path = “tcp://192.168.5.114:6379”//Redis不需要密码验证session.save_path = “tcp://192.168.5.114:6379?auth=password”//Redis 需要密码验证
ログイン後にコピー

変更が完了しました。保存して終了します。次に、php-fpm サービスを再起動します

# kill -INT `cat /usr/local/php/var/run/php-fpm.pid`# /usr/local/php/sbin/php-fpm
ログイン後にコピー

両方の PHP ホストで上記の手順に従います。上記の手順を完了すると、セッションに関するすべての情報が Redis に保存されます。これにより、セッションの共有が可能になります。

セッションメカニズムを書き換えてセッションを Redis に保存します

通常、php.ini ファイルを変更する権限がないことがよくあります。現時点では、セッション メカニズムを書き換えることで、セッション情報のストレージを変更できます。

セッションを書き換えるために、PHP は SessionHandlerInterface インターフェイスを提供しました。このインターフェースを実装するだけです。セッションメカニズムの書き換え方法については、「PHP セッションメカニズムの書き換え」の記事を参照してください。また、セッション メカニズムも自分で書き直しました。このクラスの完全なコードは github にあります。興味がある場合は、ここをクリックしてご覧ください。

概要

PHP クラスターを構築するにはさまざまな方法がありますが、原則は似ています。重要なのは、プロジェクトに最適なオプションを見つけることです。例: セッション保存方法の選択では、memcache または MySQL データベースなどの使用を選択することもできます。要するに、自分に合ったものが一番良いのです。この記事が皆様のお役に立てば幸いです。

さらに技術的な記事を読みたい場合は、Tingyun Technology Blog にアクセスし、Tingyun 公式 Web サイトにアクセスして、アプリケーションのパフォーマンス最適化の魔法をさらに体験してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!