OCIクラウド移行ガイドとは
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。
移行したいサンプルワークロード
日々の業務でよく目にするサービスを中心に、サンプルワークロードとしてまとめてみました。このシリーズでは、主にAWSからの移行を取り上げます。
このワークロードは、ユーザがログインして、Web上で写真を共有するWebサービスをイメージしています。
移行するサービス: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へのレプリケーション設定
④同期確認
⓪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
②構築時のオプションにて①で作成したカスタムパラメータグループの指定
③パブリックアクセスの無効化
※VPN経由の場合、パブリックアクセスを有効化するとエンドポイント指定時にグローバルIPが返ってきて接続エラーとなるので注意ください
④自動バックアップの有効化
②-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で作成される特定のテーブルがエラー起因となるようでそれを回避するためになります
チャネル設定完了後、以下のようにアクティブなっていれば問題ありません
④同期確認
④-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経由でのレプリケーションが実施できました。
参考