仙石浩明の日記

2010年2月25日

本ブログのサーバを海外レンタルサーバ Linode を使って冗長化・地域分散してみた

前回前々回に書いたように、 このブログ 「仙石浩明の日記」 (および 「仙石浩明CTO の日記」) は、 私の自宅にある PC サーバで動かしている。 2台の PC からなる冗長構成になっていて、 10年以上の安定稼働実績がある (両サーバ共に停止したことは皆無) が、 回線が (家庭用の) フレッツ光ネクストなので、 インターネットとの接続が切れてしまう可能性は皆無ではない。 実際、 Bフレッツからフレッツ光ネクストへ切り替えたときは 40分間ほど切れてしまった。 一応バックアップ回線として ADSL 回線も契約しているが、 こちらは固定 IP アドレスを割当てていないので WWW サービス用としては使いにくい。

短時間とはいえブログが見えないようなことがあると、 たまたまそのタイミングで (検索エンジン等で見つけて) 訪れた人が、 ブログが既に閉鎖してしまったものと勘違いしてしまうかもしれない。 ここは一つ自宅以外の場所にもサーバを立てて、 回線断の影響を受けないようにしたいところ。 海外のサーバなら地域分散もできてなおよい。

道楽で運営している自宅サーバにそこまで可用性を求めるのは、 やりすぎの感もあるが、 近頃流行りの VPS (Virtual Private Server, 仮想専有サーバ) は、 月額 $20 (初期費用無し) 程度で利用できるらしい。 $20 なら試しに使ってみるのも悪くない。

サービス
プラン名
メモリ
ディスク
帯域
追加額/単位
月額
年額
データセンタの
場所
ServerAxis Xen
VS000.5G-0025.0GP
512MB
25GB
0GB
$.05/GB
$15
$180
Chicago, IL
Linode
Xen 360
360MB
16GB
200GB
$10/100GB
$19.95
$215.46
Fremont, CA
Dallas, TX ...
VPSLink
Xen VPS Link-3
256MB
10GB
300GB
$.50/GB
$19.95
$201.12
Seattle, WA
New York, NY
slicehost
Xen VPS 256 slice
256MB
10GB
150GB
$.30/GB
$20
$216
Dallas, TX
St. Louis, MO

VPSLink 以外は最安のプランで比較した。 VPSLink には、 メモリ 64MB で月額 $7.95 の Link-1 プラン、 メモリ 128MB で月額 $13.95 の Link-2 プランもあるが、 256MB 未満のメモリではできることも限られてしまうので比較対象から外した。

月額基本料だけを比較すると、 ServerAxis が格安に見えるが、 これは帯域課金が含まれていないためで、 例えば 100GB (送受信の合計バイト数) 使うと $5 加算されて $20 と他社並になる。

データセンタの場所 (というかネットワーク上での位置) によって遅延時間が変わってくるので、 どこのデータセンタを使っているかも重要。 例えば同じ Linode でもデータセンタによって、 日本からアクセスしたときの RTT (Round Trip Time, 往復にかかる時間, ミリ秒) が倍以上変わってくる。 それぞれ 10回ずつ ping を打って、 RTT の最小/平均/最大を比較してみる:

データセンタの場所ホスト名 最小平均最大
Fremont, Californiafremont1.linode.com 121.341132.299146.939
Dallas, Texasdallas1.linode.com 171.049173.152174.905
Atlanta, Georgiaatlanta1.linode.com 183.184185.938190.174
Newark, New Jerseynewark1.linode.com 200.629203.053204.755
London, Englandlondon1.linode.com 269.324273.499276.822

米国西海岸だと RTT は 130msec 程度で済むが、 東海岸は 200msec を超えてしまい、 英国はもっと遠い。 西海岸にデータセンタがあるのは Linode と VPSLink だが、 Linode がデータセンタの情報を詳細に公開しているのに対し、 VPSLink は、 Spry Hosting のシアトルのデータセンタを使用している、 ということ以上の情報を公開していない (しかもこのページは 2006年8月の内容のまま) のが少し気になる。

サポートしている Linux ディストリビューションは、 各社だいたい共通で、 CentOS, Debian, Gentoo, Ubuntu の各バージョンが利用できるが、 VPSLink Ubuntu Plan のページに Ubuntu 9.10 Karmic が書かれていない点も、 ちょっと気になった (ちゃんとポリシーを持って 9.10 をサポートしないのならいいのだが、 どうもそうではなく単に運用の手を抜いているだけのような気配がする)。 Web 界隈での評判も Linode のほうがよさげだったので、 Linode を使ってみることに決めた。

サポートしているディストリビューションのバージョンが古くてもアップグレードできるのだろうが、 帯域で課金されるので最初から新しいバージョンをインストールできる方が好ましい。

サービス CentOSDebianGentooUbuntu Fedoraその他
ServerAxis 5.45.02008.09.10- Mandriva SUSE
Linode 5.35.02008.09.1011 Arch SUSE Slack
VPSLink 55O9.0411 Arch Slack
slicehost 5.45.02008.09.1012 Arch RedHat

おそらく各社ともカーネルも入れ替えることができるのだと思うが、 Linode 以外は使っていないので未確認。 Linode の場合は pv_ops (paravirtualization) を有効にしておけば任意のカーネルを利用できる。 したがって (帯域課金さえ気にしなければ ;-) 任意のディストリビューションの利用 (あるいは完全なカスタマイズ) が可能 (私はまだそこまではやっていない)。

なお、VPS サービスは探すといろいろあるようだ。 前述した 4社と比べると公開している情報が不十分 (特に Virtuozzo/OpenVZ な VPS は実際のパフォーマンスを予想しにくく、 実地に使ってみないとなんとも...) なので私は比較検討対象から外したが、 ダメ元で使ってみるのも面白いかもしれない:

サービス
プラン名
メモリ
ディスク
帯域
追加額/単位
月額
年額
データセンタの
場所
SplitServ
Xen 1024
1024MB
15GB
200GBs
$8/400GB
$14.95
$149.50
Los Angeles, CA
Kansas City, MO
WebKeepers
Virtuozzo ライト
512MB
50GB
?1280円
11760円
?
PhotonVPS
Xen VPS WARP 1
512MB
35GB
500GB
?
$16.95
$203.40
Los Angeles, CA
KnownHost
Virtuozzo VS2
512MB
30GB
750GB
$40/100GB
$35
$400
Los Angeles, CA
Dallas, TX
BurstNet
VPS PACKAGE #1
512MB
20GB
1000GB
$25/200GB
$5.95
$71.40
Scranton, PA
VPS NOC
OpenVZ Bronze
512 MB
20 GB
400 GB
?
$12.95
$155.40
Kansas City, MO
CoreNetworks
CoreMR
512MB
12GB
500GB
?
$19.95
$239.40
?
prgmr.com
Xen VPS
512MB
12GB
80GB
?
$12
$115.20
San Jose, CA
HostCadet
VPS Micro
512MB
10GB
400GB
?
$9.99
$119.88
Colorado Springs, CO
NY NOC OpenVZ
Super VPS #1
512MB
10GB
1000GB
?
$10.00
$120
Chicago, IL
North Bergen, NJ
ARP Networks
KVM/QEMU
512MB
10GB
100GB
?
$15
$180
Los Angeles, CA
VirtuallyDedicated
Xen VX384
384MB
24GB
300GB
?
$10.99
$131.88
Chicago, IL
Scranton, PA
GrokThis.net
Xen VPS
320MB
16GB
160GB
?
$20
$200
Philadelphia, PA
DMEHosting
OpenVZ VPS1
256MB
25GB
1000GB
$10/200GB
$5.95
$71.40
Denver, CO
Chicago, IL
Quantact
OpenVZ VS1
256MB
15GB
300GB
$1/GB
$14.99
$179.88
Santa Rosa, CA
RackspaceCloud
Xen CloudServers
256MB
10GB
0GB
$.08-$.22/GB
$10.95
$131.40
Dallas, TX
XENnode
XEN 256
256MB
10GB
200GB
?
$14.99
$143.99
Dallas, TX
Datarealm Xen
PowerVPS
256MB
10GB
1Mbps
Unmetered
$19.95
$215.52
?
HostVirtual Xen
XV0 Server
256MB
10GB
250GB
?
$14.95
$179.40
San Jose, CA
RackUnlimited
Xen RVPS-Starter
256MB
10GB
100GB
?
$8
$96
Asheville, NC
QuickWeb
Xen Lite
256MB
5GB
240GB
?
$17.95
$215.40
San Jose, CA
QuickVPS
Xen プラン1
256MB
10GB
50GB
?
2300円
21600円
日本国内
QuillHost
OpenVZ Standard
256MB
8GB
150GB
?
$9.99
$119.88
Washington, DC
Charlotte, NC

と、いうわけで、 Linode 360 を契約してみた。

Linode のページで、 Linode 360 プランを選んで 「Sign Up Now!」をクリック。 氏名、住所、クレジットカード番号を入力し、 月々払い (Month to month) を選んで申し込むと、 $9.27 の注文書が表示された。 最初の月は月割りで月末までの分を注文するということのようだ (ということは短期間試してみたいときは月末近くに申し込めばよい?)。

米ドル支払いなので、 私が米国に滞在するとき使っている米銀のデビットカード (SSN がないとクレジットカードを発行してもらうのは難しい) を試しに使ってみたら、 何の問題もなく普通に使えた (もちろんクレジットカードならどこの国のカードでも普通に使えるはず)。 日本のデビットカード (J-Debit) はキャッシュカードなので取扱店でしか使えず、 J-Debit が使える店の大半はクレジットカードも使えるので、 J-Debit を使うのは家電量販店くらいのものだが、 米国のデビットカードは (決裁までの期間が短い点以外は) クレジットカードと同等なので便利。

2/17 13:18 に「Complete Order」 ボタンを押して注文を確定すると、 「Payment Receipt」 がメールで届き、 1分後に 「Linode Account Activation」 メールが届いた (13:19)。

そのメールに書いてあった Member's area にログインすると、 データセンタの選択画面が表示されたので、 迷わず米国西海岸の Fremont, CA を選ぶ。 パーティションの設定をして、 インストールするディストリビューションとして 「Ubuntu 9.10 64bit」 を選び、 root のパスワードの設定すると、 インストールが始まって 25秒ほどで完了 (13:22)。

注文してからここまで約5分。

ステータス表示が 「Powered Off」 になっているので、 「Boot」 ボタンを押す (13:29) と 8秒で起動が完了し、 ステータス表示が 「Running」 になった。 試しに手元の PC から ssh でログインしてみる (13:31)。 先ほど設定した root のパスワードを入力すると、 無事ログインできた。

注文してからここまで 15分かかっていない。
あっけないほど簡単に VPS が使える状態になった。

次に、 ssh 公開鍵を設定して鍵認証で ssh ログインできることを確認した上で、 sshd_config を修正して sshd に HUP シグナルを送って、 パスワード認証ではログイン出来ないように設定。 続いて、 csh, tcsh, emacs, screen, stone, dbndns, daemontools, apache2, php5, mysql-server, mysql-client, php5-mysql などを apt-get で次々インストールしていく。 実は stone を apt-get で入れたのは初めての経験。 ちゃんと最新版 stone 2.3e がインストールされてちょっと感動 (*^_^*)。 ありがとうございます > 北目さま。

最後に chsh コマンドでシェルを /bin/csh (私の愛用シェルは今でも csh ^^;) に変更して、 私のホームディレクトリの環境一式を手元の PC から rsync で送り込んで、 emacs を起動すれば、 私の作業環境一式が VPS 上でも使えるようになる。

注文してからここまで 1時間かかっていない。

Linode では逆引きを設定させてくれるので、 私の VPS の IP アドレス 74.207.241.21 の逆引きを fremont.gcd.org に設定した。 あとは、 dnscache を動かして外部のキャッシュサーバに頼らず名前を引けるようにしたり、 私の自宅サーバ gw.gcd.org との間にトンネルを設置したり、 gw.gcd.org 上の MySQL からローカルの MySQL に対してレプリケーションを行なうようにしたり、 等々...

もちろん、 Linode でもキャッシュサーバを提供しているので、 自前のキャッシュサーバを VPS 上で動かす必要は必ずしもないが、 名前引きができないことはあらゆるトラブルの元なので、 可能な限り自前で名前を引きに行くようにしたい。 なお、VPS は自身の IP アドレスを DHCP サーバに問合わせて設定しているので、 /etc/resolv.conf を直接書き換えても DHCP クライアントによって書き戻されてしまう。 そこで /etc/dhcp3/dhclient.conf に 「prepend domain-name-servers 127.0.0.1;」 を追加する (元々コメントアウトされているので先頭の # を取り除く)。

普通の ubuntu マシンをいじってるのと何ら変わらず、 しかも ssh でログインしたときのレスポンスも、 日本にあるサーバへアクセスしたときと同程度に速いので普通に使える。 apt-get しまくったので WordPress を動かす準備はすぐ整った。 VPS 上の MySQL のアカウントは、 gw.gcd.org とは (当然) 異なるパスワードを設定し、 WordPress からローカルの (つまり VPS 上の) MySQL へつなぐよう設定する。 これで (万一) gw.gcd.org 側が落ちても VPS 側だけでブログを表示できる。

一点注意すべきなのは、 レプリケーションは gw.gcd.org から fremont.gcd.org への一方通行なので、 VPS 上の MySQL へ何を書込んでもそれは gw.gcd.org へは反映されないという点。 したがってブログへコメントを書込むときは、 fremont.gcd.org ではなく gw.gcd.org 側へアクセスするように、 ブログの URL http://www.gcd.org/blog/ とは別に、 コメントやトラックバックの URL として http://feedback.gcd.org/blog/ を用意した (feedback.gcd.org は gw.gcd.org のエイリアス)。

もちろん双方向レプリケーションを行なうことも可能だが、 Linode の仮想環境に万一脆弱性があった場合に備えて Linode 側で何が起きても構わないように一方通行にしておく方が無難だろう。 さらに、 Linode 側からレプリケーション用の ID 以外で gw.gcd.org の MySQL をアクセスしようとしても、 たとえパスワードが一致しても通信を遮断する仕掛けを gw.gcd.org 側で組み込んである。

そして WordPress が設定するクッキーのドメインを gcd.org に変更して、 feedback.gcd.org なページ (コメント書込み、トラックバック受付) で設定したクッキーを www.gcd.org なページで参照できるようにする。 wordpress/wp-config.php に以下のコードを入れておけばよい:

if ( !defined('COOKIE_DOMAIN') )
	define('COOKIE_DOMAIN', "gcd.org");

最後に、 www.gcd.org の IP アドレスとして VPS の IP アドレス 74.207.241.21 を追加した。

% dnsqr a www.gcd.org
1 www.gcd.org:
61 bytes, 1+2+0+0 records, response, noerror
query: 1 www.gcd.org
answer: www.gcd.org 12657 A 74.207.241.21
answer: www.gcd.org 12657 A 60.32.85.216

すなわち、 いま読者の皆さんが読んでるこのページは、 1/2 の確率で Linode の VPS が送信したページということになる。 すでに一週間近くこの状態を続けていて、 今のところ 360MB のメモリで一応足りているが、 アクセスが増えてくるとどうなるか少し心許無い。

fremont:/home/sengoku % free
             total       used       free     shared    buffers     cached
Mem:        351508     264236      87272          0       4444      35316
-/+ buffers/cache:     224476     127032
Swap:       262136      39656     222480
Filed under: システム構築・運用 — hiroaki_sengoku @ 08:58

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。

コメントする