さくらインターネット移行記#3 はてなブックマーク移転

さて、移行記も #3 となりました。今回は先日作業を終えたはてなブックマークの移転について。

旧サーバールームからさくらインターネットiDCへのサーバー移転作業にもだいぶ慣れて来たこのごろ。これまでは比較的はてな内の他サービスとの連携が疎になっていたり、負荷がそこまで高くないものであったりと移行しやすいものから持っていってましたが、そろそろ難しいところ手を付ける時期に来まして、はてなブックマークの移転です。

以前に書いた はてなブックマークの裏側その後 - naoyaのはてなダイアリー では 2006年10月時点で

  • ユーザー: 60,000 人
  • ブックマーク数: 787万件
  • サーバー: 30台

となっていました。移転したこのごろはというと

  • ユーザー: 80,000 人
  • ブックマーク数: 1,182万件
  • サーバー: 移転前約45台 (移転後 約25台)

という具合になっていました。順調に伸びています。

サーバーが 40台もあるので悩んだのですが、

  • 古いサーバーは持っていかない
  • 新しく iDC を移したメリットを生かしてマシン単体の性能を上げて台数を減らす
  • ソフトウェアのセットアップに時間がかからないように工夫する

という計画で移転をすることにしました。あらかじめサーバーを 20台ほど iDC にセットアップしておいて移転前日までに可能なところまで旧構成との同期をしておいて、当日は最低限のサーバーだけを持っていく、というものでした。

まず新しいサーバーですが、これまでの自作サーバーとはちょっと趣向を変えて DellPowerEdge SC1435 を使うことにしました。AMD Opteron 2212HE (低消費電力のデュアルコア Opteron 2.0GHz) x 2 が搭載されている費用対効果の高いサーバーです。

Opteron に決めた理由は消費電力。サーバーのラックマウントは、なるべくたくさんのサーバーを積もうと苦心していると実は電力が頭打ちになるというのが経験上分かっていました。1つのラックに収められる CPU の数と、その数によって得られる性能、消費電力量などを総合して考えると現時点では Opteron の低消費電力版が最もバランスがよさそうだという判断でこのサーバーにしました。

自作にしなかったのは、CPU を Opteron x 2 にして ECC buffered なメモリを 4GB 積んで...という構成で見積もった場合に、最近は商用のサーバーの価格がかなりこなれてきたこともありコスト面でメリットを出せなかったことや iDC が地理的に離れているので自作サーバーの長所である即納であることが生かせないといったところが理由です。一方特殊なハードウェア構成の場合はやはり自作のメリットが最大限生かせるので、今後はコモディティなサーバーは商用の1Uで、それ以外は自作のものをと並行して使っていこうと思っています。

移転するサーバーには MySQL を動かすデータベースサーバーが結構な数がありましたが、はてなブックマークの場合 OS のページキャッシュに載り切らない分のデータに対するディスクI/Oで待たされて、そこがボトルネックになるのは分かっていました。そこでディスク周りのI/Oボトルネックを解消するために新しく 3ware の RAID カードを使ってみました。

選んだのは 3ware 9650SE-4LPML という SATA II 用の RAID カードです。PCI-Express に挿して使います。Dell の 1U には PCI-Express スロットが1スロット拡張用に用意されていて、そこに挿して使ってます。(上の写真はは検証時に自作サーバーに挿して使ってるところ。)

この RAID カードを選んだのは WEB+DB PRESS の記事にもなった http://www.klab.org/media/mysql/index3.html のコラムで 3ware のライトキャッシュ付きカードが良いらしいと前評判を聞いていたのがきっかけです。リンク先の記事にも書かれていますが、このカードにはディスクへのライトを一旦キャッシュするためのメモリが載ってます。また不意の電源断時にキャッシュが吹っ飛んでディスクの内容がおかしくなってしまわないように充電式のバッテリユニットを付けてデータを保護することも可能になっています。

実際に購入してみて RAID 0 / RAID 1 で評価してみましたが、Linux 2.6 での動作(デバイスドライバは付属してきますし、2.6.19 以降であればカーネルソースにドライバが含まれています。) やパフォーマンス、ホットスワップの信頼性も上々でした。製品はウェブの通販で購入するより、正規代理店からバルクでまとめて購入すると安かったです。と、いうことで比較的安価に適度に高速なストレージが手に入りました。さすがに SASRAID に比べると若干パフォーマンスは落ちますが、安価な SATA II ディスクを大量購入しておけばいつでもパフォーマンスの高いストレージが組めるというのはフットワークが軽くて良いですよ。

サーバーをラッキングし DB に使うマシンは RAID カードを挿してセットアップするわけですが、これは現地作業になります。色々と体力使いそうだなあと思っていましたが、Dell のサーバーはハードウェアの拡張やラッキングの際に一切ネジ止めを必要としない工夫がされていて、予想に反してレールの取り付けや RAID カードの組み込み、ディスクの取り外しどれも思いのほか簡単に済んで楽でした。Dell++。

ただですね、さすがにサーバー20台ともなると梱包されてる箱、このゴミがすごい量になります。

こんな具合で、一緒に作業を手伝ってくれたバイト君が途方に暮れています。が、弊社のもう一人のバイト君の片付け能力が非常に高く、上の写真がビフォアーで、アフターは以下のようになりました。いくらなんでもきれいにしすぎ。

20台でこの量ですから、1度に100台とか1,000台とか作業するサイトだとどんな感じなんでしょうね。考えたくない。

さて、ハードはこんな感じですが、一方のソフトウェア。今まではディストリビューションFedora Core を使っていましたが、CPU のアーキテクチャx86_64 に変わることもあるし FC は Fedora Legacy のサポートが突然止まったりと色々芳しくない状況だったので、今後は CentOS を使うことにしました。

また、弊社のサーバー周りのスタッフで自社用の yum レポジトリを新設しました。例えば mod_perlCPAN モジュールなどめんどくさいサーバー周りのソフトウェアのインストールは全部 yum で。Apache / mod_perl のサーバーには自社で作った Apache モジュールを組み込んだりしてることもあり環境構築が煩雑になってたのですが、RPM にまとめて yum でインストールできるようにしたおかげで、その手間がゼロになりました。

加えて、OS のインストールも PXE ブートからネットワークインストールで行うように。自社のサブネットにマシンを繋げて PXE でブートさせると CentOS のインストールが始まり、CPU 数やディスクの数に合わせて最適な環境でインストールを行い、その後のネットワーク設定や yum からの追加ソフトウェアのインストールもバッチで行う環境を作りました。(インストールが完了すると社内の IRC にネットワークアドレスと共に通知が来るというおまけつき。担当者の茶目っ気。) 20台サーバーが新設されましたが、OS インストールはネットワークに繋いで電源入れて放置でよかったので非常に助かりました。

「そもそもOSインストールするのも面倒だよね、ディスクあると障害確率も上がるし。」という話もあって、今後は iSCSINFS かでマスタファイルサーバーを作り、PXE ブートしてそれを root ごとマウントしてディスクレスにしようかなと計画しています。また最近巷で話題の cfenginepuppet、また仮想化なんかも検討しつつ運用コストを下げる方法を模索しています。日本のサーバー周りは過去の環境もあるのでそう簡単にはいかないのですが、アメリカの方のサーバー周りは新規なのでしがらみもなく、この手の新しい環境の導入もすんなりいけそうです。

こんな感じで移転に合わせて色々しつつ、いざサービス再開、ハードウェアの性能も上がったしパフォーマンスも相当期待できるよね! と思ったのですがいきなりウェブサーバーが過負荷になって躓きました。結構焦りましたが調べていくうちに Perl のバイナリに問題があることがわかり、問題箇所のパッチを抜いた RPM を作成しなおして事なきを得ました。

以上の作業でサーバー台数は半数近くまで減って、一方のパフォーマンスは数倍以上に向上したように思います。さくらインターネットiDCに移転したことで回線品質も向上しましたし、移行した当初に時間をかけて構築した冗長性の高いネットワークシステムに収まることができて耐障害性もレベルアップさせることができました。RAID カード導入によるディスクI/Oの軽減具合も絶好調です。

移転に伴って考える必要のあることがたくさんあり大変でしたが、結果心配ごとが色々となくなって毎日良く眠れるようになりました。夏ぐらいまでにはより強固で運用コストの低いシステムを構築して、一番大きなサービスのはてなダイアリーの移転を終えたいなあと思っています。おしまい。

# なお、前回心配された方からご指摘いただきましたが、通常 iDC 内での写真撮影は禁止でこれらの写真は事前にさくらインターネットさんに撮影許可をいただいて撮影していることを記載しておきます。