(続)BIG-IPでDSRを設定する方法
すっかり期間が空いてしまいましたが、DSRの設定です。
前回の記事はこちらです。
実はその後DSRの動作が想定通りにならず苦戦してました。。。その辺りも少し触れておきます。
前回のおらさい
- デフォルトのFastL4 ProfileをベースにカスタムProfileを作成する
- NodeとPoolを作成する
- Virtual Serverを作成、この時Port TranslationとAddress Translationをdisableにし、1.で作成したプロファイルを適用する
- サーバにLoopbackを作成する。GWはコアSWに設定
上記、少し省略している部分があるので実際の設定を見てみます。
1.デフォルトのFastL4 ProfileをベースにカスタムProfileを作成する
ここではLoose Closeをdisableにします。
以下、Loose Closeの解説です。ここは大丈夫ですかね。
Enable the Loose Close setting. When you enable the Loose Close setting, the TCP protocol flow expires more quickly, once a TCP FIN packet is seen. (A FIN packet indicates the tearing down of a previous connection.)
Timeoutも調整してもいいかもですが、DSR使うような環境でデフォルトの5秒以上にする必要もない気がします。
2.NodeとPoolを作成する
ここは通常通りです。Nodeを作成しそれらが所属するPoolを作成します。
DSRだからと言って特別なことはありません
3.Virtual Serverを作成
サマリーに記載しましたが、以下の2つをdisableにしてください。
- Port Translation
- Address Translation
通常のLBの挙動では、VIP (BIG-IPのVirtual Server Address)宛てのパケットを分散アルゴリズムで決定したリアルサーバのIPアドレス宛てに書き換えてパケットを流します。ただ、 L2DSR構成ではLBからリアルサーバへのパケットのDestination IPが「VIP」です。DSRですから、LBを介さずにVIPからのレスポンスがクライアントに届かないといけないわけですから、当然と言えば当然ですね。
4.サーバにLoopbackを作成する。GWはコアSWに設定
先ほどLBからDestination IPが「VIP」のパケットが流れるという話をしました。そうなるとリアルサーバはVIP宛てのパケットを処理する必要があります。そこで以下の通りループバックを設定します。
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 IPADDR=xxx.xxx.xxx.xxx(VIP) NETMASK=255.255.255.255 ONBOOT=yes
こうなるとVIP宛てのARPどうなるのと疑問が出てくると思います。
/etc/sysctl.confを以下の通り編集し対策してください。
※設定後にsysctl -pとifup忘れずに。
これで準備完了です。後は今までLBに向けていたデフォルトルートをコアスイッチ宛てにしてください。
さいごに
どうでしょう?うまく行きましたか?
実はこちらの環境ではうまくいきませんでした。。。
理由はとあるBugだったのですが、通信が成立したりしなかったり不安定だったため、切り分けに時間がかかりました。再現している時にサーバ側のtcpdumpで見てみると3で解説したVIP宛てに送るという挙動が不安定だったようです。うまくいかないケースはリアルサーバのIPアドレスで来てました。
次回はもしかしたら監視周りのお話にするかもしれません。
シェアして頂けると嬉しいです。 もし参考になったよという方がいれば是非お願いします。モチベーション維持の観点で非常に励みになります。