ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

プライベートブリッジを利用したリージョン間のRDB外部レプリケーション機能の検証

こんにちは、ニフクラ技術支援チームです。

ニフクラRDBは外部レプリケーション機能を備えています。
そこに複数のゾーン・リージョンのプライベートLAN同士をL2接続するプライベートブリッジを組み合わせることにより、リージョン間でもセキュアかつ安定したプライベート通信でのレプリケーションを実現可能です。
今回は、別リージョンを利用したRDBのデータ保全を、より高速かつセキュアに行って可用性を高める目的で、ニフクラ クラウドデザインパターンの「3.【ネットワーク応用】ニフクラ クラウドデザインパターン」-「リージョン間接続パターン(プライベートブリッジ)」の構成を参考に、プライベートブリッジを利用して東西間でのRDB外部レプリケーション構成を実装してみます。

構成イメージ

f:id:TechnicalAccountEngineer:20200916135259j:plain
構成図

前提条件

本ブログは、以下の前提知識がある方を想定しています。

  • ニフクラの基本的なコントロールパネルの操作、サービスを利用に関する知識

  • Linuxの基本的な操作、設定に関する知識

  • MySQLの基本的な操作、設定に関する知識

利用リソース

east-11にソースDB用、west-13にレプリカDB用のRDBを作成します。(以下、これらのRDBをソースDB・レプリカDBと表記します。)
レプリケーションを開始すると、ソースDBの更新情報がレプリカDBへ送信され、ソースDBとレプリカDBが同期されます。
また、各RDBへmysql接続するための仮想サーバーを各リージョンに用意します。
ネットワークリソースは、プライベートブリッジ・プライベートLAN・コネクターを用意します。

east-11

リソース 数量
RDB(RDBMS:MySQL 5.7.15) 1
仮想サーバー(OS:CentOS 7.7) 1
プライベートLAN 1
コネクター 1

west-13

リソース種別 数量
RDB(RDBMS:MySQL 5.7.15) 1
仮想サーバー(OS:CentOS 7.7) 1
プライベートLAN 1
コネクター 1

リージョン共通

リソース種別 数量
プライベートブリッジ(リーチャビリティ:jp-east-1/jp-west-1) 1

環境構築

① プライベートLANの作成

各リージョンにプライベートLANを作成します。
各プライベートLANは同じIPアドレス帯になるよう設定してください。
本検証ではIPアドレス帯を「192.168.10.0/24」としています。
作成方法の詳細は以下をご参照ください。
クラウドヘルプ(プライベートLAN:作成)

② プライベートブリッジ/コネクターの作成

プライベートブリッジとコネクターを作成して、各リージョンのプライベートLANを接続します。
プライベートブリッジとコネクターの作成についてはニフクラブログでもご紹介していますので、ご参照ください。
プライベートLAN同士を接続する機能 プライベートブリッジ の提供を開始しました - ニフクラ ブログ

③ 仮想サーバーの作成

今回はCentOSを使用しているため、SSHキーの作成が必須となります。
また、サーバーのFWは必要な通信のみ許可するよう、適切に設定します。
ここでは設定項目や設定値は省略させて頂きます。
作成方法の詳細は以下をご参照ください。
クラウドヘルプ(SSHキー)
クラウドヘルプ(サーバーの作成)
クラウドヘルプ(ファイアウォールグループの新規作成)

④ MySQLクライアントのインストール

RDBへログインするため、作成したサーバーにMySQLクライアントをインストールします。

MySQL Yumリポジトリのインストール

# rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

MySQLクライアントのインストール

# yum -y install mysql-community-client

⑤ RDB用FWの作成

各リージョンにRDB用FWを作成します。
今回は検証のため、FWルールはプライベートLANのIPアドレス帯「192.168.10.0/24」の通信を許可する設定とします。
作成方法の詳細は以下をご参照ください。
クラウドヘルプ(RDB:DBファイアウォールの作成)
クラウドヘルプ(RDB:DBファイアウォールの操作)

⑥ RDBの作成

各リージョンにRDB(east-11にソースDB、west-13にレプリカDB)を作成します。
ここでは外部レプリケーション構成を構築する際の設定例をご紹介します。
RDBの作成方法の詳細は以下をご参照ください。
クラウドヘルプ(RDB:DBサーバーの作成)

DBエンジンの選択

今回は「MySQL 5.7.15」を選択します。
f:id:TechnicalAccountEngineer:20200915154323j:plain

基本設定

外部レプリケーションを利用する場合、「冗長化」には【シングル構成】または【冗長構成(データ優先)】を選択する必要があります。本検証では【シングル構成】を指定します。
「VIP」には外部から接続するときに指定するIPアドレスを指定してください。このIPアドレスが外部レプリケーション設定時に指定するIPアドレスになります。
「ソースDBのプライベートIPアドレス」には任意のプライベートIPを指定してください。このIPアドレスは外部レプリケーションには使用しません。

f:id:TechnicalAccountEngineer:20200916160851j:plain
DBサーバー作成 - 基本設定

項目 ソースDB設定値 レプリカDB設定値 備考
DBサーバー名 sourcedb replicadb 任意のホスト名を指定
ゾーン east-11 west-13 使用するリージョンを指定
DBサーバータイプ db.e-medium4 db.e-medium4 任意のタイプを指定
料金プラン 従量 従量 任意のプランを指定
ディスクタイプ HDD HDD 任意のタイプを指定
冗長化 シングル構成 シングル構成 外部レプリケーションを使用する場合はシングル構成または冗長構成(データ優先)を選択
グローバルIPアドレス 利用しない 利用しない 任意で指定。本検証では利用しない
プライベートLAN (作成したプライベートLAN) (作成したプライベートLAN) 作成したプライベートLANを指定
VIP 192.168.10.101/24 192.168.10.102/24 外部から接続する任意のプライベートIPアドレスを指定
ソースDBのプライベートIPアドレス 192.168.10.11/24 192.168.10.12/24 任意のプライベートIPアドレスを指定
DBファイアウォール (作成済みのFW) (作成済みのFW) 作成したRDB用FWを指定
DBパラメータグループ default.mysql5.7 default.mysql5.7 デフォルトを指定

DB設定

「DB名」「マスターユーザー名」「マスターユーザーのパスワード」の設定値は、ソースDBとレプリカDBで同一に設定します。

f:id:TechnicalAccountEngineer:20200915154650j:plain
設定例(DBサーバー作成 - DB設定)

項目 ソースDB設定値 レプリカDB設定値 備考
DB名 kenshodb kenshodb ソースDB・レプリカDBで同じ設定とする
マスターユーザー名 kenshouser kenshouser ソースDB・レプリカDBで同じ設定とする
マスターユーザーのパスワード ******** ******** ソースDB・レプリカDBで同じ設定とする

オプション設定

外部レプリケーションを利用する場合、ソースDBは「自動バックアップ」を有効化(YES)に設定する必要があります(レプリカDBは任意設定)。
本検証では、自動バックアップ有効化に伴うバックアップ保持期間・バックアップ時間設定・メンテナンス時間設定は考慮しないため、最小値かつ自動設定としています。

f:id:TechnicalAccountEngineer:20200915154936j:plain
設定例(DBサーバー作成 - オプション設定)

項目 ソースDB設定値 レプリカDB設定値 備考
自動バックアップ YES YES ソースDBは有効化に設定、レプリカDBは任意設定
バックアップ保持期間 1日 1日 任意設定
バックアップ時間設定 指定しない(自動設定) 指定しない(自動設定) 任意設定
メンテナンス時間設定 指定しない(自動設定) 指定しない(自動設定) 任意設定

以上で今回利用するリソースの作成が完了しました。
続いて外部レプリケーションの設定を行っていきます。

外部レプリケーション設定

① server-idの確認(ソースDB/レプリカDB作業)

ソースDBとレプリカDBが異なるserver-idであることを確認します。

server_id確認(ソースDB:east-11の仮想サーバーで実施)

# mysql -u kenshouser -p -h 192.168.10.101    #RDBログイン
Enter password: (パスワード入力してENTER)
mysql> SHOW VARIABLES LIKE 'server_id';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| server_id     | 158485485 |
+---------------+-----------+

server_id確認(レプリカDB:west-13の仮想サーバーで実施)

# mysql -u kenshouser -p -h 192.168.10.102    #RDBログイン
Enter password: (パスワード入力してENTER)
mysql> SHOW VARIABLES LIKE 'server_id';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| server_id     | 300083094 |
+---------------+-----------+

② バイナリログの確認(ソースDB)

ソースDBのバイナリログ名とポジションを確認します。
これら値は外部レプリケーション設定時に使用します。

バイナリログの確認

mysql> FLUSH TABLES WITH READ LOCK;  #テーブルのロック
mysql> SHOW MASTER STATUS;    #バイナリログの表示
+----------------------------+----------+--------------+------------------+-------------------+
| File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------------+----------+--------------+------------------+-------------------+
| mysql-bin-changelog.002552 |      298 |              |                  |                   |
+----------------------------+----------+--------------+------------------+-------------------+

③ 外部レプリケーション設定/開始

外部レプリケーションの設定と開始はコントロールパネルから行います。
※設定手順については以下もご参照ください。
クラウドユーザーガイド(RDB:外部レプリケーションの設定)
クラウドヘルプ(RDB:DBサーバーの操作)

外部レプリケーション設定

レプリカDBに対して設定を行います。
f:id:TechnicalAccountEngineer:20200915105723j:plain
設定値は以下の通りです。

f:id:TechnicalAccountEngineer:20200916161026j:plain
設定例(外部レプリケーション設定)

項目 設定値 備考
レプリケーション情報を設定するDBサーバー replicadb レプリカDBのホスト名・変更不可
マスターとなるDBサーバーのIPアドレスまたはホスト名 192.168.10.101 ソースDBのVIPを指定
マスターとなるDBサーバーのポート番号 3306 デフォルトのレプリケーション用ポートを指定
レプリケーションユーザー名 kenshouser マスターユーザー名を指定
レプリケーションユーザーのパスワード ******** マスターユーザーのパスワードを指定
レプリケーションを開始するバイナリログファイル名 mysql-bin-changelog.002552 事前に確認したバイナリログ名を指定
レプリケーションを開始するバイナリログファイル内の位置 298 事前に確認したバイナリログの位置を指定

外部レプリケーション開始

設定時と同じく、レプリカDBに対して操作します。 f:id:TechnicalAccountEngineer:20200915111543j:plain
【開始する】をクリックすると外部レプリケーションを開始します。 f:id:TechnicalAccountEngineer:20200916161306j:plain

③ 外部レプリケーションの確認

レプリカDBのレプリケーションステータスを確認し、ソースDBの更新が反映されるか確認していきます。

レプリカDBのステータス確認

指定したソースDBに接続できていること、【Slave_IO_Running】と【Slave_SQL_Running】が【Yes】になっていることを確認します。
以下、レプリカDBでの作業です。

mysql> SHOW SLAVE STATUS\G    #レプリカのステータス表示
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.101
                  Master_User: kenshouser
                  Master_Port: 3306
~~~(略)~~~
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
~~~(略)~~~

ソースDBの更新

ソースDBでデータベース作成・テーブル更新を行います。
以下、ソースDBでの作業です。

mysql> UNLOCK TABLES;    #テーブルのアンロック
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE DATABASE repli_test;    #データベースの作成
Query OK, 1 row affected (0.00 sec)

mysql> SHOW  DATABASES;    #作成したデータベースの確認
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| kenshodb           |
| mysql              |
| performance_schema |
| repli_test         |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

mysql> USE repli_test;    #データベース変更
Database changed

mysql> CREATE TABLE test (    #テーブル作成
    ->   name VARCHAR(30),
    ->   en VARCHAR(30)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO test(name,en) VALUES ('みかん','Mandarin orange');    #行の挿入
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO test(name,en) VALUES ('りんご','apple');    #行の挿入
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM test;    #表の確認
+-----------+-----------------+
| name      | en              |
+-----------+-----------------+
| みかん    | Mandarin orange |
| りんご    | apple           |
+-----------+-----------------+
2 rows in set (0.00 sec)

レプリカDBへの反映確認

ソースDBで更新した内容が、レプリカDBに反映されていることを確認します。
以下、レプリカDBでの作業です。

mysql> SHOW DATABASES;    #データベース一覧を表示
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| kenshodb           |
| mysql              |
| performance_schema |
| repli_test         |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

mysql> USE repli_test;    #データベース変更
Database changed

mysql> SHOW TABLES;    #テーブル表示
+--------------------------+
| Tables_in_repli_test     |
+--------------------------+
| test                     |
+--------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM test;    #表の表示
+-----------+-----------------+
| name      | en              |
+-----------+-----------------+
| みかん    | Mandarin orange |
| りんご    | apple           |
+-----------+-----------------+
2 rows in set (0.00 sec)

ソースDBで更新したテーブルが、レプリカDBに反映されていることを確認できました。

まとめ

今回はプライベートブリッジを使用した、プライベート通信でのリージョン間RDBレプリケーションの構築方法をご紹介しました。一部を除きレプリケーション設定のほとんどはコントロールパネルから実施可能なため、比較的簡単に設定できたと思います。

本検証では新規作成したRDBを使った設定手順をご紹介しましたが、既存のRDBに対してレプリケーション設定を行うことも可能です。(既存RDBでレプリケーション構成を設定する場合は、事前にソースDBのダンプを取得後レプリカDBにリストアを行い、ソースDBとレプリカDBの環境を揃えてから設定を行うとスムーズです。)

また、RDB同士だけでなく、DBMSをインストールしたニフクラ仮想サーバーとRDBの間でも問題なくレプリケーションが可能であると考えられます。

「セキュアで安定した通信で、遠隔地へレプリケーションしたい」といったときは、ぜひプライベートブリッジを使ったリージョン間レプリケーションをお試しください。
今回は利用していませんが、プライベートブリッジには帯域確保のメニューもあります。性能をお求めの場合には利用をご検討ください。
帯域確保についてはこちらのブログ記事で紹介しています。あわせてご参照ください。

ここまで読んでいただきありがとうございました!

注意事項

  • 本記事については検証結果の1つとなります。実際に検討される場合は、事前にそれぞれの要件を鑑みて実装するか確認してください。
  • 本記事ではOS上の操作についても記載していますが、ニフクラではOS以上はご利用者様の責任範囲となりますのでご留意ください。
  • 本記事で記載した各サービス/ニフクラの機能等は、2020年9月時点の情報です。利用時には各サービス/ニフクラの機能の最新情報をご確認いただきご利用ください。