20
ロードバランスを考える 株式会社サイバーエージェント 田中 淳 1

ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

ロードバランスを考える

株式会社サイバーエージェント

田中 淳

1

Page 2: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

n 田中 淳n  CAのインフラネットワークを担当n  L7~L1までやってます

2

Page 3: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

ゲームコミュニティ

3

Page 4: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

ベンダー機とLVSの割合

3 : 1※全DCで約40台いました(汗)

4

ベンダー LVS

Page 5: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

L3

L2 LB

サーバ サーバ内部API用途

外部公開用途

5

Page 6: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

n 内部API用途での方法Ø  L2DSRØ  L4+SNAT(L7+SNAT)

n 外部公開用途での方法Ø  L4Ø  L7(SSLなど)

6

Page 7: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

n 内部API用途での方法Ø  L2DSRØ  L4+SNAT(L7+SNAT)

n 外部公開用途での方法Ø  L4Ø  L7(SSLなど)

7

Page 8: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

■内部API用途1.パーシステンス系

1.  サーバA→VIP80番リクエスト

2.SSL系

1.  LBでSrcアドレス変換(SNAT)2.  サーバBで受けるSrcがSNAT IP

3.

1.  サーバBはSNAT IPへ応答2.  LB→サーバAへ(SrcはVIPに戻る)

L3

L2

LB

8

サーバA

1.リクエスト

2.SNAT変換

L2

サーバB

VIP - 172.20.1.1:80

172.16.1.1:4003 192.168.1.1:80

Src -172.16.1.1:4003Dst - 172.20.1.1:80

3.レスポンス

Page 9: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

■内部API用途1.パーシステンス系

1.  サーバA→VIP80番リクエスト

2.SSL系

1.  LBでSrcアドレス変換(SNAT)2.  サーバBで受けるSrcがSNAT IP

3.

1.  サーバBはSNAT IPへ応答2.  LB→サーバAへ(SrcはVIPに戻る)

L3

L2

LB

9

サーバA

1.リクエスト

2.SNAT変換

L2

サーバB

VIP - 172.20.1.1:80

172.16.1.1:4003 192.168.1.1:80

Src - 10.10.1.1:4003Dst - 192.168.1.1:80

Src -172.16.1.1:4003Dst - 172.20.1.1:80

3.レスポンス

Page 10: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

■内部API用途1.パーシステンス系

1.  サーバA→VIP80番リクエスト

2.SSL系

1.  LBでSrcアドレス変換(SNAT)2.  サーバBで受けるSrcがSNAT IP

3.

1.  サーバBはSNAT IPへ応答2.  LB→サーバAへ(SrcはVIPに戻る)

L3

L2

LB

10

サーバA

1.リクエスト

2.SNAT変換

L2

サーバB

VIP - 172.20.1.1:80

172.16.1.1:4003 192.168.1.1:80

Src - 172.20.1.1:80Dst -172.16.1.1:4003

3.レスポンス

Src - 192.168.1.1:80Dst - 10.10.1.1:4003

Page 11: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

よく起こる問題

SNAT Port reused問題

11

Page 12: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

12

このタイミング

Page 13: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

n 現象について1. サービスが盛り上がる2. SNAT変換急増⤴3. サーバがもつTIMEWAIT情報=LBのSNAT IP&ポートかぶる・・・

13

Page 14: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

■内部API用途1.パーシステンス系

1.  サーバBはSNAT IPへ応答2.  LB→サーバAへ2.SSL系

1.  サーバC→VIP80番リクエスト

3.

1.  LBでSrcアドレス変換(SNAT)2.  サーバBで受けるSrcがSNAT IP

L3

L2

LB

14

サーバA

1.レスポンス

2.リクエスト

L2

サーバB

VIP - 172.20.1.1:80

172.16.1.1:4003 192.168.1.1:80

Src -172.20.1.1:80Dst -172.16.1.1:4003

3.SNAT変換

Src - 192.168.1.1:80Dst - 10.10.1.1:4003

<TIMEWAIT情報>Src-192.168.1.1:80Dst-10.10.1.1:4003

Page 15: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

■内部API用途1.パーシステンス系

1.  サーバBはSNAT IPへ応答2.  LB→サーバAへ2.SSL系

1.  サーバC→VIP80番リクエスト

3.

1.  LBでSrcアドレス変換(SNAT)2.  サーバBで受けるSrcがSNAT IP

L3

L2

LB

15

サーバC

1.レスポンス

2.リクエスト

L2

サーバB

VIP - 172.20.1.1:80

172.16.2.1:4003 192.168.1.1:80

3.SNAT変換

<TIMEWAIT情報>Src-192.168.1.1:80Dst-10.10.1.1:4003

Src -172.16.2.1:4003Dst -172.20.1.1:80

Page 16: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

■内部API用途1.パーシステンス系

1.  サーバBはSNAT IPへ応答2.  LB→サーバAへ2.SSL系

1.  サーバC→VIP80番リクエスト

3.

1.  LBでSrcアドレス変換(SNAT)2.  サーバBで受けるSrcがSNAT IP

L3

L2

LB

16

サーバC

1.レスポンス

2.リクエスト

L2

サーバB

VIP - 172.20.1.1:80

172.16.1.1:4003 192.168.1.1:80

3.SNAT変換

<TIMEWAIT情報>Src-192.168.1.1:80Dst-10.10.1.1:4003

Src -172.16.2.1:4003Dst -172.20.1.1:80

Src - 10.10.1.1:4003Dst - 192.168.1.1:80

Page 17: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

SNATアドレス&ポートが一緒

■内部API用途1.パーシステンス系

1.  サーバBはSNAT IPへ応答2.  LB→サーバAへ2.SSL系

1.  サーバC→VIP80番リクエスト

3.

1.  LBでSrcアドレス変換(SNAT)2.  サーバBで受けるSrcがSNAT IP

4.

1.  Srcアドレス&ポートが一緒!

L3

L2

LB

17

サーバC

1.レスポンス

2.リクエスト

L2

サーバB

VIP - 172.20.1.1:80

172.16.1.1:4003 192.168.1.1:80

3.SNAT変換

<TIMEWAIT情報>Src-192.168.1.1:80Dst-10.10.1.1:4003

Src -172.16.2.1:4003Dst -172.20.1.1:80

Src - 10.10.1.1:4003Dst - 192.168.1.1:80

4.レスポンス(Error)

Page 18: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

n  対策1.  SNATアドレスを増やす2.  サーバのTIMEWAIT値をめちゃくちゃ短くする3.  LB側でテンプレートを適用(TIMEWAIT値を変更)

18

Page 19: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

n  悩めること1.  SNATアドレスを増やす

Ø アドレス増やしてもSNAT変換のハッシュでまた同じの使っちゃう可能性有り(確率論的な話)

2.  サーバのTIMEWAIT値をめちゃくちゃ短くするØ 他に影響出ちゃいそうだったのでやりませんでした。

3.  LB側でテンプレートを適用(TIMEWAIT値を変更)Ø  L7で処理させる必要あり。負荷が・・・

19

Page 20: ロードバランスを考える - JANOG...3. LB側でテンプレートを適用(TIMEWAIT値を変更) " L7で処理させる必要あり。負荷が・・・ 19 他の悩み 1

他の悩み1.  分散、集約って繰り返すけど、集約のほうがいいのかな?2.  接続する機器同士の分散アルゴリズムがいけてないと、LAG組んだ時が泣ける・・・。

3.  高機能な分色々任せると、これまた泣ける・・・。4.  ベンダーが分散していると運用する人が覚えるのが大変。5.  やっぱり、アプライアンス高いっす(TдT)                               などなど

20