負荷分散とは
サーバーの単位時間当たりのアクセス数が増えるほど、サーバーへの負荷が大きくなり、サーバー自体の容量を超えるとサーバーが崩壊します。サーバーのクラッシュを回避し、ユーザーにより良いエクスペリエンスを提供するために、負荷分散を使用してサーバーの負荷を分散します。
サーバー クラスターを形成するために非常に多くのサーバーを構築できます。ユーザーが 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
模块定义的错误
4.fail_timeout:max_fails
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 サイトの他の関連記事を参照してください。