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