ApsaraDB RDS for MySQL インスタンスに接続されているデータベースプロキシエンドポイントの読み取り/書き込み属性と読み取り重みは、データベースプロキシエンドポイントが処理する必要があるリクエストのタイプと処理ロジックを決定します。ビジネス要件に基づいて、データベースプロキシエンドポイントの読み取り/書き込み属性と読み取り重みを変更できます。このトピックでは、データベースプロキシエンドポイントの読み取り/書き込み属性と、読み取り/書き込み属性に基づくリクエスト処理ロジックについて説明します。また、ApsaraDB RDS コンソールで、および API オペレーションを呼び出すことによって、データベースプロキシエンドポイントの読み取り/書き込み属性と読み取り重みを構成する方法についても説明します。
前提条件
RDS インスタンスでデータベースプロキシ機能が有効になっていること。
RDS インスタンスが RDS High-availability Edition または RDS Cluster Edition で実行されていること。
説明RDS インスタンスが RDS High-availability Edition で実行されている場合は、RDS インスタンスに対して読み取り専用 RDS インスタンスを作成して、読み取り/書き込み分離を実装できます。
RDS インスタンスが RDS Cluster Edition で実行されている場合は、RDS クラスタ内のプライマリノードとセカンダリノードを使用して読み取り/書き込み分離を実装できます。RDS Cluster Edition で実行されている RDS インスタンスは、RDS クラスタと呼ばれます。
読み取り/書き込み属性
読み取り/書き込み属性には、読み取り/書き込みと読み取り専用があります。
読み取り/書き込み: この属性は、読み取り/書き込み分離をサポートするために使用されます。読み取り/書き込み分離は、データベースシステムのワークロード処理能力を線形的にスケーリングするのに役立ちます。
この属性を選択する場合は、使用するデータベースプロキシエンドポイントがプライマリ RDS インスタンスと少なくとも 1 つの読み取り専用 RDS インスタンスに接続されており、データベースプロキシエンドポイントがすべての書き込みリクエストをプライマリ RDS インスタンスに転送していることを確認してください。データベースプロキシエンドポイントは、以前はプロキシターミナルと呼ばれていました。この属性は、トランザクション分割やコネクションプーリングなどの読み取り/書き込み分離機能をサポートしています。
読み取り専用: この属性は、レポートなどの読み取り専用リクエストを処理するために使用されます。
この属性を選択する場合は、使用するデータベースプロキシエンドポイントが少なくとも 1 つの読み取り専用 RDS インスタンスに接続されており、データベースプロキシエンドポイントがプライマリ RDS インスタンスにリクエストを転送していないことを確認してください。この属性は、トランザクション分割をサポートしていません。
データベースプロキシエンドポイントに対して読み取り専用属性を選択すると、システムは、データベースプロキシエンドポイントに接続されている読み取り専用 RDS インスタンスに新しい接続を順番に分散します。この場合、各クライアント接続は 1 つの読み取り専用 RDS インスタンスに分散され、プライマリ RDS インスタンスは関与しません。使用可能な接続の総数は、データベースプロキシエンドポイントに接続されているすべての読み取り専用 RDS インスタンスへの接続の合計です。
RDS インスタンスが RDS Cluster Edition で実行されており、データベースプロキシエンドポイントに対して読み取り/書き込み属性を選択した場合、すべての書き込みリクエストはプライマリノードのみに送信されます。RDS インスタンスが RDS Cluster Edition で実行されており、データベースプロキシエンドポイントに対して読み取り専用属性を選択した場合、システムは、データベースプロキシエンドポイントに接続されているセカンダリノードに新しい接続を順番に分散し、プライマリノードは関与しません。
データベースプロキシの IP アドレスホワイトリストは、プライマリ RDS インスタンスの IP アドレスホワイトリストと一致します。プライマリ RDS インスタンスの IP アドレスホワイトリストが更新されると、データベースプロキシの IP アドレスホワイトリストも更新されます。
単一障害点(SPOF)を防ぐために、少なくとも 2 つの読み取り専用 RDS インスタンスを作成し、ゾーンをまたいで読み取り専用 RDS インスタンスをデプロイすることをお勧めします。ゾーン間のアクセスによって発生するネットワークレイテンシを削減するには、ニアレストアクセス機能を有効にすることができます。詳細については、「ニアレストアクセス機能を構成する」をご参照ください。
読み取り/書き込み属性に基づく処理ロジック
読み取り/書き込み属性 | 重みを指定する方法 | プライマリ RDS インスタンスの重み | 正常なケース | 最後の読み取り専用 RDS インスタンスが削除された場合 | すべての読み取り専用 RDS インスタンスに障害が発生した場合 |
読み取り専用 | 自動またはカスタム | プライマリ RDS インスタンスの読み取り重みを指定することはできません。 |
|
|
|
読み取り/書き込み | 自動 | 0 に等しい重み 詳細については、「システムによる読み取り重みの割り当てルール」をご参照ください。 |
|
|
|
カスタム | 0 より大きい重み |
|
|
| |
0 に等しい重み |
|
|
|
リクエスト転送なし: プライマリ RDS インスタンスは読み取り専用リクエストの転送に関与しません。
接続エラー: 読み取り専用属性を持つデータベースプロキシエンドポイントで読み取りリクエストと書き込みリクエストを処理できない場合、エラーが報告されます。
読み取り/書き込みモードでは、プライマリ RDS インスタンスの重みが 0 に設定されている場合、読み取りリクエストはプライマリ RDS インスタンスに転送されません。プライマリ RDS インスタンスの読み取り専用 RDS インスタンスに障害が発生した場合、強制ヒントが指定されている場合、またはトランザクション分割が有効になっている場合、読み取りリクエストはプライマリ RDS インスタンスに転送されます。
重みが O&M に及ぼす影響
データベースプロキシのバージョンを表示する方法については、「データベースプロキシバージョンのリリースノート」をご参照ください。データベースプロキシのバージョンをアップグレードする方法については、「データベースプロキシのバージョンをアップグレードする」をご参照ください。
O&M 操作 | データベースプロキシバージョン 2.8.41 以降 | データベースプロキシバージョン 2.8.41 より前 |
新しいセッションの作成時に、重みが 0 に設定されている RDS インスタンスへの接続が確立されますか? | いいえ | いいえ |
RDS インスタンスの重みが 0 以外の値から 0 に変更された場合、既存のセッションからインスタンスは削除されますか? | いいえ | いいえ |
RDS インスタンスの重みが 0 以外の値から 0 に変更された場合、既存のセッションのリクエストは新しい重みに基づいて転送されますか? | いいえ |
|
RDS インスタンスの重みが 0 から 0 以外の値に変更された場合、インスタンスは既存のセッションに追加されますか? | いいえ | はい |
RDS インスタンスの重みが 0 から 0 以外の値に変更された場合、既存のセッションのリクエストは新しい重みに基づいて転送されますか? | いいえ |
|
重みが 0 以外の値に設定されている読み取り専用 RDS インスタンスが削除された場合、既存のセッションで一時的な切断が発生しますか? | いいえ 説明
| はい |
重みが 0 に設定されている読み取り専用 RDS インスタンスが削除された場合、既存のセッションで一時的な切断が発生しますか? | いいえ | 既存のセッションが使用可能で、セッションでリクエストが実行されている場合、セッションで一時的な切断が発生します。使用可能な既存のセッションがない場合、またはセッションでリクエストが実行されていない場合、セッションは接続されたままになります。 |
重みが 0 に設定されている読み取り専用 RDS インスタンスの接続が終了した場合、接続は切断されますか? | はい | データベースプロキシがバージョン 1.x を実行しており、active_session メトリックの値が 0 に減少しない場合、接続は切断されます。データベースプロキシがバージョン 1.x を実行しており、active_session メトリックの値が 0 に減少した場合、接続は切断されず、自動的に確立できます。 |
重みが 0 以外の値に設定されている読み取り専用 RDS インスタンスの接続が終了した場合、接続は切断されますか? |
手順
インスタンス ページに移動します。上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。
左側のナビゲーションウィンドウで、[データベースプロキシ] をクリックします。
[接続情報] セクションで、変更するデータベースプロキシエンドポイントを見つけて、[操作] 列の [構成の変更] をクリックします。
表示されるダイアログボックスで、[読み取り/書き込み属性] を [読み取り/書き込み (読み取り/書き込み分離)] または [読み取り専用 (プライマリインスタンスは書き込みリクエストを受信するために接続されていません)] に設定します。
[読み取りウェイトの割り当て] パラメーターを [自動] または [カスタム] に設定します。
自動: システムは、RDS インスタンスの仕様に基づいて、データベースシステムの各 RDS インスタンスに読み取り重みを割り当てます。読み取り専用 RDS インスタンスを作成すると、システムは自動的に読み取り専用 RDS インスタンスに読み取り重みを割り当て、読み取り専用 RDS インスタンスを読み取り/書き込み分離リンクに追加します。詳細については、「システムによる読み取り重みの割り当てルール」をご参照ください。
カスタム: 各インスタンスに読み取り重みを指定できます。有効な値: 0 ~ 10000。このオプションを選択すると、プライマリ RDS インスタンスに読み取り専用 RDS インスタンスが作成されるたびに、システムは読み取り専用 RDS インスタンスの読み取り重みを 0 に設定します。読み取り専用 RDS インスタンスの読み取り重みを変更する必要があります。
ニアレストアクセス機能により、リクエストがアプリケーションからデータベースプロキシに転送されます。読み取り重み構成により、リクエストがデータベースプロキシからバックエンドデータベースに転送されます。これは、ニアレストアクセス機能の影響を受けません。アクセスレイテンシを最小限に抑えるには、2 つの機能を一緒に使用する必要があります。
読み取り重みを割り当てるために使用されるメソッド。読み取り重みが高いほど、処理が必要な読み取りリクエストが多いことを示します。たとえば、3 つの読み取り専用 RDS インスタンスがプライマリ RDS インスタンスに接続されているとします。プライマリ RDS インスタンスの読み取り重みは 0 で、3 つの読み取り専用 RDS インスタンスの読み取り重みは 100、200、200 です。この場合、プライマリ RDS インスタンスは書き込みリクエストのみを処理し、3 つの読み取り専用 RDS インスタンスは 1:2:2 の比率に基づいてすべての読み取りリクエストを処理します。
読み取り専用 RDS インスタンスを削除すると、読み取り専用 RDS インスタンスの読み取り重みも削除されます。ただし、他の RDS インスタンスの読み取り重みは変更されません。
データレプリケーションレイテンシが指定されている読み取り専用 RDS インスタンスに重みを指定することはできません。
このパラメータを変更すると、新しい読み取り重みがすぐに有効になります。変更によってサービスが利用できなくなることはありません。変更後も、既存の接続は有効なままです。既存の接続と新しい接続を介して送信されるリクエストは、新しい重みに基づいて転送されます。
関連操作
操作 | 説明 |
インスタンスのデータベースプロキシの詳細をクエリします。 | |
インスタンスのデータベースプロキシエンドポイントの接続設定をクエリします。データベースプロキシエンドポイントは、以前はプロキシターミナルと呼ばれていました。 | |
インスタンスのデータベースプロキシエンドポイントの接続設定を変更します。 |
付録 1: ヒントを使用して、RDS High-availability Edition を実行するプライマリ RDS インスタンスと読み取り専用 RDS インスタンス、または RDS クラスタのプライマリノードとセカンダリノードで実行される SQL 文を指定する
読み取り/書き込み分離の重み割り当てシステムに加えて、ヒントは、RDS High-availability Edition を実行するプライマリ RDS インスタンスと読み取り専用 RDS インスタンス、または RDS クラスタのプライマリノードとセカンダリノードで実行される SQL 文を指定するための補足的な SQL 構文として機能します。
次のセクションでは、読み取り/書き込み分離でサポートされているヒントの形式について説明します。
RDS High-availability Edition の RDS インスタンス
/*FORCE_MASTER*/
: 後続の SQL 文がプライマリインスタンスで実行されるように指定します。/*FORCE_SLAVE*/
: 後続の SQL 文が読み取り専用インスタンスで実行されるように指定します。
RDS Cluster Edition の RDS インスタンス
/*FORCE_MASTER*/
: 後続の SQL 文がプライマリノードで実行されるように指定します。/*FORCE_SLAVE*/
: 後続の SQL 文がセカンダリノードで実行されるように指定します。
RDS High-availability Edition を実行する RDS インスタンスに /*FORCE_MASTER*/ を使用すると、プライマリインスタンスの読み取り重みが 0 であっても、SQL 文はプライマリ RDS インスタンスで実行されます。
RDS Cluster Edition を実行する RDS インスタンスに /*FORCE_MASTER*/ を使用すると、クラスタ内のプライマリノードの読み取り重みが 0 であっても、SQL 文はプライマリノードで実行されます。
たとえば、RDS High-availability Edition を実行する RDS インスタンスの次の文の前にヒントを追加すると、プライマリインスタンスの重みに関係なく、文はプライマリ RDS インスタンスで実行されます。
/*FORCE_MASTER*/ SELECT * FROM table_name;
付録 2: 読み取り専用 RDS インスタンスを気付かれずに削除する
読み取り/書き込み分離を実装するために、データベースシステムに 1 つのプライマリ RDS インスタンス(プライマリインスタンス A)と 2 つの読み取り専用 RDS インスタンス(読み取り専用インスタンス B と C)がプロビジョニングされているとします。読み取り専用インスタンス C を気付かれずに削除するには、次の手順を実行します。
ApsaraDB RDS コンソールにログインし、インスタンス ページに移動します。上部のナビゲーションバーで、プライマリインスタンス A が存在するリージョンを選択します。次に、プライマリインスタンス A を見つけて、インスタンス ID をクリックします。
[データベースプロキシ] ページの [接続トポロジ管理] セクションで、[構成の変更] をクリックします。
[プロキシエンドポイント (ターミナル) 構成の変更] ダイアログボックスで、削除する読み取り専用インスタンス C の読み取り重みを 0 に設定します。
読み取り専用インスタンス C の [監視とアラート] ページで、[セッション] 監視項目の active_session メトリックの値を確認し、メトリックの値が 0 に減少するまで待ちます。
説明active_session メトリックの値が 0 かどうかを確認するだけで済みます。値が長時間 0 にならない場合は、セッションを終了できます。
プライマリインスタンス A の [データベースプロキシ] ページに移動して、データベースプロキシエンドポイントから読み取り専用インスタンス C を削除します。