【新機能レビュー】RDS の Native Replication 機能を使ってみた

2025年3月14日掲載

img-alibaba-cloud-linux-migration-blog-20230519-001

皆さんこんにちは、ソフトバンクの康です。

Alibaba CloudのApsaraDB for RDSは高性能なマネージドデータベースサービスです。

このブログでは、RDS for MySQLの新機能であるNative Replicationについて実際に構築し、その動作を確認した結果を紹介します。

目次

1. 機能紹介

Alibaba CloudのApsaraDB for RDSは高性能なマネージドデータベースサービスです。このブログでは、RDS for MySQLの新機能であるNative Replicationについて実際に構築し、その動作を確認した結果を紹介します。

1.1 Native Replication とは

レプリケーション機能は元々オリジナルMySQLデータベースが持っている機能で、今回Alibaba Cloud RDSでもレプリケーション機能を利用できるようになりました。

Change Master to、Start Slave などのMySQLのオリジナルコマンドの実行にはroot権限(super 権限)が必要です。Alibaba Cloud RDSや他のクラウドのRDSも、セキュリティー上の理由で上記の実行権限は付与されていませんでした。今回、Native Replication機能を有効化すると上記のコマンドが実行できるようになります。ただ、現段階ではRDSのNative Replication機能は一部のRegionと一部のバージョンのみ利用可能という制限がございます。

詳細については公式ページをご参照ください。

1.2 主なシナリオ

HA構成

クラウド サービスとデータ センター間、または Alibaba Cloud プラットフォームとサードパーティのクラウド プラットフォーム間でデータを相互にバックアップできます。プライマリ データベースに障害が発生した場合は、ワークロードをセカンダリ データベースにすばやく切り替えて、サービスのダウンタイムを最小限に抑えることができます。

データ移行

ネイティブ レプリケーション機能を使用して、Elastic Compute Service (ECS) インスタンスまたはデータ センター内のセルフマネージド MySQL データベースのデータをクラウド上に移行できます。これにより、移行プロセスが簡素化され、リスクが軽減されます。

負荷分散

複数のスレーブサーバを保持することで、処理性能の拡張性や耐障害性の向上を狙いとしています。また、書き込み処理はマスター側で行い、読み込み処理はスレーブ側で行うことにより、マスターサーバーの負荷が軽減され、システム全体的なパフォーマンスが向上されます。

1.3 機能イメージ

pic-01

1.4 レプリケーションの主要な構成要素

・バイナリログ(Binary Log)
マスターサーバーが記録する変更履歴。レプリケーションの基盤となる。

・リレーログ(Relay Log)
スレーブサーバーがマスターから取得したバイナリログを保存する。

・I/Oスレッド
スレーブがマスターのバイナリログを取得してリレーログに書き込む。

・SQLスレッド
リレーログを解析し、実際にスレーブのデータベースを更新する。

1.5 レプリケーションのメカニズム

MySQLのデータレプリケーションは、主にMySQLのバイナリログ(Binary Log)を使用してデータの変更を別のサーバーにコピーする仕組みです。主にマスター(オンプレミス環境DB)とスレーブ(RDS for MySQL)の関係で構成されます。

・マスター(オンプレミスDB)側

 ①クライアントがマスターに対してデータ変更クエリ(INSERT, UPDATE, DELETE など)を実行

 ②マスターは変更内容をバイナリログ(Binary Log)に記録

 ③スレーブがバイナリログを取得できるようにリレーログ(Relay Log)に転送

・ スレーブ(RDS for MySQL)側

 ④スレーブはマスターのバイナリログを読み取り、自身のリレーログ(Relay Log)に保存

 ⑤リレーログの内容を解析し、スレーブのデータベースに適用(SQLスレッドが実行)

2. 構築手順

今回は実際にRDS for MySQLのNative Replication 機能を利用し、オンプレミス環境のMySQLデータベースからRDSにデータの移行・同期が実現できるかを検証したいと思います。

2.1 前提条件

Native Replication 機能を利用するには、以下のすべての条件をクリアする必要があります。

  • エンジン バージョン: MySQL 5.7
  • 製品シリーズ: Basic Edition
  • カーネル バージョン: 20240930 以上
  • サポートされているRegionとZone:
    • 中国東部1(杭州) ZoneJ
    • 中国北部2(北京) ZoneI、ZoneK
    • 中国南西部1(成都)ZoneA、ZoneB
    • シンガポール ZoneA

❊現在RDS ネイティブ レプリケーションはまだテスト段階であり、この機能を利用するにはAlibabaCloudコンソールからチケットを起票して、申請する必要があります。

2.2 Native Replication 機能の有効化

Alibaba Cloud コンソールから、Native Replication 機能を有効化する流れを記載します。

1.  RDS MySQL Basic Edition インスタンスを作成します。 作成手順は、「RDS MySQL インスタンスの作成」を参照してください。

2. RDSにログインするための特権ユーザー以外、replicaというユーザも作成する必要があります。

pic-02

3. RDSコンソールにアクセスし、上部のリージョンを選択してから、対象インスタンス ID をクリックします。

pic-03

4.インスタンスの基本情報ページで、右上隅にある [Enable Native Replication] ボタンをクリックします。

pic-04

5. [ネイティブ レプリケーション モードの開始] ポップアップ ウィンドウで、[OK] をクリックします。

pic-05

2.3 オンプレミス環境のDBでデータのバックアップを行う

オンプレミス環境(CentOS7.9)にてすでに以下のMysql 5.7 データベースが作成済みです。

今回インストールされたローカルMysql 5.7 データベースに以下のデータが入っています。

pic-06

2.3.1 xtrabackupをインストールします。

以下のコマンドを実行し、オンプレミス環境にxtrabackupというバックアップツールをインストールします。

yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum list | grep percona
percona-release enable-only tools release
yum install -y percona-xtrabackup-24

2.3.2 オンプレミス環境のMysql 5.7のデータをバックアップします。

以下のコマンドを実行し、オンプレミス環境にインストールされたローカルMysql 5.7のデータをバックアップします。

xtrabackup --backup \
  --host=127.0.0.1 \
  --port=3306 \
  --user={ローカルMySQLのユーザ名} \
  --password={ローカルMySQLのパスワード} \
  --stream=xbstream \
  --compress > ./{ファイル名,例:backup_1206.xb}
pic-07

2.3.3 バックアップデータをOSSにアップロード

a.以下のコマンドでossutilをインストールします。

yum install -y unzip
sudo -v;
curl https://gosspublic.alicdn.com/ossutil/install.sh 

b. 以下のコマンドを実行し、認証情報を設定します。

ossutil config

OSS Endpoint: <OSSコンソールのBucket概要ページで確認できます。>

AccessKeyId: <Your_AccessKeyId>

AccessKeySecret: <Your_AccessKeySecret>

stsToken: <空白のままで大丈夫です>

❊AccessKeyId、AccessKeySecretの確認方法は公式ドキュメントDevelopment preparationsをご参照ください。

pic-08

 c. 以下のコマンドを実行し、バックアップデータをOSSにアップロードします。

ossutil cp {バックアップデータのファイル名} oss://{Bucket_name} /
pic-09

2.4 バックアップデータをRDSにインポートする

2.4.1  インスタンスの再構築

RDS インスタンス 一覧から対象インスタンスIDをクリックし、 RDS MySQL インスタンスの基本情報ページで、右上隅の [Rebuild Instance] をクリックします。

pic-10

2.4.2  バックアップデータのインポート

インスタンスの再構築画面で、OSSのbucketを選択し、先ほどOSSにアップロードしたバックアップデータファイルを選択します。

pic-11

2.4.3  バックアップデータが反映されていることを確認

RDS MySQL 5.7データベースにログインし、バックアップからデータが復元されていることを確認します。

pic-12

2.5 MySQLのネイティブ レプリケーション経路を作成する

2.5.1 ローカルMySQLデータベースでレプリケーションユーザーを作成する

CREATE USER 'replica'@'%' IDENTIFIED BY 'Test123!';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;

2.5.2 ローカルMySQLデータベースでGtidパラメータを有効にする

以下のコマンドを実行し、 gtid_modeをONに設定します。

SET GLOBAL gtid_mode=ON;
pic-13

2.5.3 RDS MySQLインスタンスに接続

以下のコマンドを実行し、RDS MySQLインスタンスに接続します。詳細はMySQL接続をご参照ください。

mysql -h{接続アドレス} -P{ポート番号} -u{ユーザ名} -p{パスワード}

重要:RDS MySQLインスタンスの特権ユーザーでMySQLデータベースに接続する必要があります。

2.5.4 ネイティブ レプリケーション経路を作成する

RDS MySQLインスタンスにて、以下のコマンドを実行し、 MySQLのネイティブ レプリケーション経路を作成します。

CHANGE MASTER TO 
MASTER_HOST = '{ローカルMySQLのIP}',
MASTER_USER = '{MySQLレプリケーションユーザ}',
MASTER_PASSWORD ='{パスワード}',
MASTER_PORT=3306,
MASTER_AUTO_POSITION = 1;

# レプリケーションを開始する
START SLAVE;

2.5.5 レプリケーションの状態確認

以下のコマンドを実行し、レプリケーションのステータスを確認します。

SHOW SLAVE STATUS\G
pic-14

3. 構築後の動作確認

3.1 データが同期されていることの確認

Master データベースとSlave データベースの同期状態を確認し、レプリケーションが成功しているかを確認します。

a. Master DBにてデータを一行追加します。

insert into emp values(106,'渋谷','1996-11-27',450000,2);
pic-15

b. Slave DBでその変更が反映されていることを確認します。

pic-16

4. 推奨構成

4.1 推奨構成パターン

RDS側でCHANGE MASTER TO MASTER_HOSTによりMater側のIPアドレスを指定する必要があると思います。RDSはVPCネットワーク内に属しているため、直接パブリックIPを通じて外部との通信はNGとなっているようです。そのため、RDSからオンプレミス環境などにあるローカルデータベースと通信する場合、事前にCENなどの専用線を利用してAlibaba Cloud VPC環境とオンプレミス環境のネットワークを接続する必要があります。

具体的な構成シナリオとネットワーク環境の設定は公式ドキュメント Configure network settingsをご参照ください。

5. 最後に

本章はRDSとオンプレミス環境のセルフマネージド MySQL データベース間でMySQLネイティブレプリケーション機能を利用し、実際にデータのバックアップ、データの同期ができるかを検証してみました。

CHANGE MASTER、STOP SLAVE、START SLAVEなどのコマンドはSuper権限が必要です。今まで、RDSではセキュリティ上の問題で、このような権限はサポートされていませんでした。今回ネイティブ レプリケーションの新機能をきっかけに、上記のコマンドが実行できるようになりましたので、興味がある方はぜひお試し頂ければと思います。

おすすめの記事

条件に該当するページがございません