負荷分散とは何ですか
サーバー時間の交通単位大きい場合は、サーバーは、自分の能力を超えるのに十分な大きさの圧力、大きい、サーバがクラッシュします。ユーザーがより良い経験を持ってできるように、サーバーのクラッシュを避けるために、我々は道によって、サーバの負荷分散の圧力を共有する必要があります。
我々は、多くのを構築することができ、ユーザーがサイトを訪れたとき、多くのサーバーでは、サーバークラスタ内の小さい方のサーバーの圧力は、その後、アクセス要求をサーバに導入されるように、途中でサーバーを選択し、中間サーバにアクセスするために、サーバークラスタを形成します。各ユーザのアクセス以来だから、サーバー上の圧力を共有するために、サーバークラスタの圧力内の各サーバはバランスをとる傾向があることを保証します、サーバがクラッシュを避けるために。
ロードバランシングは、リバースプロキシの実装の原理を用いています。
いくつかの一般的な方法をロードバランシング
図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、上記記載されている問題は、ユーザーの要求二回目は、私たちが負荷分散システムであるため、すべての要求をに再配置されます、、、、ありクラスタ内の1台のサーバは、その後、サーバは一人のユーザーを記録し、その後、別のサーバーに移転した、自分のログイン情報が失われます、これは明らかに不適切です。
我々は、顧客が、サーバーを訪問したユーザーが再びアクセスしたときに、要求が自動的にサーバを見つけるために、ハッシュアルゴリズムを介して行われている場合、この問題を解決するための手順を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.weight。3 :最大数を超えた場合、1に失敗した要求のデフォルトの数を可能にする返すモジュール定義のエラー4. 失敗し、休止時間後。5.backup:他のすべてのバックアップマシンダウンまたは非忙しい時間は、バックアップ・マシンを要求します。だから、このマシンは軽い圧力になります。
max_fails
proxy_next_upstream
fail_timeout:max_fails
インスタンス:
#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;
}
}
}