ホームページ  >  記事  >  バックエンド開発  >  Nginx が負荷分散を実現するためのいくつかの方法

Nginx が負荷分散を実現するためのいくつかの方法

小云云
小云云オリジナル
2018-03-05 11:12:033222ブラウズ

負荷分散とは

サーバーの単位時間当たりのアクセス数が増えるほど、サーバーへの負荷が大きくなり、サーバー自体の容量を超えるとサーバーが崩壊します。サーバーのクラッシュを回避し、ユーザーにより良いエクスペリエンスを提供するために、負荷分散を使用してサーバーの負荷を分散します。

サーバー クラスターを形成するために非常に多くのサーバーを構築できます。ユーザーが Web サイトにアクセスすると、最初に中間サーバーにアクセスし、次に中間サーバーにサーバー クラスター内で負荷の少ないサーバーを選択させます。サーバーへのアクセス要求。このようにして、ユーザーがアクセスするたびに、サーバー クラスター内の各サーバーの負荷がバランスよく保たれるようになり、サーバーの負荷が分散され、サーバーのクラッシュが回避されます。

負荷分散は、リバース プロキシの原理を使用して実装されます。

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

1. ポーリング (デフォルト)
各リクエスト は時系列に 1 つずつ異なるバックエンド サーバーに割り当てられます バックエンド サーバーがダウンした場合、自動的に割り当てられます。排除された。

upstream backserver {    server 192.168.0.14;    server 192.168.0.15;
}

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

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

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

3. 負荷分散システムでは、ユーザーが特定のサーバーにログインすると、負荷分散システムであるため、ユーザーが 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.down は、前のサーバーが一時的に負荷に参加しないことを意味します
2.weight デフォルトは 1 です。重みが大きいほど、負荷の重みが大きくなります。
3.max_fails: 許可されるリクエストの失敗回数はデフォルトで 1 回です。最大回数を超えると、proxy_next_upstream モジュール定義エラー <code style="font-size:14px;line-height:22px;">max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误 
4.fail_timeout:max_fails4.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 リバースプロキシと負荷分散の実践

nginx 4 層負荷分散設定

Nginx 負荷分散の詳細な説明

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

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