HAProxyスケジューリングアルゴリズム

HAProxyスケジューリングアルゴリズム

HAProxyスケジューリングアルゴリズムは、静的および動的スケジューリングアルゴリズムのスケジューリングアルゴリズムに分かれています。
静的なアルゴリズムは、再起動後に有効に取ることができ、バックエンドサーバーの現在の負荷についての接続や応答速度の数を気にしない、とリアルタイムの重量に変更することはできません、あらかじめ定義されたスケジューリング規則に従ってポーリング公平なスケジューリングです。
静的スケジューリングアルゴリズム:静的-RR、第一
動的スケジューリングアルゴリズムを適宜、現在の負荷に低い優先度スケジューリングサーバとしてバックエンドサーバの状態に応じて調整され、重量がサービス再起動せずにhaproxyランタイムを調整することができる
動的スケジューリングアルゴリズム:ラウンドロビン、leastconn、ソース、URI 、url_param、HDR、RDP-cookieが
メソッドを-defined:

balance <调度算法>

静的スケジューリングアルゴリズム

静的-RR

静的ポーリングは、重み付けラウンドロビンスケジューリング基づき、HAProxyは重量調整の実施スロースタートをサポートしていないとバックエンドサーバーを実行時に、制限は、バックエンドホストの数が存在しません

listen web_http
        mode http
        balance static-rr       #设定静态轮询
        bind 192.168.27.21:80
        server web1 192.168.27.31:80 weight 2  check  inter 3s fall 3 rise 5
        server web2 192.168.27.32:80 weight 1  check  inter 3s fall 3 rise 5

テスト:

[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 2

最初

リストに基づいHAProxyロケーションサーバ、トップダウン・スケジューリング、最初のサーバへの接続数が上限に達した場合にのみ、新たな要求を次のサーバに割り当てられる、サーバはこの設定の重みを無視します
例:

listen web_http
        mode http
        balance first
        bind 192.168.27.21:80
        server web1 192.168.27.31:80 maxconn 10  check  inter 3s fall 3 rise 5          #配置连接上线位为10,不设置权重
        server web2 192.168.27.32:80 weight 2  check  inter 3s fall 3 rise 5

テスト:

[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1

すべての要求はまだサーバー1に送信されます、サーバー2の重み設定は接続SERVER1の数がSERVER2への要求を満たした場合にのみ、無効です


動的スケジューリングアルゴリズム

ラウンドロビン

ウェイトポーリング動的スケジューリングアルゴリズムは、デフォルトのスケジューリング・アルゴリズムである4095サーバにランタイムサポートスロースタートの重量、各バックエンドバックエンドサポートを調整する権利をサポートしています。
例:
1.プロファイルの変更

stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin    #将socket文件开启,在进行动态调节权重时,是通过socket进行的
listen web_http
        mode http
        balance roundrobin      #调度算法设置为roundrobin
        bind 192.168.27.21:80
        server web1 192.168.27.31:80 weight 1  check  inter 3s fall 3 rise 5
        server web2 192.168.27.32:80 weight 1  check  inter 3s fall 3 rise 5

2.ディレクトリソケットファイルを作成します。

[root@localhost ~]# mkdir /var/lib/haproxy

3.ソケットファイルが有効かどうかを確認するために、サーバーを再起動します。

[root@localhost ~]# ls /var/lib/haproxy/
haproxy.sock                #已经存在

テスト:
サーバー・コマンドsocatに関する動的な調整状態を使用する必要性、インストールするコマンド

[root@localhost ~]# yum install socat -y

シンプル、コマンドエコーのsocatに関する使用+は、ソケットファイルにパイプすることができます

[root@localhost ~]# echo "help" | socat stdio /var/lib/haproxy/haproxy.sock
#此命令可以用来查看socat一些简单的使用帮助

1.サーバーの重みを取得

[root@localhost ~]# echo "get weight web_http/web1" | socat stdio /var/lib/haproxy/haproxy.sock      #获取权重时,指定后端服务器组和服务器名称
1 (initial 1)       权重为1

重みの動的変形例2と再度確認

[root@localhost ~]# echo "set weight web_http/web1 2" | socat stdio /var/lib/haproxy/haproxy.sock       #使用set来修改权重,

[root@localhost ~]# echo "get weight web_http/web1" | socat stdio /var/lib/haproxy/haproxy.sock 
2 (initial 1)

テストアクセス

[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 2
#权重已经被调整,需要注意动态设置的方法临时有效,重启服务将失效

サーバーを動的にオフライン

[root@localhost ~]# echo "disable server web_http/web1" | socat stdio /var/lib/haproxy/haproxy.sock 

テストアクセス

[root@localhost ~]# curl 192.168.27.21
server 2
[root@localhost ~]# curl 192.168.27.21
server 2
#server1被下线,访问只能被调度到server2

動的にライン上のサーバー

[root@localhost ~]# echo "enable server web_http/web1" | socat stdio /var/lib/haproxy/haproxy.sock 

テストアクセス

[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 2
#server1又能正常访问,并且之前设置的权重依旧有效

ソース

ソース・スケジューリング・アルゴリズムは、ユーザのハッシュに基づいてソースアドレスとバックエンドサーバーに要求を転送され、デフォルトは、静的すなわちモジュロ方法である(ハッシュ型サポートオプションによって変更することができる)、後続の要求は、それ宛とされているであろうWebサーバの後端に同じを転送、シーンなど、セッション/キャッシュサービスを維持するために適しています
例:

listen web_http
        mode http
        balance source
        bind 192.168.27.21:80
        server web1 192.168.27.31:80  check  inter 3s fall 3 rise 5
        server web2 192.168.27.32:80  check  inter 3s fall 3 rise 5

テスト

[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1
[root@localhost ~]# curl 192.168.27.21
server 1
#当第一次访问被调度到后天的server1后之后的所有请求都被调度到server1

ソースアドレスハッシュはい重みが既定が静的であり、変更することができないようなアルゴリズムをスケジューリング

[root@localhost ~]# echo "set weight web_http/web1 2" | socat stdio /var/lib/haproxy/haproxy.sock 
Backend is using a static LB algorithm and only accepts weights '0%' and '100%'.
#无法进行对权重进行设置,只能开启或关闭

ソースの整合性ハッシュアルゴリズム

ソース・アドレスをハッシュするので、テーブル全体廃止され、再計算処理で記録するように、バックエンドサーバーが変更された場合、弾性率の値も変更され、静的です。
一部のみに影響を与える総重量の変化は、大きな変化を生じないときコンシステントハッシュ法は、サーバに、ダイナミック、オンラインサポート重み調整です
。例:

listen web_http
        mode http
        balance source
        hash-type consistent        #使用hash-type指定一致性哈希
        bind 192.168.27.21:80
        server web1 192.168.27.31:80  check  inter 3s fall 3 rise 5
        server web2 192.168.27.32:80  check  inter 3s fall 3 rise 5

S

URIハッシュアルゴリズムは、一般的にキャッシュサーバで使用される、スケジュールするユーザーURIでアクセスすることができます。あなたが最初のURI市を訪問したとき、haproxyは、他のユーザーがこのURIにアクセスするときに、haproxyは、それが最後にバックアップするスケジュールを固定され、背景や派遣記録からサービスを選択します。このURIことを要求されました台湾サーバー。
例:
設定ファイルの代わりに、ハッシュアルゴリズムに基づくURI

listen web_http
        mode http
        balance uri         #设置为uri算法
        bind 192.168.27.21:80
        server web1 192.168.27.31:80 weight 1 check  inter 3s fall 3 rise 5
        server web2 192.168.27.32:80 weight 3 check  inter 3s fall 3 rise 5

テスト
同じリソースにアクセスするために異なるクライアントを使用して
、使用CLIENT1のアクセスを

[root@client1 ~]# curl 192.168.27.21/index.html
server 1

CLIENT2アクセスを使用してください

[root@client2 ~]# curl 192.168.27.21/index.html
server 1

クライアント3アクセスを使用してください

[root@client3 ~]# curl 192.168.27.21/index.html
server 1

結論:同じリソースにアクセスする異なるユーザが統一バックエンドサーバー上でスケジュールされます


url_param

url_paramスケジューリングアルゴリズムが再分割後の選択されたバックエンドサーバーへの総重量配信サーバによるユーザリクエストURL {paramsは}行うハッシュ計算部におけるパラメータの値である共通のユーザが確実にするために、同じユーザ追跡常にバックエンドサーバーに同じ要求を送信します。
http://www.mylinuxops.com/index.php?name=wangへのURLを想定
しているurl_param?すなわち、コンテンツ名=王の後、前記パラメータ名、王値の
例:

listen web_http
        mode http
        balance url_param name      #设定调度算法为 url_param,参数为name
        bind 192.168.27.21:80
        server web1 192.168.27.31:80 weight 2 check  inter 3s fall 3 rise 5
        server web2 192.168.27.32:80 weight 1 check  inter 3s fall 3 rise 5

試験
パラメータの値は、ユーザが要求する同じバックグラウンドサーバと着用しながらとき

[root@localhost ~]# curl 192.168.27.21/index.html?name=123
server 2
[root@localhost ~]# curl 192.168.27.21/index.html?name=123
server 2

ユーザーが使用する場合のパラメータは、投票を設定されていません

[root@localhost ~]# curl 192.168.27.21/index.html?aaa=123
server 1
[root@localhost ~]# curl 192.168.27.21/index.html?aaa=123
server 1
[root@localhost ~]# curl 192.168.27.21/index.html?aaa=123
server 2

HDR(NAME)

有効な値は、ラウンドロビン・スケジューリングしないであろう場合、モジュロ・ツー・バック配信サーバ後サーバの総重量で割った重量次いで、HTTPリクエストヘッダで指定され、各ユーザに対するハッシュ情報を実行するHDRスケジューリングアルゴリズム。HDR名を使用することができます(クッキー、ユーザーエージェント、ホストされている )
例:

listen web_http
        mode http                       #此算法是针对http的所以模式需要使用http
        balance hdr(user-agent)         #使用hdr算法,以用户的客户端作调度
        bind 192.168.27.21:80
        server web1 192.168.27.31:80 weight 2 check  inter 3s fall 3 rise 5
        server web2 192.168.27.32:80 weight 1 check  inter 3s fall 3 rise 5

例:
カールアクセスを使用します

[root@localhost ~]# curl 192.168.27.21
server 2
[root@localhost ~]# curl 192.168.27.21
server 2
[root@localhost ~]# curl 192.168.27.21
server 2
[root@localhost ~]# curl 192.168.27.21
server 2

別のクライアントアクセスを偽装カール使い方

[root@localhost ~]# curl -A "12" 192.168.27.21
server 1
[root@localhost ~]# curl -A "12" 192.168.27.21
server 1
[root@localhost ~]# curl -A "12" 192.168.27.21

RDP-クッキー

リモートデスクトップ負荷のためのRDP-クッキースケジューリングアルゴリズムは、窓のリモートケースとのセッションを維持するためにクッキーを使用しています。
例:

listen RDP
        bind 192.168.27.21:3389
        balance rdp-cookie      #修改调度算法为rdp-cookie
        mod tcp                 #由于后端为windows所以此处必须为tcp
        server rdp1 192.168.27.40:3389 check  inter 3s fall 3 rise 5
        server rdp1 192.168.27.40:3389 check  inter 3s fall 3 rise 5

おすすめ

転載: blog.51cto.com/11886307/2405070
おすすめ