"Wakame"で始めるクラウドコントロール
第4回 クラウド上でデータベースをスケールアウトさせる方法と実例
今回は,データベースとして広く普及している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つです。
- MySQL Master用datadirとしAmazon EBS Volumeを生成
- 1で生成したAmazon EBS VolumeからAmazon EBS Snapshotを生成
- 2で生成したAmazon EBS SnapshotからMySQL Slave用datadirとしてAmazon EBS Volumeを生成
スクリプトの動作解説
スクリプトの動作前提条件は下記の通りです。
- Amazon EC2インスタンスが起動している事
- 起動しているAmazon EC2インスタンスにAmazon EC2 API Toolsの環境が整っている事
→ ツールの整備方法を参考に環境設定してください。
また,スクリプトとして全部で6つのファイルが登場します。
- _wakame-common.sh
- wakame-ebs-mysql-master-create-volume.sh
- wakame-ebs-mysql-master-init.sh
- wakame-ebs-mysql-master-add-repl-user.sh
- wakame-ebs-mysql-master-make-snapshot.sh
- 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"で始めるクラウドコントロール
- 第4回 クラウド上でデータベースをスケールアウトさせる方法と実例
- 第3回 クラウド上でスケールアウトするシステムの作り方と実例
- 第2回 クラウド上でサーバ構成を管理するための考え方と仕掛け
- 第1回 クラウドをコントロールするということの意義


