ロードバランサーいらずの冗長化構成を考える。

先日、サービス無停止のプロバイダ切り替え方法について書いてみましたが、あれは固定IP1での話でした。

今回は、固定IP8などの複数IPを使用している際の無停止切り替えや、冗長化構成にする方法を書いてみます。

[ルータを別にした、マルチホーミング的なネットワーク構成]

RT1とRT2では、特に複雑なことはしていません。いわゆるunnumbered接続で、複数固定IP運用を行うPPPoE接続、専用線接続などによる運用をしていると仮定します。

肝心なのは、その先をL2SWで接続し、結果1台のサーバへ接続してしまいます。

サーバ(FreeBSD6.0R)の設定例

kenti.jp > ifconfig
vge0: flags=8843<up,broadcast,running,simplex,multicast> mtu 1500
        options=1b<rxcsum,txcsum,vlan_mtu,vlan_hwtagging>
        inet6 fe80::202:----:f---:e--%vge0 prefixlen 64 scopeid 0x1
        inet 20x.112.8.66 netmask 0xfffffff8 broadcast 20x.112.8.71
        inet 6x.11.12.114 netmask 0xfffffff8 broadcast 6x.11.12.119
        ether 00:--:--:--:--:--
        media: Ethernet autoselect (1000baseTX )
        status: active
vge1: flags=8843<up,broadcast,running,simplex,multicast> mtu 1500
        options=1b<rxcsum,txcsum,vlan_mtu,vlan_hwtagging>
        inet6 fe80::202:----:f---:---%vge1 prefixlen 64 scopeid 0x1
        inet 192.168.11.1 netmask 0xffffff00 broadcast 192.168.11.255
        ether 00:--:--:--:--:--
        media: Ethernet autoselect (1000baseTX )
        status: active
lo0: flags=8049<up,loopback,running,multicast> mtu 16384
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet 127.0.0.1 netmask 0xff000000
</up,loopback,running,multicast></rxcsum,txcsum,vlan_mtu,vlan_hwtagging></up,broadcast,running,simplex,multicast></rxcsum,txcsum,vlan_mtu,vlan_hwtagging></up,broadcast,running,simplex,multicast>

※20x.112.8.66を実IP、6x.11.12.114をaliasとして割り当てます。  デフォルトゲートウェイは、RT1の20x.112.64.65に向けますが、設定に関わらずRT2(6x.11.12.112/29)からのパケットも返事できます。

本来であれば「NICをグローバルIP毎に分けたほうがいいのではないか?」等ありますが、それだとルーティングについてそれぞれのNIC毎に設定が必要なことと、フィルタ等の設定が必要になります。ですので、グローバルIP2つを敢えて1つのNICにぶら下げます。

また、この方法は私自身が過去に経験した手法の中で、プロバイダ切り替えの際などには重宝しました。
実際には、このサーバでサービスを提供するのではなく、あくまでこのサーバをクラスタサーバに見立てて、NATなどで下位サーバ(192.168.11.2)にwebなどのサービス処理をやらせるとセキュリティ上いいのかもしれません。(もちろん、このサーバ自身でサービスを運用しても十分に回線冗長化を考慮したサービスサーバになります。)

また、これはサーバでなくともルータで代用ができる…かもしれませんが、そんな感じです。