Poundを使ったお手軽サーバ移行を実施してみた

ikeda,suzukiApache,Pound

EMONSTER に Android をインストールして遊んでいる suzuki です。

Android は Google が作っているだけあって、Gmail アプリの使い勝手が良いですね。「Gmail を使う」ことに限って言えば、iPhone よりも使いやすい気がします。

さて、今回は、Pound を使ったサーバ移行について、ちょっと書いてみたいと思います。

個人的に管理しているサーバが1台あるのですが、新規に1台追加をしました。最終的には旧サーバを停止し、新サーバのみで稼働させる予定なのですが、移行に手間取りそうだった為、一時的に並行動作をさせることにしました。

旧サーバはグローバルアドレスを持っており、とある Web コンテンツを公開していました。このコンテンツは、動的であり、逐次内容が変わっていくものです。

新サーバもグローバルアドレスを持っているので、そこへコンテンツを移動し、新サーバで Apache を立ち上げれば終わり、、、ではあるのですが、ここで絡んでくるのが DNS です。

DNS 情報は、どこでどのくらいキャッシュされているのか分かりません。

コンテンツ提供側としては、古い DNS 情報を参照して、旧サーバへアクセスしてくる方に対して、古いコンテンツをそのまま提供したり、Not Found を出したりするのはよろしくないですよね。

ここは旧サーバへアクセスされても、新サーバへアクセスしたときと同じコンテンツを提供するのがベスト、と考えるべきでしょう。

ということで、お手軽な方法として Pound を使ったサーバ移行を行なってみました。

Pound は、リバースプロキシやロードバランサとして動作します。その動きを利用して、旧サーバへアクセスが来ても、新サーバへアクセスが来ても同一コンテンツを提供することを目的とします。

新サーバでの Apache の設定やコンテンツの移動方法、また DNS 情報の切替については、ここでは解説しません。それらは全て終わった状態とします。

この状態で、Pound の設定は次のようにしました。旧サーバが 192.168.1.1 で、新サーバが 192.168.2.1 の IP アドレスを持っているものだと思って下さい。

User  "apache"
Group "apache"
LogLevel 3
Alive 60
Daemon 1

ListenHTTP
    Address 192.168.1.1
    Port 80

    Service
        HeadRequire "Host: .*example.com.*"
        BackEnd
            Address 192.168.2.1
            Port 80
            TimeOut 30
        End
    End
End

設定ファイルは非常に分かりやすい構成ですね。

ListenHTTP の部分で、旧サーバ(192.168.1.1)の80番ポートで待ち受けをする設定を書いています。また、Service の部分で、HTTP ヘッダの「Host」が「example.com」を含む場合の動作を書いています。この場合は、「192.168.2.1 の 80番ポートをバックエンドとしてみなす」です。

これだけで「旧サーバの80番ポートにアクセスしてきたら、新サーバの80番ポートへアクセスしたときと同じコンテンツを返す」という動作のできあがりです。

ただし、この方法には欠点があります。

旧サーバの Pound 経由で新サーバにアクセスがあったとき、新サーバの Apache のアクセスログに記録される IP アドレスが旧サーバの IP アドレスになってしまいます。この例で言うと、アクセスログには 192.168.1.1 が記録されます。

このため、IP アドレスベースでのアクセス制限を行なっている場合は、これが正しく動きません。注意しましょう。

この辺りは踏まえておく必要がありますが、そこを気にしないで良いのなら、これで終わりです。この後、しばらくの間は旧サーバと新サーバの両方へアクセスが来るようになります。

この状態で旧サーバのアクセスログを監視していると、そのうちにアクセスがほとんど無くなってきます。そこまで来たら旧サーバを停止しても良いでしょう。「アクセスがどこまで減ったら停止しても良いか?」の判断基準は、システムそれぞれで考慮する必要はあります。

そうして、最終的には旧サーバを撤去し、あとは新サーバで稼働し続けるようにすれば良いのです。簡単ですね。

今回は、新旧それぞれ1台のみの構成でしたし、個人で利用しているシステムだったので「まぁ、ある程度は停めてもいいや」というポリシーでしたので気も楽でした。

「業務で提供しているシステムの移設」となると、もっともっともっとたくさん考える必要がありますが、今回のこのミニマムな経験でも今後のために多少は役に立つのではないかと思っています。

ikeda,suzukiApache,Pound

Posted by suzuki