地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

LVSとDSRの話

LVSの環境構築手順を見てると当たり前のようにVIPをループバックインターフェースへ割り当てているのを見て不思議に思ったので調べた。

ループバックインターフェースとは

ループバックアドレスとは、その機器自身を表す IP アドレスであるのに対して、ループバックインターフェースとはループバックアドレスがループバックインタフェースという論理インタフェースに紐づいたものを指す。

ip aコマンドなんかでみることができる仮想インターフェースのこと

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

L2DSR

LVSを経由して流れたリクエストを、配下のサーバがMACアドレスを書き換えて直接クライアントに返す方式での負荷分散。

書き換えるのはIPではなくMacアドレスのところがポイント。(スライド32あたりを参照)

www.slideshare.net

リアルサーバはVIPをLoに設定と記載されている。ここで疑問に思うのがLoに設定されたIPアドレスに対してLVSから通信できるのはなぜだろうってお話。

結論

別のネットワークインターフェースに届いたパケットでも、自ホストが持つ IPアドレスのいずれかであればLinuxではパケットを受け取ることが可能だから。

そのために構築手順なんかではrp_filterの値を変更しているとのこと。なるほど。

Loに設定する理由としては同一ネットワークないでIP衝突を避けることが可能であるから(Loなので当然)

blog.dshimizu.jp

ちなみにクライアントから見える戻りのsrcIPはVIPとなって戻ってるため相手側としてはVIPへ送信してVIPで戻ってくるって流れで問題がない。(これはNATの場合はまた違う)