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