TOPシステム開発> tmpfsにMySQLデータを移動する
まるごとperl!
事例編〜Web 2.0サービスの中を見せます

第6回:データベースの負荷分散とまとめ
著者:はてな  伊藤 直也   2006/11/1
前のページ  1  2  3
tmpfsにMySQLデータを移動する

   このオンメモリデータによる高速データベースの構築方法ですが、手順はリスト5の通りです。
リスト5:tmpfsをマウント
$ sudo mkdir -p /shm/mysql/bookmark
$ sudo mount -t tmpfs -o size=2048m tmpfs /dev/shm
$ sudo mount -t tmpfs -o size=2048m /dev/shm /shm/mysql/bookmark

   まず、tmpfsを作成し、適当なマウントポイントにマウントします。ここでは/shm/mysql/bookmarkというディレクトリを作り、そこに2048MBのtmpfsをマウントしています。

   次に、MySQLのデータを元々ある場所からコピーして移動します(リスト6)。

リスト6:データベースをtmpfsにコピー
$ cd /var/lib/mysql/bookmark
$ sudo cp *.* /shm/mysql/bookmark

   /var/lib/mysql/bookmarkにあるものとします。なお、はてなブックマークでは各テーブルのストレージエンジンに、参照系クエリーが高速なMyISAMを採用しています。MyISAMテーブルのデータはコピーするだけで移動させることができます。データのコピーを行う最中に更新処理がかからないよう、MySQLは停止しておきましょう。

   これで準備は整いました。あとはMySQLの設定ファイルであるmy.cnfで、新しいデータの格納ディレクトリを設定してやればOKです。/etc/my.cnfを編集し、以下の一文を加えます。

datadir=/shm/mysql/bookmark
   設定が済んだところでMySQLを起動してください。


以降・・・ひたすらサーバーを追加する

   はてなブックマークでのWebサーバー、データベースサーバーの増設の過程を解説してきました。ここまでで解説した時点では、Webサーバーが3台、データベースサーバーが2台とまだ小さな構成です。が、ここから先の負荷分散は、しばらくの間は難しいことはありません。ここまで増設したのと同じ方法で、適宜サーバーを追加していけばよいのです。

   負荷分散のコツは、いかにサーバーを追加するだけで分散できるようなシステムを構築するかにかかっています。負荷を分散する必要が出るたびにアプリケーションを作り変えたり、大きな作業が発生するようでは、メンテナンスにコストがかかりすぎます。サーバーを増やすだけでよい環境であれば、チープなサーバーが簡単に手に入る昨今ですから、コストは最小限に抑えられます。


まとめ

   簡単になりますが、はてなブックマークを題材にしたLAMPでの中規模アプリケーションの運用ノウハウを解説してきました。本稿で触れた方法論は非常にオーソドックスなもので、いろいろな環境で応用が利くのではないかと思います。PerlでのWebアプリケーション開発の知恵として参考にしていただければ幸いです。

   なお、冒頭で紹介したYAPC::Asiaでの発表資料には、本稿で触れたトピック以外にもmod_perl2.0の話題、botプログラムからのアクセスを分散するノウハウ、データベースのコネクションプーリングに関する是非といった、今回は触れなかったトピックについても記述してあります。興味のある方は是非ご一読いただければと思います。

前のページ  1  2  3


株式会社はてな 伊藤 直也
著者プロフィール
株式会社はてな  伊藤 直也
取締役最高技術責任者
ブログサービスやソーシャルブックマークなど、はてなの各種サービスの企画、開発を行う。著書に「BlogHacks」(オライリージャパン刊)。「続・初めてのPerl」(オライリージャパン)、「Perl救命病棟」(翔泳社刊)では監訳を務めた。


INDEX
第6回:データベースの負荷分散とまとめ
  データベースの負荷分散
  アプリケーションの特性を考えたデータベース設計を
tmpfsにMySQLデータを移動する