このトピックでは、RDS High-availability Edition を実行する ApsaraDB RDS for MySQL インスタンスで読み書き分離を検証する方法について説明します。このトピックでは、Elastic Compute Service (ECS) インスタンスが内部ネットワーク経由で RDS インスタンスに接続されています。
前提条件
RDS High-availability Edition を実行するプライマリ RDS インスタンスが作成されています。
プライマリ RDS インスタンス用に読み取り専用 RDS インスタンスが作成されています。
RDS インスタンスに、少なくとも 1 つのテーブルを含むデータベースが 1 つ以上作成されています。RDS インスタンスのテストアカウントが作成されています。テストアカウントは、標準アカウントまたは特権アカウントです。詳細については、「アカウントとデータベースの作成」をご参照ください。
説明標準アカウントを作成する場合は、必要なデータベースに対する読み取り/書き込み (DDL + DML) 権限を標準アカウントに付与する必要があります。
この例では、testdb01 という名前のデータベース、products という名前のテーブル、cxx1 という名前のテストアカウントが作成されています。
RDS インスタンス用にIP アドレス ホワイトリストが構成されています。
RDS インスタンスに接続した ECS インスタンスは、RDS インスタンスと同じバーチャルプライベートクラウド (VPC) 内にあります。MySQL クライアントは ECS インスタンスにインストールされています。
RDS インスタンスに対してデータベースプロキシ機能が有効になっています。
RDS インスタンスに対してSQL Explorer and Audit 機能が有効になっています。
背景情報
データベースプロキシ機能の読み書き分離機能は、書き込みリクエストをプライマリ RDS インスタンスに転送し、読み取りリクエストを読み取り専用 RDS インスタンスに転送して、自動読み書き分離を実装するのに役立ちます。これにより、プライマリ RDS インスタンスの読み取りリクエストの負荷が軽減されます。データベースプロキシ機能を有効化して構成した後、このトピックで説明されている操作を実行して、指定した読み取りウェイトに基づいて読み取りリクエストと書き込みリクエストが転送されるかどうかを確認できます。
検証プロセス
この例では、ECS インスタンスが内部ネットワーク経由で RDS インスタンスに接続され、読み書き分離の有効性が検証されます。次の手順を実行できます。
ApsaraDB RDS コンソールで、読み取り専用 RDS インスタンスのウェイトを 100 の倍数に設定し、プライマリ RDS インスタンスのウェイトを 0 に設定します。これらの設定により、すべての読み取りリクエストが読み取り専用 RDS インスタンスに転送されます。この例では、読み取り専用 RDS インスタンスのウェイトは 10000 に設定され、プライマリ RDS インスタンスのウェイトは 0 に設定されています。
テストアカウントを使用して、データベースプロキシエンドポイントを使用して ECS インスタンスを RDS インスタンスに接続し、読み取り操作と書き込み操作を実行します。
ApsaraDB RDS コンソールの [SQL Explorer and Audit] ページで、プライマリ RDS インスタンスと読み取り専用 RDS インスタンスで実行された SQL ステートメントのレコードを表示します。
SQL ステートメントの実行レコードに基づいて、読み取りリクエストが読み取り専用 RDS インスタンスによって処理され、書き込みリクエストがプライマリ RDS インスタンスによって処理されるかどうかを確認し、読み書き分離が実装されているかどうかを判断します。
手順
読み取りウェイトを指定します。
ApsaraDB RDS コンソールにログインし、[インスタンス] ページに移動します。上部のナビゲーションバーで、プライマリ RDS インスタンスが存在するリージョンを選択します。次に、プライマリ RDS インスタンスを見つけて、RDS インスタンスの ID をクリックします。
表示されるページの左側のナビゲーションウィンドウで、[データベースプロキシ] をクリックします。表示されるページの [接続情報] セクションで、必要なプロキシエンドポイント (以前はターミナルと呼ばれていました) を見つけます。
プロキシエンドポイントの [アクション] 列の [構成の変更] をクリックします。
表示されるダイアログボックスで、次のパラメーターを構成します。
読み取り/書き込み属性: このパラメーターを 読み取り/書き込み (読み取り/書き込み分離) に設定します。
読み取りウェイトの割り当て: このパラメーターを カスタム に設定します。次に、読み取り専用 RDS インスタンスのウェイトを 10000 に設定し、プライマリ RDS インスタンスのウェイトを 0 に設定します。[OK] をクリックします。
[接続情報] セクションで、必要なプロキシエンドポイントの VPC タイプのプロキシエンドポイントを取得します。
cxx1 テストアカウントを使用して ECS インスタンスをデータベースに接続し、読み取り操作を実行します。
RDS インスタンスに接続する ECS インスタンスにログインします。
説明ECS インスタンスへのログイン方法の詳細については、「インスタンスへの接続」をご参照ください。
次のコマンドを実行して、ECS インスタンスを RDS インスタンスに接続します。
mysql -hProxy endpoint -PPort number -uUsername -pPassword次の表は、前のコマンドで使用されているパラメーターについて説明しています。
パラメーター
説明
構成
プロキシエンドポイント
手順 1 で取得した VPC タイプ のプロキシエンドポイント。手順 1
クライアントを使用して RDS インスタンスに接続する場合は、パブリック プロキシエンドポイントを使用する必要があります。
P
ポート番号。大文字の P の後にポート番号を入力します。
該当なし。
-u
ユーザー名。文字 u の後にユーザー名を入力します。
該当なし。
p
パスワード。小文字の p の後にパスワードを入力します。
-pの後にパスワードを入力します。スペースは使用できません。コマンドを実行する前に
-pの後に入力する代わりに、コマンドを実行した後にパスワードを入力することもできます。これにより、パスワードがプレーンテキストで表示されるのを防ぐことができます。次のコマンドを実行して、データベース testdb01 にアクセスします。
USE testdb01;読み取り操作の SQL ステートメントを 6 回実行します。ステートメントの例:
SELECT * FROM products LIMIT 20;
testdb01 データベースで書き込み操作の SQL ステートメントを 3 回実行します。ステートメントの例:
説明前の手順では、ECS インスタンスを RDS インスタンスに接続し、testdb01 データベースにアクセスしました。詳細については、「手順 2」をご参照ください。
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 );プライマリ RDS インスタンスと読み取り専用 RDS インスタンスで実行された SQL ステートメントのレコードを表示します。
レコードは、すべての SELECT ステートメントが読み取り専用 RDS インスタンスで実行されたことを示しています。 レコードは、すべての CREATE ステートメントがプライマリ RDS インスタンスで実行されたことを示しています。
ApsaraDB RDS コンソールにログインし、[インスタンス] ページに移動します。上部のナビゲーションバーで、プライマリ RDS インスタンスが存在するリージョンを選択します。次に、プライマリ RDS インスタンスを見つけて、RDS インスタンスの ID をクリックします。
プライマリ RDS インスタンスの詳細ページの左側のナビゲーションウィンドウで、 を選択します。表示されるページで、時間範囲を選択し、[クエリ] をクリックします。SELECT ステートメントの実行レコードは見つかりません。
プライマリ RDS インスタンスの詳細ページの左側のナビゲーションウィンドウで、[基本情報] をクリックします。表示されるページの [インスタンスの配布] セクションで、[読み取り専用インスタンス] の右側の数字の上にポインターを移動します。表示されるダイアログボックスで、読み取り専用 RDS インスタンスの ID をクリックします。
読み取り専用 RDS インスタンスの詳細ページの左側のナビゲーションウィンドウで、 を選択します。表示されるページで、時間範囲を選択し、[クエリ] をクリックします。6 回実行された SELECT ステートメントのレコードが表示されます。

プライマリ RDS インスタンスの詳細ページの左側のナビゲーションウィンドウで、 を選択します。表示されるページで、時間範囲を選択し、[クエリ] をクリックします。6 回実行された SELECT ステートメントのレコードが表示されます。

検証の結論
読み取り専用 RDS インスタンスのウェイトが 10000 に設定され、プライマリ RDS インスタンスのウェイトが 0 に設定されている場合、すべての書き込みリクエストはプライマリ RDS インスタンスによって処理され、すべての読み取りリクエストは読み取り専用 RDS インスタンスによって処理されます。このようにして、読み書き分離が実装されます。