nginxロードバランシングのセッション共有の問題を解決する
nginx セッションの共有を実現するために、いくつかの情報を確認し、他の人が書いたドキュメントを読みました。要約は次のとおりです。
複数の PHP サーバーがあり、負荷分散に nginx が使用されているため、同じ IP が同じものにアクセスします。サーバー上でセッションが同期されていない場合、最も一般的なログイン ステータスなどの多くの問題が発生します。セッション共有の問題を解決する方法は次のとおりです。
1.代わりに Cookie を使用します
セッション これはサーバー側に保存され、Cookie はクライアント側に保存されます。ユーザーのページへのアクセスによって生成されたセッションを Cookie に入れることができます。つまり、Cookie を乗り換え駅。 Web サーバー A にアクセスし、セッションを生成し、それをサーバー B に割り当てると、サーバー B はまずサーバーにセッションがあるかどうかを判断し、存在しない場合はクライアントの Cookie を確認します。このようなセッションは、実際にはセッションが存在しないことを意味します。Cookie 内にセッションが存在する場合は、Cookie 内のセッションをサーバー B に同期して、セッションを同期できるようにします。
注: この方法は実装が簡単で便利であり、データベースへの負担は増加しません。ただし、クライアントが Cookie を無効にすると、セッションが同期されなくなり、Web サイトのセキュリティが失われます。暗号化されていますが、それでも偽造可能です。
2. セッションをデータベースに保存する (MySQL など)
MySQL の場合、セッションを保存するテーブルをデータベースに保存する方法です。各 mysql ノードにはこのテーブルが必要であり、このセッション テーブルのデータ テーブルはリアルタイムで同期されている必要があります。
注: データベースを使用してセッションを同期すると、データベースの IO が増加し、データベースの負荷が増加します。さらに、データベースの読み取りおよび書き込み速度が遅いため、セッションをタイムリーに同期できません。
3. セッションは memcache または redis に保存されます
memcache は、php 設定ファイルで保存方法が memcache に設定されているため、php 自体がセッション クラスターを確立し、セッション データを memcache に保存します。
注: この方法でセッションを同期すると、データベースの負荷が増加することはなく、Cookie を使用する場合と比較してセキュリティが大幅に向上します。セッションをメモリに保存する方が、ファイルから読み取るよりもはるかに高速です。ただし、memcache はメモリをさまざまな仕様のストレージ ブロックに分割します。この方法では、memcache がメモリを完全に利用できないことが判断され、メモリ ブロックが不足するとメモリ オーバーフローが発生します。
4. nginx の ip_hash テクノロジーは、特定の IP のリクエストを同じバックエンドに送信できるため、この IP の下で特定のクライアントと特定のバックエンドが安定したセッションを確立できます。
- ストリームnginx.example.com {
- サーバー192.168.74.236:80;
- }
- サーバー
- {
- 80 を聞く;
- location /
- proxy_pass
- http://nginx.example.com ;
- .nginx はフロントではありません。エンドサーバー。 ip_hash では、nginx がフロントエンド サーバーである必要があります。そうでない場合、nginx は正しい IP を取得できず、IP に基づいてハッシュできません。たとえば、Squid がフロントエンドとして使用されている場合、nginx は IP を取得するときに Squid のサーバー IP アドレスしか取得できません。このアドレスを配布に使用するのは間違いなく混乱を招きます。 2. nginx のバックエンドには他の負荷分散方法もあります。
-
nginx バックエンドに他のロード バランシングがあり、リクエストが他の方法で転送される場合、特定のクライアントからのリクエストは同じセッション アプリケーション サーバー上に存在しません。このように計算すると、nginx バックエンドはアプリケーション サーバーを直接指すか、Squid を構築してからアプリケーション サーバーを指すことしかできません。最善の方法は、位置情報を迂回として使用し、ip_hash を介したセッションを必要とする一部のリクエストを迂回し、残りは他のバックエンドに移動することです。
5.upstream_hash
ip_hash のいくつかの問題を解決するために、このモジュールはほとんどの場合 url_hash として使用されますが、セッション共有での使用を妨げるものではありません。試したことがないのでよくわかりません補足: memcached の簡単な紹介
1. コンセプト
Memcached は、danga.com (を運営する技術チーム) によって開発された分散メモリ オブジェクト キャッシング システムです。 LiveJournal) を使用し、動的システムで使用されます。 データベースの負荷を軽減し、パフォーマンスを向上させます。
2. 適用される機会
1. memcached 自体は分散システムに基づいているため、大規模な分散システムに特に適しています。
2. データベースのフロントエンド キャッシュ。多くの場合、データベースは Web サイト システムのボトルネックになります。データベースへの大量の同時アクセスにより、Web サイトのメモリがオーバーフローすることがよくあります。もちろん、Hibernate のキャッシュ メカニズムを使用することもできます。ただし、memcached は分散に基づいており、Web サイトのアプリケーション自体から独立させることができるため、大規模な Web サイトがアプリケーションを分割するのにより適しています。
3. サーバー間のデータ共有。たとえば、Web サイトのログイン システムとクエリ システムを 2 つのアプリケーションに分割し、それらを異なるサーバーに配置してクラスタ化します。次に、ユーザーがログインした後、ログイン情報がログイン システム サーバーからクエリ システムにどのように同期されるかを考えます。サーバー?このとき、ログイン システムはログイン情報をキャッシュし、クエリ システムはローカル情報を取得するのと同じようにログイン情報を取得できます。
3. 適用されない場合
逆に、「分散」する必要がない、共有する必要がない、または単純にサーバーが 1 つしかないほど小さいアプリケーションの場合、memcached は何のメリットももたらしません。ネットワーク接続にもリソースが必要なため、システムの効率が低下します
解決策は、memcached をセッション ストレージとして使用し、memcached サーバーを nginx と同じ Linux ホスト上にセットアップすることです。
解決プロセス、
2 つの Apache のホスト IP は 192.168.74.235192.168.74.236 です
Nginx ホスト IP は 192.168.74.131 です
Memcached ホストの IP は 192.168.74.1 です31
192.168 に memcached をインストールします.74.131、そして起動
192.168.74.236を例として、phpとphpの依存関係ライブラリをmemcachedにインストールしますyuminstall memcached-devel.i686 libmemcached-devel.i686 php-pecl-memcache.i686
php.iniを設定します
session.save_handler= memcache
session.save_path= "tcp://192.168.74.131:11211"
または (次の 2 つは試していません)
1. 特定のディレクトリの .htaccess:
php_value session。 save_handler "memcache "
php_value session.save_path "tcp://IP:11211"2. 特定のアプリケーション:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path") , "tcp://IP:11211");同時に次を必ずコメントアウトしてください;session.save_path= "/var/lib/php/session"
同時に拡張機能を開きます=memcache.so
Apacheを再起動し、phpinfoの「登録された保存ハンドラー」を確認します。利用可能な「ファイルusermemcache」がある場合、
Memcachedサーバーの実行と結果
がインストールされていることがわかります。 @Git ~]# memcached-tool127.0.0 .1:11211
# Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM
236 マシンに次の PHP ファイルを追加します
session_start();
if (!isset($_SESSION[' TEST'])) {
$_SESSION['TEST'] = time();
}
$_SESSION['TEST3'] = time();
print $_SESSION['TEST'];
print "
";print $_SESSION['TEST3'];
print "
";print session_id();
?>
次に、memcached サーバーに移動して
[root@Git ~]# memcached-tool127.0.0.1:11211
# Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM
1 80B 0s 1 0 0 no 0 0 0
これにより、セッションを memcached サーバーに書き込むこともできるようになります。
要約すると:
1. ファイアウォールの問題、LAN サーバーへの接続の失敗の多くはファイアウォールが原因です
2. 依存関係がインストールされておらず、php-memcached のような拡張ライブラリをインストールしていないため、memcached は常に最初に失敗します
以上、nginxロードバランシングのセッション共有問題の解決方法を内容も含めて紹介しましたが、PHPチュートリアルに興味のある友人の参考になれば幸いです。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ルートとしてMySQLにログインできない主な理由は、許可の問題、構成ファイルエラー、一貫性のないパスワード、ソケットファイルの問題、またはファイアウォール傍受です。解決策には、構成ファイルのBind-Addressパラメーターが正しく構成されているかどうかを確認します。ルートユーザー許可が変更されているか削除されてリセットされているかを確認します。ケースや特殊文字を含むパスワードが正確であることを確認します。ソケットファイルの許可設定とパスを確認します。ファイアウォールがMySQLサーバーへの接続をブロックすることを確認します。

MySQLがテーブル構造を変更すると、メタデータロックが通常使用され、テーブルがロックされる可能性があります。ロックの影響を減らすために、次の測定値をとることができます。1。オンラインDDLでテーブルを使用できます。 2。バッチで複雑な変更を実行します。 3.小規模またはオフピーク期間中に操作します。 4. PT-OSCツールを使用して、より細かい制御を実現します。

MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

データ統合の簡素化:AmazonrdsmysqlとRedshiftのゼロETL統合効率的なデータ統合は、データ駆動型組織の中心にあります。従来のETL(抽出、変換、負荷)プロセスは、特にデータベース(AmazonrdsmysQlなど)をデータウェアハウス(Redshiftなど)と統合する場合、複雑で時間がかかります。ただし、AWSは、この状況を完全に変えたゼロETL統合ソリューションを提供し、RDSMYSQLからRedshiftへのデータ移行のための簡略化されたほぼリアルタイムソリューションを提供します。この記事では、RDSMysQl Zero ETLのRedshiftとの統合に飛び込み、それがどのように機能するか、それがデータエンジニアと開発者にもたらす利点を説明します。

1.正しいインデックスを使用して、データの量を削減してデータ検索をスピードアップしました。テーブルの列を複数回検索する場合は、その列のインデックスを作成します。あなたまたはあなたのアプリが基準に従って複数の列からのデータが必要な場合、複合インデックス2を作成します2。選択した列のみを避けます。必要な列のすべてを選択すると、より多くのサーバーメモリを使用する場合にのみサーバーが遅くなり、たとえばテーブルにはcreated_atやupdated_atやupdated_atなどの列が含まれます。

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

MySQLはAndroidで直接実行できませんが、次の方法を使用して間接的に実装できます。Androidシステムに構築されたLightWeight Database SQLiteを使用して、別のサーバーを必要とせず、モバイルデバイスアプリケーションに非常に適したリソース使用量が少ない。 MySQLサーバーにリモートで接続し、データの読み取りと書き込みのためにネットワークを介してリモートサーバー上のMySQLデータベースに接続しますが、強力なネットワーク依存関係、セキュリティの問題、サーバーコストなどの短所があります。

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。
