【GCP入門編・第25回】 Cloud SQL for MySQL で Master-Slave 構成を組もう!

【GCP入門編・第25回】 Cloud SQL for MySQL で Master-Slave 構成を組もう!

GCP

投稿日:2018/11/12 | 最終更新日:2018/12/10

Cloud SQL は、 GCP 上でマネージドのリレーショナルデータベースが利用可能になるサービスとして、2015年12月からベータ版として公開されました。その後、2016年8月に MySQL 互換の第二世代インスタンスが発表され、正式版としての提供が始まりました。また、昨年行われた Google Cloud Next 2017 にて、 PostgreSQL のサポートが発表され、ベータ版としての提供が開始されています。

Cloud SQL は Google の信頼性の高い基盤の上でスケーラブルなデータベースを構築できる上に、フェイルオーバーや Master-Slave レプリケーションなど、自分で全て行うには少し面倒な運用管理が非常に簡単に行えるサービスです。また、ユーザーの管理やデータベースの管理、定期バックアップといった操作は Web コンソールから行うことができますので、管理の手間を低く保つことができます。

このように、単なる MySQL/PostgreSQL を提供するサービスではなく、管理運用の手間が非常に楽になるサービスと考えると、これまで自前で MySQL を運用してきた方も乗り換えるメリットが大きいのではないでしょうか。

この記事では、数ある Cloud SQL の機能から、 Master-Slave レプリケーションを設定する方法を解説します。 Master-Slave レプリケーションの構築を経験した方であれば、すべての操作が Web コンソールで完結することに驚かれるかもしれません。

この記事の目的

  • Master-Slave レプリケーションを設定する方法を覚えよう。

はじめに

最初に Cloud SQL のインスタンスを立ち上げ、 Read Replica (Slave) を追加します。次にサンプルのデータベースを Master にインポートし、 Master 、 Read Replica で正常にレプリケーションが行われていることを確認します。
それでは早速、設定を行っていきましょう。

インスタンスを作成する

GCP の Web コンソールを開き、左側のメニューから SQL をクリックします。すると Cloud SQL のコンソールが表示されますが、この時点ではデータベースのインスタンスが存在していないため、下の画像のように [Create instance][Learn more] が表示された状態となっています。 [Create instance] をクリックし、インスタンスの作成を開始します。

Cloud SQL Overview

すると、データベースの種類を選択する画面が表示されます。この記事では MySQL を使用しますので、 MySQL にチェックを入れ、 [Next] をクリックします。

データベースの選択画面

次にインスタンスのタイプを選択する画面が下の画像のように表示されます。第一世代と第二世代のタイプを選択することができますので、推奨のインスタンスタイプである第二世代を使用します。 [Choose Second Generation] をクリックして、次に進みましょう。

インスタンスタイプの選択画面

インスタンスの世代を選択すると、インスタンスの設定画面に移動します。ここでは、Instance ID に “mysql-1” 、バージョンに MySQL “5.7” を、 Region に “asia-northeast1” を選択します。その他の項目はデフォルトのままにしておきます。

インスタンスの設定画面

画面を下にスクロールすると、 root ユーザーのパスワードを入力するテキストボックスが見えるかと思います。お好きなパスワードを入力するか、 [Generate] をクリック生成することも可能です。

パスワードの生成画面

入力が完了したら、 [Create] をクリックして、データベースを立ち上げます。 Instance details のページにリダイレクトされ、インスタンスの状況が確認できます。

インスタンスのステータス確認画面

インスタンスの構築が完了したら、次にこのインスタンスに Read Replica (Slave) を追加しましょう。

Read Replica を作成する

Read Replica (Slave) の追加は非常に簡単に行えます。まず、 Instance details ページに表示されている 戻る [←] ボタンをクリックします。すると、インスタンスの一覧画面にリダイレクトされます。

ここで、”mysql-1″ インスタンスの行の一番右側に表示されているメニューをクリックすると、下の画像のように [Create Read Replica] というメニュー項目が表示されます。こちらをクリックします。

Create Read Replica を選択

すると先ほどインスタンスを立ち上げた時と同様に、インスタンスの設定画面が表示されます。ここでは特に設定が必要な項目はありませんので、全てデフォルト設定のまま、 [Create] をクリックしましょう。

インスタンスの設定画面

すると、 Read Replica の立ち上げが開始されます。
非常に簡単ですね。

Read Replica の立ち上げ

サンプルデータベースをインポートする

次にサンプルデータベースを作成し、 Master-Slave レプリケーションの動作を確認しましょう。データのインポートは SQL ダンプファイルもしくは CSV ファイルに対応しており、 Cloud Storage 上のバケットに配置したファイルをインポートすることで行います。

まずはサンプルデータベースのダンプファイルを手に入れます。MySQL の公式サイトから、サンプルデータベースをダウンロードします。ここでは、 Example Databases のテーブルにある、 world database をダウンロードします。 Gzip もしくは Zip 形式でダウンロードしたら、解凍し、 world.sql ファイルにしておきます。

サンプルデータベースのダウンロード

次にダンプファイルをアップロードする Cloud Storage のバケットを作成します。 GCP のコンソールを開き、左側のメニューから Storage をクリックします。すると下の図のように [Create Bucket] ボタンが表示されますので、こちらをクリックしましょう。

Cloud Storage のバケット作成

バケットの設定画面が表示されますので、バケットの名前として “mysql-sample-database” と入力し、 [Create] をクリックします。

バケット名の入力

するとバケットのブラウザーが表示されますので、こちらの上部にある [UPLOAD FILES] ボタンをクリックし、先ほど解凍した world.sql を選択してアップロードします。

world.sql のアップロード

アップロードが完了したら、先ほどの Cloud SQL の画面に戻り、インスタンスのリストにある “mysql-1” をクリックして、 Instance details のページを表示します。ここに、 [IMPORT] ボタンがありますのでクリックします。すると、下の図のようにファイルの選択とファイル形式の選択を行う画面が表示されます。ファイル形式は SQL にチェックを入れた状態で、 [Browse] をクリックして先ほどアップロードしたファイルを選択します。

アップロードしたファイルを選択

この状態で [Select] をクリックしてインポートするファイルを選択し、画面に表示されている [Import] をクリックすることで、インポートが開始されます。

インポートの開始

インポートが完了したら、早速 MySQL に接続し、確認してみましょう。

Cloud Shell から MySQL に接続する

MySQL のインスタンスに接続するにはいくつか方法がありますが、ここでは最も手軽に接続が行える、 Cloud Shell からの接続を行います。

まず GCP のコンソール上部に表示されている、ターミナル端末のアイコンをクリックします。すると、画面下に Cloud Shell の画面が表示されます。ここで、以下のように入力します。
 

$ gcloud beta sql connect mysql-1 --user=root

MySQL に接続

このコマンドを実行すると、 “mysql-1” インスタンスに MySQL クライアントで接続が行えます。パスワードの入力を求められますので、最初に設定したパスワードを入力します。コンソールが入力待ち状態になったら、以下のコマンドでデータが格納されていることを確認しましょう。

mysql> use world;
mysql> select * from city;

コマンドを実行

さて、データが格納されていることは確認できましたが、レプリケーションは行われているのでしょうか。次に Read Replica に接続し、確認をしてみます。

一度 exit コマンドで MySQL クライアントを終了し、以下のコマンドを実行します。先ほどと同じコマンドで、接続先が “mysql-1-replica” インスタンスに変わっています。

gcloud beta sql connect mysql-1-replica --user=root

ここでもログインのためにパスワードを求められます。これは最初に設定した “mysql-1” のパスワードと同じものですので、入力しましょう。

MySQL クライアントのコンソールが入力待ちになったら、以下のコマンドを実行して Read Replica の レプリケーションの状態を確認します。

mysql> show slave status;

いかがでしょうか。以下の図のように、 Slave_IO_Status に Waiting for master to send event と表示され、マスターからバイナリログが送信されるのを待っている状態であることがわかるかと思います。表示を見ると、 Master と Slave を接続するのに、 SSL を使って暗号化通信を行なっていることもわかります。

show slave status

おわりに

いかがでしたか。 Cloud SQL で MySQL データベースを運用するのがいかに簡単かが伝わったのではないかと思います。 Cloud SQL ではこのほかにも フェイルオーバーの設定を簡単に行える機能や、ユーザー管理の機能といった様々な機能が付いています。
これまで運用していた MySQL を一気に移行するのが難しい、といった方でも、 GCP の外に Master もしくは Slave を設定する機能がありますので、まずは Slave から移行を行い、 Master の移行を行うといったことも可能です。
もちろん、これから GCP 上で Web アプリケーションを開発するのであれば SQL ではなく Cloud Datastore を検討するのが良いと思います。ただ、以前に開発されたアプリケーションを移行したいといった場合に、便利に使えるのではないでしょうか。

同じシリーズの記事

GCP のメリットを最大限に活用しよう!

GCP・G Suite のご相談・
お見積り依頼はお気軽に
TEL.03-5840-8815
お問合せフォーム TEL.03-5840-8815