ApsaraDB RDS for MySQL インスタンス(RDS High-availability Edition)で読み書き分離を有効化した後、データベースプロキシ経由でテストクエリを実行し、SQL Explorer および Audit のログを確認して、読み取りリクエストが読み取り専用インスタンスに、書き込みリクエストがプライマリインスタンスに正しくルーティングされていることを確認します。
本ガイドでは、内部ネットワーク経由で RDS インスタンスに接続する Elastic Compute Service (ECS) インスタンスを使用します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
High-availability Edition で実行中のプライマリ RDS インスタンス
プライマリインスタンスに対して作成済みの読み取り専用 RDS インスタンス
RDS インスタンス上に、少なくとも 1 つのデータベースとその中に少なくとも 1 つのテーブルが存在し、テスト用アカウント(標準アカウントまたは特権アカウント)が設定されていること — 詳細については、「アカウントとデータベースの作成」をご参照ください。
RDS インスタンスに対して設定済みのIP アドレスホワイトリスト
RDS インスタンスと同じ VPC 内に配置された ECS インスタンス(MySQL クライアントがインストール済み)
RDS インスタンスに対して有効化済みのデータベースプロキシ機能
RDS インスタンスに対して有効化済みのSQL Explorer および Audit 機能
標準アカウントを使用する場合は、対象データベースに対して読み取り/書き込み (DDL + DML)権限を付与してください。本ガイドでは、例としてデータベースtestdb01、テーブルproducts、テストアカウントcxx1を使用します。
仕組み
データベースプロキシは、そのエンドポイントに送信されるすべてのクエリをインターセプトし、読み取り重みの構成に基づいてルーティングします。すなわち、書き込み操作はプライマリインスタンスに、読み取り操作は設定した重みに従って読み取り専用インスタンスにそれぞれ送信されます。
読み取り専用インスタンスの重みをゼロでない値に、プライマリインスタンスの重みを 0 に設定すると、すべての読み取りトラフィックが読み取り専用インスタンスに強制的にルーティングされます。これにより、ルーティング動作を明確に観測可能になります。実行した SELECT 文は、読み取り専用インスタンスの SQL Explorer ログにのみ記録され、プライマリインスタンスのログには一切記録されません。
検証手順
ステップ 1:読み取り重みの設定
ApsaraDB RDS コンソールにログインし、インスタンスページに移動します。プライマリインスタンスのリージョンを選択し、そのインスタンス ID をクリックします。
左側ナビゲーションウィンドウで、データベースプロキシをクリックします。接続情報セクションから、構成対象のプロキシエンドポイントを特定します。
構成の変更を、操作列からクリックします。
ダイアログボックスで、以下のパラメーターを設定し、OK をクリックします。
パラメーター 値 読み書き属性 読み書き (読み書き分離) 読み取り重みの割り当て カスタム 読み取り専用インスタンスの重み 10000プライマリインスタンスの重み 0接続情報セクションから、VPC 型のプロキシエンドポイントをコピーします。このエンドポイントを、ECS インスタンスからの接続に使用します。
ステップ 2:プロキシ経由での読み取り操作の実行
ECS インスタンスにログインします。手順については、「インスタンスへの接続」をご参照ください。
データベースプロキシのエンドポイントを経由して RDS インスタンスに接続します。
プレースホルダー 説明 <proxy-endpoint>ステップ 1 で取得した VPC 型プロキシエンドポイント。VPC 外部から接続する場合は、パブリック型プロキシエンドポイントを使用します。 <port>プロキシのポート番号 <username>テストアカウント名(例: cxx1)<password>アカウントのパスワード。コマンドラインで -pの直後にスペースを空けずに直接入力するか、あるいはパスワードを省略してプロンプト表示時に個別に入力することで、平文での漏洩を防ぎます。mysql -h<proxy-endpoint> -P<port> -u<username> -p<password>テストデータベースに切り替えます。
USE testdb01;以下の SELECT 文を 6 回実行します。
SELECT * FROM products LIMIT 20;
ステップ 3:プロキシ経由での書き込み操作の実行
同一セッション内で、以下の CREATE TABLE 文を 3 回実行します。
CREATE TABLE Products11 (
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT NULL,
prod_desc VARCHAR(1000) NULL
);ステップ 4:SQL Explorer および Audit によるルーティング結果の確認
両インスタンスの SQL ログを確認し、各リクエストが正しいインスタンスにルーティングされたことを検証します。
プライマリインスタンスの確認 — SELECT レコードが存在しないことを確認:
プライマリインスタンスの詳細ページ左側ナビゲーションウィンドウで、自律サービス > SQL Explorer および Audit を選択します。
テスト実行期間を含む時間範囲を選択し、クエリ をクリックします。
SELECT 文のレコードが一切表示されず、CREATE TABLE 文のレコードのみが表示されることを確認します。
読み取り専用インスタンスの確認 — 6 件の SELECT レコードが存在することを確認:
プライマリインスタンスの詳細ページ左側ナビゲーションウィンドウで、基本情報 をクリックします。インスタンス分布 セクション内の 読み取り専用インスタンス の横にあるカウント数にカーソルを合わせ、読み取り専用インスタンスの ID をクリックします。
読み取り専用インスタンスの左側ナビゲーションウィンドウで、自律サービス > SQL Explorer および Audit を選択します。
同じ時間範囲を選択し、クエリ をクリックします。6 件の SELECT 文のレコードが表示されることを確認します。

プライマリインスタンスの再確認 — 3 件の CREATE TABLE レコードが存在することを確認:
プライマリインスタンスの詳細ページ左側ナビゲーションウィンドウで、自律サービス > SQL Explorer および Audit を選択します。同じ時間範囲を選択し、クエリ をクリックします。3 件の CREATE TABLE 文のレコードが表示されることを確認します。
検証の結論
読み取り専用インスタンスの重みを 10000、プライマリインスタンスの重みを 0 に設定した場合:
すべての書き込みリクエスト(CREATE TABLE)はプライマリインスタンスによって処理されます。
すべての読み取りリクエスト(SELECT)は読み取り専用インスタンスによって処理されます。
これは、読み書き分離が正しく機能していることを確認するものです。