この記事は、ニフクラブログで2020-09-30に公開された記事を移転したものです。
こんにちは、ニフクラ技術支援チームです。
ニフクラRDBは外部レプリケーション機能を備えています。
そこに複数のゾーン・リージョンのプライベートLAN同士をL2接続するプライベートブリッジを組み合わせることにより、リージョン間でもセキュアかつ安定したプライベート通信でのレプリケーションを実現可能です。
今回は、別リージョンを利用したRDBのデータ保全を、より高速かつセキュアに行って可用性を高める目的で、ニフクラ クラウドデザインパターンの「3.【ネットワーク応用】ニフクラ クラウドデザインパターン」-「リージョン間接続パターン(プライベートブリッジ)」の構成を参考に、プライベートブリッジを利用して東西間でのRDB外部レプリケーション構成を実装してみます。
構成イメージ
前提条件
本ブログは、以下の前提知識がある方を想定しています。
ニフクラの基本的なコントロールパネルの操作、サービスを利用に関する知識
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を接続します。
こちらのブログ記事で紹介しています。あわせてご参照ください。
③ 仮想サーバーの作成
今回は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」を選択します。
基本設定
外部レプリケーションを利用する場合、「冗長化」には【シングル構成】または【冗長構成(データ優先)】を選択する必要があります。本検証では【シングル構成】を指定します。
「VIP」には外部から接続するときに指定するIPアドレスを指定してください。このIPアドレスが外部レプリケーション設定時に指定するIPアドレスになります。
「ソースDBのプライベートIPアドレス」には任意のプライベートIPを指定してください。このIPアドレスは外部レプリケーションには使用しません。
項目 | ソース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で同一に設定します。
項目 | ソースDB設定値 | レプリカDB設定値 | 備考 |
---|---|---|---|
DB名 | kenshodb | kenshodb | ソースDB・レプリカDBで同じ設定とする |
マスターユーザー名 | kenshouser | kenshouser | ソースDB・レプリカDBで同じ設定とする |
マスターユーザーのパスワード | ******** | ******** | ソースDB・レプリカDBで同じ設定とする |
オプション設定
外部レプリケーションを利用する場合、ソースDBは「自動バックアップ」を有効化(YES)に設定する必要があります(レプリカ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に対して設定を行います。
設定値は以下の通りです。
項目 | 設定値 | 備考 |
---|---|---|
レプリケーション情報を設定するDBサーバー | replicadb | レプリカDBのホスト名・変更不可 |
マスターとなるDBサーバーのIPアドレスまたはホスト名 | 192.168.10.101 | ソースDBのVIPを指定 |
マスターとなるDBサーバーのポート番号 | 3306 | デフォルトのレプリケーション用ポートを指定 |
レプリケーションユーザー名 | kenshouser | マスターユーザー名を指定 |
レプリケーションユーザーのパスワード | ******** | マスターユーザーのパスワードを指定 |
レプリケーションを開始するバイナリログファイル名 | mysql-bin-changelog.002552 | 事前に確認したバイナリログ名を指定 |
レプリケーションを開始するバイナリログファイル内の位置 | 298 | 事前に確認したバイナリログの位置を指定 |
外部レプリケーション開始
設定時と同じく、レプリカDBに対して操作します。
【開始する】をクリックすると外部レプリケーションを開始します。
③ 外部レプリケーションの確認
レプリカ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月時点の情報です。利用時には各サービス/ニフクラの機能の最新情報をご確認いただきご利用ください。