"Wakame"で始めるクラウドコントロール

第4回 クラウド上でデータベースをスケールアウトさせる方法と実例

この記事を読むのに必要な時間:およそ 11 分

今回は,データベースとして広く普及しているMySQLを例に,Amazon EC2上でMySQLのレプリケーション機能を用いてMaster-Slave構成を作り,そのSlaveを実に手軽に追加できるようにするための手順について説明します。

MySQLのレプリケーション機能でWakameは本領を発揮する

一般的に,MySQLのレプリケーションとは,Masterと呼ばれるデータの原本1つを,可能な限り同期複製させることが出来る機能のことを言います。複製されたものはSlaveと呼ばれ,1つのMasterに対して複数接続することが可能です。

より複雑な構成も取れるのですが,基本的なトポロジはスター型となります。レコードの読み出しクエリであれば,各Slaveへ分散させて性能を向上させることが出来ます。そのため,サイトのトラフィックが増加して来た時,まず最初に行われる対策として良く利用される機能でもあります。

これらの作業に必要な手順は,非常に複雑なので,MySQLのプロダクトをうまくコントロールする仕組みが不可欠です。早速Wakameでこの手順を自動化してみることにしましょう。

基本原理を理解する

まず,基本原理を理解するために,Amazon EC2とAmazon EBSによるMySQLレプリケーション設定方法を示しておきます。Wakameで簡単に実行できるようにする方法については,後ほど詳しく見ていくことにします。

Amazon EC2で試せるスクリプトの概要と準備

参考のために,MySQLとAmazon EBSを連動させた動作確認目的でシェルスクリプトを作成しました。ここで作成されたシェルスクリプトを使うだけでもMySQL Slave追加作業が簡略化されます。

スクリプトの動作処理は,大きく分けて3つです。

  1. MySQL Master用datadirとしAmazon EBS Volumeを生成
  2. 1で生成したAmazon EBS VolumeからAmazon EBS Snapshotを生成
  3. 2で生成したAmazon EBS SnapshotからMySQL Slave用datadirとしてAmazon EBS Volumeを生成

スクリプトの動作解説

スクリプトの動作前提条件は下記の通りです。

  1. Amazon EC2インスタンスが起動している事
  2. 起動しているAmazon EC2インスタンスにAmazon EC2 API Toolsの環境が整っている事
    ツールの整備方法を参考に環境設定してください。

また,スクリプトとして全部で6つのファイルが登場します。

  1. _wakame-common.sh
  2. wakame-ebs-mysql-master-create-volume.sh
  3. wakame-ebs-mysql-master-init.sh
  4. wakame-ebs-mysql-master-add-repl-user.sh
  5. wakame-ebs-mysql-master-make-snapshot.sh
  6. wakame-ebs-mysql-slave-restore.sh

各スクリプトの概要は,以下の通りです。

なお,Amazon EC2上でMySQLレプリケーション構成を構築するには,以下の手順が必要になりますので,詳細を知りたい方はぜひスクリプトの流れと合わせて追いかけて見てください。

_wakame-common.sh
  • 全スクリプトからincludeされるファイル
  • 共通設定項目
wakame-ebs-mysql-master-create-volume.h
  • Amazon EBS Volumeを新規生成
  • 生成したAmazon EBS Volumeをデバイス名指定でattach
  • Amazon EBS Volume上にファイルシステムを生成
  • Amazon EBS VolumeをMySQL Master用datadirとしてマウント
wakame-ebs-mysql-master-init.sh
  • MySQL Master用datadirのオーナーをmysqlへ変更
  • MySQL Master用datadirを初期化
wakame-ebs-mysql-master-add-repl-user.sh
  • レプリケーション用MySQLアカウントをMySQL Masterに作成
wakame-ebs-mysql-master-make-snapshot.sh
  • attach済みAmazon EBS Volumeのvolume-idを取得
  • MySQL Masterに対し"FLUSH TABLES WITH READ LOCK"でデータが更新されないようにテーブルをロック
  • MySQL Masterのポジション情報を取得
  • MySQL Slave用にmaster.infoを生成
  • MySQL Master用datadirからAmazon EBS Snapshotを生成
  • Amazon EBS Snapshot生成後,"UNLOCK TABLES;"でMySQL Masterのテーブルロックを解除
wakame-ebs-mysql-slave-restore.sh
  • MySQL Master用datadirをもとに生成したAmazon EBS Snapshotのsnapshot-idを指定し,Amazon EBS Volumeを新規生成
  • Amazon EBS Snapshotから生成したAmazon EBS Volumeを,Amazon EC2インスタンスIDとデバイス名を指定してattach
  • attachしたAmazon EBS VolumeをMySQL Slave用datadirとしてマウント

著者プロフィール

山崎泰宏(やまざきやすひろ)

株式会社あくしゅ所属。Wakameをやろうと思いつくところを担当。物静かな技術者の代わりに話をする。

URLhttp://blog.livedoor.jp/sparklegate/


藤原勝弘(ふじわらまさひろ)

株式会社あくしゅ所属。Wakameのコア実装を担当。コンシューマ向けサービスの開発や,外資金融系の堅牢なデータセンタ業務経験もあるカバーレンジの広い多才なプログラマ。

URLhttp://vcxzasdf.blogspot.com/


吉田将士(よしだまさひと)

株式会社あくしゅ所属。WakameをDBスケールなどに応用する開発を担当。大規模なデータセンタの運用経験を持っており,サーバ管理手順の自動化に興味津々な筋トレプログラマ。

URLhttp://blog.hansode.org/

コメント

コメントの記入