ホームページ  >  記事  >  運用・保守  >  nginxの負荷分散の実装方法は何ですか?

nginxの負荷分散の実装方法は何ですか?

青灯夜游
青灯夜游オリジナル
2019-06-17 17:12:553475ブラウズ

サーバー クラスターでは、Nginx はプロキシ サーバー (リバース プロキシ) の役割を果たし、単一サーバーへの過度の負荷を避けるために、ユーザーからのリクエストを別のサーバーに転送します。負荷分散は、「アップストリーム」モジュールによって定義されたバックエンド サーバー リストからユーザー リクエストを受け入れるサーバーを選択するために使用されます。

nginxの負荷分散の実装方法は何ですか?

負荷分散のいくつかの一般的な方法

1. ポーリング (デフォルト)

各リクエストバックエンドサーバーがダウンした場合は、バックエンドサーバーを時系列順に 1 台ずつ自動的に削除できます。

upstream backserver {
    server 192.168.0.14;
    server 192.168.0.15;
}

2,weight

ポーリング確率を指定します。重みはアクセス率に比例し、バックエンドサーバーのパフォーマンスが不均一な場合に使用されます。

upstream backserver {
    server 192.168.0.14 weight=3;
    server 192.168.0.15 weight=7;
}

重みが大きいほどアクセスされる確率が高くなり、上記の例のようにそれぞれ30%、70%となります。

3. ip_hash

上記の方法の問題の 1 つは、負荷分散システムにおいて、ユーザーが特定のサーバーにログインした場合、ユーザーが 2 番目のリクエストを行うときに、は負荷分散システムです。各リクエストは特定のサーバー クラスターにリダイレクトされます。サーバーにログインしているユーザーが別のサーバーにリダイレクトされると、そのログイン情報が失われます。これは明らかに不適切です。

この問題を解決するには、ip_hash 命令を使用できます。顧客がすでに特定のサーバーにアクセスしている場合、ユーザーが再度アクセスすると、リクエストはハッシュ アルゴリズムを通じて自動的にサーバーに配置されます。

各リクエストはアクセス IP のハッシュ結果に従って割り当てられるため、各訪問者はバックエンド サーバーに固定的にアクセスできるため、セッションの問題を解決できます。

upstream backserver {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}

4. 公正 (サードパーティ)

リクエストはバックエンド サーバーの応答時間に応じて割り当てられ、応答時間の短いリクエストが最初に割り当てられます。

upstream backserver {
    server server1;
    server server2;
    fair;
}

5. url_hash (サードパーティ)

アクセスした URL のハッシュ結果に応じてリクエストを振り分け、各 URL が同じバックエンドサーバーに振り分けられるようにするとより効果的ですバックエンドサーバーがキャッシュされている場合。

upstream backserver {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
}

各デバイスのステータスは次のように設定されます:

1)、ダウンは、シングルの前のサーバーが一時的に負荷に参加していないことを意味します

2)の場合、重みのデフォルトは 1 です。重みが超過します。値が大きいほど、負荷の重さが大きくなります。

3), max_fails: 許可されるリクエスト失敗の数は、デフォルトでは 1 です。最大数を超えると、proxy_next_upstream モジュールによって定義されたエラーが返されます。

4)、fail_timeout: 後max_fails の失敗、時間。

5)、バックアップ: 他のすべての非バックアップ マシンがダウンしているかビジー状態の場合、バックアップ マシンを要求します。したがって、このマシンの圧力は最も少なくなります。

設定例:

#user  nobody;
worker_processes  4;
events {
    # 最大并发数
    worker_connections  1024;
}
http{
    # 待选服务器列表
    upstream myproject{
        # ip_hash指令,将同一用户引入同一服务器。
        ip_hash;
        server 125.219.42.4 fail_timeout=60s;
        server 172.31.2.183;
        }
    server{
                # 监听端口
                listen 80;
                # 根目录下
                location / {
                    # 选择哪个服务器列表
                    proxy_pass http://myproject;
                }
            }
}

以上がnginxの負荷分散の実装方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。