0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

keepalived(LVS)のsource hashスケジュールの謎

Posted at

はじめに

お手軽L4ロードバランサーのLVSですが、地味に今まで勘違いをしていました。
振り分けアルゴリズムの中で接続元IPをハッシュ化して指定リアルサーバに振り分ける shですが、rrやlcなどとはweightの考え方が全然違いました。

shのweightは割り振りの重み付けではない

lcやwlcなどはリアルサーバに割り当てたweghtの総和から各リアルサーバに設定した値の割合だけ割り振りますよ。
って考え方だったかと認識しています。
例えば、サーバAのweightは5、サーバBは3、サーバCは10とかにすれば、総和は5+3+10=18になり、サーバAは18/5≒27.8%の割合で割り振ります。

ところが、shは同様の考え方をしませんでした。
公式ではありませんが、下記サイトにヒントがあります。
http://kb.linuxvirtualserver.org/wiki/Source_Hashing_Scheduling

リアルサーバの最大接続数x2をweightに設定するのが正解らしいです。
weightに設定した値を超えた接続は全てnullになってしまうため、思った通りの割り振りはされないようです。

つまり、上記と同様にサーバAは5、サーバBは3、サーバCは10の設定値だと、サーバAは2接続までサーバBは1接続までサーバCは5接続までは正常に割り振られ、それを超える接続はもはやランダムまたはrrになってしまうようです。

という事で

今まで振り分けアルゴリズムをshにすると「何かちゃんと割り振られてないなぁ・・・」と思っていた事がどうやら思い過ごしではなく、設定に不備があったという話でした。
なお、weightは0~65,535の間を指定する必要があるので、注意が必要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?