- PR -

ipvsadm + keepalived で 別セグメントへロードバランス

1
投稿者投稿内容
りしぇる
会議室デビュー日: 2007/07/30
投稿数: 6
投稿日時: 2008-08-01 09:45
現在、keepalived + ipvsadmサーバ(以下LVSサーバ) を使用して
別セグメントのリアルサーバへロードバランスしようとしています。
環境は下記のようになっています。

コード:
リアルサーバ1        リアルサーバ2
192.168.120.101       192.168.120.102

      ----------Router----------

             LVS サーバ
           192.168.110.110
  Virtual IP 192.168.110.100

             クライアント



クライアントとLVSサーバ、リアルサーバ1・2への通信(Ping)は問題ありません。
クライアントからLVSサーバを経由してリアルサーバへ通信(SMTP)した場合、
パケットが戻ってこれないようで通信ができない状態になっています。
クライアントからリアルサーバへ通信(SMTP)した場合は問題ありません。

クライアント・LVSサーバ・リアルサーバ1・2が同じセグメントにいた場合は、
問題なくクライアントからLVSサーバを経由してリアルサーバへ通信が可能でした。

通常であれば、LVSサーバをルータとするのが一般的のようですが、
本番環境がRouter越えをしないといけない環境のため検証しております。

RouterでNatして リアルサーバ1・2 に 192.168.110.101、192.168.110.102を
割り当ててみたりもしましたが、状況は変わらずでした。

何かアドバイスや確認すべき項目を教えていただけると幸いです。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2008-08-01 20:31
こんばんは。

セグメントを越えてロードバランスするのは厄介です。
制約が発生することは覚悟する必要があります。

LVSについては詳しくはないのですが、恐らく次のような現象だと思います。
以下、クライアントを C、LVSサーバを L、リアルサーバを S、ルータを R とします。
() 内は、やりとりされるパケットの情報です。

うまくいく場合のシーケンス
 1. C: パケット送出 ( Src:C, Dst:L )
 2. L: 送信先変更 ( Src:C, Dst: S )
 3. R: ルーティング ( Src:C, Dst:S ) → S へ届くようにルーティングされる
 4. S: 応答パケット送出 ( Src:S, Dst:C )
 5. R: ルーティング ( Src:S, Dst:C ) → L を経由するようにルーティングされるべき
 6. L: 送信元変更 ( Src:L, Dst:C )
 7. C: 応答パケット受信 ( Src:L, Dst:C )

ここで、5 が曲者です。
ネットワーク構成によっては、L を経由するようなルーティングを行わないことが考えられます。
よしんば、L を経由せずに C に届いたとしても、パケットが送信元変更される前のものですから、C が送出したパケットに正しく対応したものになっていません。破棄されることになるでしょう。

解決策としては、ルータのルーティングを見直すことですが、ネットワーク構成によっては、不可能なケースが多々あるでしょう。
※元の質問の図そのままのような単純な構成ならば良いですが…

次善策としては、LVSサーバの方で、送信先アドレスのみならず送信元アドレスも変換してしまうことです。つまり、Src:C,Dst:L → Src:L,Dst:S への変換です。( できるかどうかは知らないのですが、多分できるでしょう )
ただし、この策では、リアルサーバが送信元アドレスを使って、アクセス元のクライアントを識別できなくなります。例えば、接続元をロギングしている場合、全部LVSからの接続に見えるため、ロギングの意味がなくなることになります。

この件を調査するのであれば、LVSサーバやリアルサーバでパケットをキャプチャして、送信元・先の内容を確認するとともに、ルーティングを調べることだと思います。
1

スキルアップ/キャリアアップ(JOB@IT)