2016-11-30 13 views
1

私はHAProxyを初めて使用しています。私はそれをする方法を理解しようと数時間を費やしたが、どんなリードも得られなかった。私の要件は次のとおりです:url_paramに基づいてトラフィックをルーティングするようにHAProxyを設定する

リクエストのエンドポイントが/ specialの場合、URL_PARAMをチェックする必要があります。例えば

:?IDに基づいて、localhostの/特別なID = 10

、私は3つのサーバの1つにルーティングするためにそれを必要とします。 If id <=3 server1, if id > 3 and id <=6 server2 else server3

エンドポイントが3つのすべてのサーバー間で/特別なラウンドロビンでない場合。

この2レベルのバランスを達成するにはどうすればよいですか?

答えて

2

urlpurlp_valを使用してIDを抽出できます。そして、match the integerにACLを使用する:

次いで
acl is_special  path_beg /special 
acl small_id   urlp_val(id) le 3 
acl medium_id  urlp_val(id) 4:6 
acl high_id   urlp_val(id) gt 6 

use_backend bck1  if is_special small_id 
use_backend bck2  if is_special medium_id 
use_backend bck3  if is_special high_id 
default_backend  bck_all 

、3つのバックエンド作成:それぞれの場合に1つ。

編集:

あなたがurlp_regを使用して、クエリのparamに正規表現を使用する場合:

acl small_id  urlp_reg(id) ^[0-3] 
acl medium_id  urlp_reg(id) ^[4-6] 
acl high_id  urlp_reg(id) ^[7-9] 

また、あなたが何をしようとしているものに応じて、stickを確認してください。

+0

ありがとうございます!整数IDが本当に大きい場合はどうでしょうか?それが文字列としてしか考えられない場合。この例では明らかにしないことをお詫びします。正規表現の範囲マッチを使用することはできますか? – Maxsteel

+0

申し訳ありませんが、私はちょうど私のデータサンプルから、IDは基本的にUIDのものであることに気付きました。 – Maxsteel

+0

'urlp_reg'が動作します(私の編集を見てください)。 –

関連する問題