LoginSignup
3
4

【OCI クラウド移行ガイド】Amazon RDS for MySQLからOracle Cloud MDSへVPN経由でInboundレプリケーションを設定してみた~MySQL編~

Last updated at Posted at 2023-11-11

OCIクラウド移行ガイドとは

オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。

移行したいサンプルワークロード

日々の業務でよく目にするサービスを中心に、サンプルワークロードとしてまとめてみました。このシリーズでは、主にAWSからの移行を取り上げます。
このワークロードは、ユーザがログインして、Web上で写真を共有するWebサービスをイメージしています。

image.png

移行するサービス:Amazon RDS for MySQL

今回はAWS RDS for MySQLからMDSに移行を実施する際、様々な手法/手段が考えられますが今回はMySQLの機能を利用したレプリケーションを試してみたいと思います。
MDSは仕様上、RDSとは異なりパブリックエンドポイントを持つことは現時点(2023年11月時点)ではできません。
以前は中継サーバを用いたインターネット経由でのレプリケーションを実現しましたが、今回の記事はVPN経由で直接AWS RDSからOCI MDSにレプリケーションを実施してみました。
過去記事は以下です。

作業の流れ

⓪AWSとOCI間でVPN接続した環境の構築
①OCI ComputeにてMySQLクライアントのセットアップ
②RDSの構築及び、レプリケーションに向けたセットアップ
③RDS→MDSへのレプリケーション設定
④同期確認

image.png

⓪AWSとOCI間でVPN接続した環境の構築

OCI MDSはパブリックエンドポイントを持つことができないため、AWSとOCIをVPN接続する必要があります。
今回、VPN接続の設定方法は以下記事を参考にしました。

無事にVPN接続ができれば以降の工程に進みます。

①OCI ComputeにてMySQLクライアントサーバのセットアップ

1-1MySQLのインストール

MySQLチームが提供しているyumの公式リポジトリをセットアップします
リポジトリ追加

 sudo yum install https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm

RHEL8系のOSの場合、デフォルトで有効になっているMySQLモジュールを無効化する必要があるため、以下のコマンドを実行
デフォルトMySQLモジュールの無効化

sudo yum module disable mysql

mysqlのインストール

sudo yum install mysql-community-server

mysqlshellのインストール

sudo yum install mysql-shell

②RDSの構築及び、レプリケーションに向けたセットアップ

②-1 RDSの構築

RDS構築の際、以下を実施する必要があります。
①カスタムパラメータグループ にて以下3オプションの有効化を実施
 GTID-MODE=ON
 ENFORCE_GTID_CONSISTENCY=ON
 binlog_format=ROW
image.png
image.png
image.png

②構築時のオプションにて①で作成したカスタムパラメータグループの指定
image.png

③パブリックアクセスの無効化
※VPN経由の場合、パブリックアクセスを有効化するとエンドポイント指定時にグローバルIPが返ってきて接続エラーとなるので注意ください
image.png

④自動バックアップの有効化

image.png

②-2 RDSのセットアップ

踏み台サーバからRDSにアクセスを実施

mysql -u admin -p -h エンドポイント

レプリケーションユーザ作成を実施
※後ほどMDSのチャネル設定で利用するのですが、以下のパスワードポリシーがあるためそれに準拠した任意のパスワードとしてください
パスワードは8文字から32文字までの長さで、大文字、小文字、数字および特殊文字をそれぞれ1つ以上含める必要があります。

create user usertemp@'%' identified  by 'Manager@123';
grant replication slave on *.* to usertemp@'%';

次にRDSのGTID_executedをメモしておきます。

mysql> show global variables like 'GTID%';
+----------------------------------+-------------------------------------------+
| Variable_name                    | Value                                     |
+----------------------------------+-------------------------------------------+
| gtid_executed                    | f8fc4d14-79d8-11ee-a0fa-06d25f27ce47:1-14 |
| gtid_executed_compression_period | 0                                         |
| gtid_mode                        | ON                                        |
| gtid_owned                       |                                           |
| gtid_purged                      | f8fc4d14-79d8-11ee-a0fa-06d25f27ce47:1-10 |
+----------------------------------+-------------------------------------------+
5 rows in set (0.01 sec)

③RDS→MDSへのレプリケーション設定

③-1 MDSの作成

MDSの作成を実施します。
AWSとVPN接続しているVPC/プライベートサブネットを指定してください

③-1 MDS側のレプリケーションセットアップ

先ほどRDSで確認したGTIDをパージします

call sys.set_gtid_purged("RDSで確認したGTID");
call sys.set_gtid_purged("f8fc4d14-79d8-11ee-a0fa-06d25f27ce47:1-14");

③-2 RDSからMySQLへのレプリケーションを設定します:OCI コンソールに移動

作成したMDSの画面より"チャネル"タブへ移動し、チャネルの作成を実施します。

・チャネル作成
 名前:rds_channel(任意項目)
 説明:rds_channel(任意項目)
・ソース接続
 ホスト名:RDSのエンドポイント
 MySQLポート:3306
 ユーザ名:RDSで作成したレプリケーション用ユーザ名
 パスワード:RDSで作成したレプリケーション用ユーザのパスワード
・SSLモード:無効(DISABLED)
・レプリケーションのポジショニング:ソースで、GTID自動ポジションを私用できます(推奨)
・ターゲットDBシステム
 Applierユーザ名:空白
 チャネル名:replication_channel(任意項目)
・主キーのない表:許可(ALLOW)
・チャネル・フィルタ・オプションの表示
 共通フィルタ・テンプレート:AWS RDS MySQL8.0

※チャネル・フィルタ・オプションの設定を忘れるとチャネル作成後、エラーとなるので必ず設定してください
詳細背景についてはこちらに記載がありますが、RDSで作成される特定のテーブルがエラー起因となるようでそれを回避するためになります

以下入力イメージ
image.png
image.png
image.png
image.png

チャネル設定完了後、以下のようにアクティブなっていれば問題ありません
image.png

④同期確認

④-1 RDSにてDB作成

同期確認のため、マスタであるRDSにアクセス、DB作成をします。

mysql -u admin -p -h エンドポイント

DBの作成

CREATE DATABASE rpl;

テーブル作成

CREATE TABLE rpl.test(id int AUTO_INCREMENT, col1 CHAR(10), PRIMARY KEY(id));

データ挿入

INSERT INTO rpl.test VALUES(1, "TEST");

結果確認

SELECT * FROM rpl.test;

以下実行結果
mysql> SELECT * FROM rpl.test;
+----+------+
| id | col1 |
+----+------+
|  1 | TEST |
+----+------+
1 row in set (0.01 sec)

④-2 MDSにてレプリケーションされているか確認

mysql -u admin -p -h ホスト名orプライベートIP

DB一覧を確認し、"rpl"があるこを確認

SHOW DATABASES;

以下実行結果
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| mysql_audit        |
| performance_schema |
| rpl                |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

RDSと同様の結果が返ってくること確認

SELECT * FROM rpl.test;
以下実行結果
mysql> SELECT * FROM rpl.test;
+----+------+
| id | col1 |
+----+------+
|  1 | TEST |
+----+------+
1 row in set (0.00 sec)

こちらで問題なくAWS RDSとOCI MDSのVPN経由でのレプリケーションが実施できました。

参考

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4