ホームページ >バックエンド開発 >PHPチュートリアル >PHP クラスターセッション共有
著作権声明: この記事は 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 (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-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 はセッションをファイルに保存するため、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 つはセッション メカニズムを書き換える方法です。
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 に保存されます。これにより、セッションの共有が可能になります。
通常、php.ini ファイルを変更する権限がないことがよくあります。現時点では、セッション メカニズムを書き換えることで、セッション情報のストレージを変更できます。
セッションを書き換えるために、PHP は SessionHandlerInterface インターフェイスを提供しました。このインターフェースを実装するだけです。セッションメカニズムの書き換え方法については、「PHP セッションメカニズムの書き換え」の記事を参照してください。また、セッション メカニズムも自分で書き直しました。このクラスの完全なコードは github にあります。興味がある場合は、ここをクリックしてご覧ください。
PHP クラスターを構築するにはさまざまな方法がありますが、原則は似ています。重要なのは、プロジェクトに最適なオプションを見つけることです。例: セッション保存方法の選択では、memcache または MySQL データベースなどの使用を選択することもできます。要するに、自分に合ったものが一番良いのです。この記事が皆様のお役に立てば幸いです。