最近は IPv4 枯渇に備えて IPv6 が騒がれていますが、未だにデータセンターでも対応しているところを見たことがありません。IPv6 は"ポータビリティ"の特性を持っていて全てのデバイスで固有の IP を持つように考えられています(まるで Mac アドレス)。
一方、結構古くから UNIX、Linux、Windows 等では「IP エイリアス」という技術が使えるようになっています。
今回はインフラ技術である冗長構成を構築する上で基礎となる「IP エイリアス」について考えてみます。
IP エイリアスとは
「IP エイリアス」とは物理的に一つのネットワークカード(NIC)に 2つ以上の IP アドレスを割り当てる方法です。このことにより、一つしか NIC を持っていないサーバに例えば、192.168.1.10 と 192.168.1.20 等の IP アドレスを割り当てることが可能で、ちゃんと両方とも受信可能です。
IP エイリアスはどんな時に役立つか?
IP エイリアスは普段はあまり利用している人はいないかもしれませんが冗長構成の切り替えに非常に役立ちます。以下のようなシステムが存在した場合を仮定しましょう。
- クライアント a とサーバ A、B がいる
- サーバ A と B は同じ構成になっている
- 普段クライアント a はサーバ A に繋いでいる
- 問題が発生した時サーバ A から B へクライアント a は接続先を切り替える
- 障害時はサーバ A と B の対応だけで完結する仕組みにする
この場合、4(問題発生時)においてクライアント a 側の接続先を切り替える為には 5 の制約がある為、サーバ A の IP アドレスを B へ引き継ぐ必要があります。この作業はおおよそ以下のようになるでしょう。
- サーバ A の IP アドレスを停止する(ifdown)
- サーバ B の IP アドレスを停止する(ifdown)
- サーバ B の IP アドレスを変更する
- サーバ A の IP アドレスを変更する
- サーバ B の IP アドレスを起動する(ifup)
- サーバ A の IP アドレスを起動する(ifup)
このような手順はとにかく手間が多く障害発生時の緊迫感を考えるとあまりやりたくない作業です。
この時、IP エイリアスを使って以下のようにシステムを構築しておくと状況が変わってきます。
- クライアント a とサーバ A、B がいる
- サーバ A と B は同じ構成になっている
- IP エイリアスを使ってサーバ A で仮想の IP アドレス 192.168.1.100 を作る
- 普段クライアント a は 192.168.1.100(仮想 IP)に繋いでいる
- 問題が発生した時サーバ A から B へクライアント a は接続先を切り替える
- 障害時はサーバ A と B の対応だけで完結する仕組みにする
3 と 4 が変更点となりますが、クライアント a の接続先を事前に仮想 IP としています。この場合、4(問題発生時)の IP アドレス引継ぎ作業は以下のように簡略化されます。
- サーバ A で仮想 IP アドレスを停止する(ifdown)
- サーバ B で仮想 IP アドレスを起動する(ifup)
これだけで済んでしまいます。
実はこれが多くの冗長構成ミドルウェアが裏側でやっていることなのです。実際、CLUSTERPRO 等の冗長構成ミドルウェアの起動時に ifconfig 等を実行すると仮想 IP が起動していることが確認できます。
このあたりを知っていると自分でもシェルを作って簡単な冗長構成の仕組みを実現できるかもしれません。