4

2 つの Web サーバーと、リバース プロキシまたはロード バランサーとして使用するための 1 つのサーバーがあります。2 つの Web サーバーには、実際の / パブリック IP とロード バランサーがあります。Web アプリケーションに最適なオプションを決定していないため、ロード バランサ サーバーはまだ構成されていません。「単一障害点」のため、1 つのロード バランサーが危険であることは承知していますが、それを使用したいと考えています。

2 つの Web サーバーには、同じドメインと異なるサブドメインを持つ複数の PHP アプリケーション/仮想ホスト (Apache + fastcgi) が含まれています。それらはすべてセッション、Cookie を使用し、一部は SSL を必要とします。私の主な目標は、着信接続を純粋に半分に分割し、それらを 2 つの Web ノードに転送することです。また、1 つの Web ノードがオフラインになった場合、もう 1 つの Web ノードはすべての接続を受け入れる必要があります。また、必要に応じて、memcache を使用してセッションを共有できると思います。

Nginx、HaProxy、およびネット上で見つけられるその他のアプリケーションについて読みました。しかし、次の理由で決定できません。

1) ロード バランサーとして使用できるサーバーが 1 台ありますが、ネット上で見つけたすべての構成には 2 つのロード バランサー ノードが必要です。2) SSL 証明書を (ロード バランサーまたは Web ノードの) どこにインストールすればよいか、また HTTPS 接続を使用する場合に最適なソリューションがわかりません。

ヘルプ/アイデアが必要です。どうもありがとう。

4

4 に答える 4

4

同様の設定で HAProxy を使用したことがありますが、強くお勧めします。単一のサーバーで非常にうまく実行でき、高可用性が必要な場合に負荷分散に必要なサーバーは 2 つだけです。

このような多くのチュートリアルがあり、目的の構成でセットアップする方法について詳細に説明されています。

于 2011-06-30T15:29:55.403 に答える
1

昨日、ロードバランサーとしてNGINXサーバーを使用する構成を作成しました。その背後には、2つのPHP-FPMサーバー、1つのMemcacheサーバー、1つのMySQLサーバーがあります。NGINXはアップストリーム機能を使用して構成され、関連する構成行は次のようになります。

html {

    ...

    # loadbalancing        
    upstream myLoadBalancer {
        ip_hash; # makes sure same user uses the same server, not 100% effective - application
                 # should handle this; in my case 1 Memcached and 1 MySQL servers commonly used
                 # by all App-servers work just fine. I store sessions in Memcache, so Session 
                 # management isn't a problem at all. Its shared across all App-servers.
        server 192.168.1.10:9000; # location of my first php-fpm server
        server 192.168.1.11:9000; # second php-fpm server
        # server aaa.bbb.ccc.ddd:80; # let's say, an Apache server
    }

    #vhost
    server {
        listen 80;
        server_name mydomain.com;
        index index.php;

        location ~* \.php$ {
            gzip on;
            try_files $uri =404;
            include fastcgi_params;
            fastcgi_pass myLoadBalancer;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /path/to/webdir$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
        }
    }
}

HTTPS:私が間違っていない場合は、NGINXロードバランサーにインストールする必要があります-自分で試したことはありません。クライアントリクエストがApp-serverに渡されると、クライアントリクエストはそれを処理し、リクエストをフェッチしてNGINXに送り返します。また、NGINXは、応答をクライアントに中継する前に、コンテンツを暗号化します。もちろんその理論。しかし、私は100%ポジティブです。NGINXはSSLを非常に簡単に処理できます。さまざまなCLIのFASTCGI機能と組み合わせると、最も高速で堅牢なプロキシ/バランサーであり、優れたWebサーバーです。

注:これは実稼働環境の構成ではなく、テストケースのシナリオです。実稼働環境では、非常に安全な設定が必要になります。次のリソースが役立つ可能性があります。

于 2011-07-12T03:05:13.943 に答える
0

1 つの HAProxy ノードだけで必要なことを行うことができます (ただし、これには単一障害点が残ります)。

HAProxy を Rackspace Cloud にインストールするためのチュートリアルを作成しました。これは、任意の Ubuntu セットアップに適応できます。このオプションを使用すると、cookieセッションの永続性を強制することもできるため、ボックス間でセッションを共有する必要はありません。ユーザーは、セッションの途中で使用しているボックスがダウンした場合にのみセッションを失います。

HAProxy を介して標準の HTTP トラフィックを分散したら、mode tcpオプションを使用して SSL を送信することもできます。これはリクエストに Cookie を挿入できないため、 のbalanceモードを使用してくださいsource。これはユーザーの IP に基づいて調整されるため、ノードを追加しない限り、セッション中に変更されることはありません。

HAProxy は TCP トラフィックのバランスを取るだけなので、SSL 証明書は両方の Web ノードにインストールされます。ちなみに、このバランス モードは、真の高可用性ソリューションの MySQL 接続を含め、TCP を介したあらゆるもので使用できます。

于 2011-08-02T12:31:27.370 に答える
0

複数の Web サーバーに対して HTTPS が必要な場合、理想的な解決策は、Web サーバーの前に Nginx をインストールすることです。負荷分散にも使用できますが、より複雑な構成オプションが必要な場合は、Nginx リクエストを HAProxy インスタンスに転送することをお勧めします。どちらのサービスも最小限のリソースを使用するため、両方の実行について心配する必要はありません。

サーバーを 3 つしか持たず、冗長なロードバランサーを必要としないという考えはよく知っています。私は実際に、アーキテクチャのスケーリングに関する eBook を書きました。その中には、2、3、4 台のサーバーと 1 台のロード バランサーのみの例がいくつか含まれています。より多くの情報を提供し、始めるのに役立つかもしれません。

于 2011-07-24T20:46:07.063 に答える