ApsaraDB RDS for MySQLインスタンスに接続されているデータベースプロキシエンドポイントの読み取りおよび書き込み属性と読み取り重みによって、データベースプロキシエンドポイントが処理する必要のあるリクエストの種類と処理ロジックが決まります。 ビジネス要件に基づいて、データベースプロキシエンドポイントの読み取りおよび書き込み属性と読み取り重みを変更できます。 このトピックでは、データベースプロキシエンドポイントの読み取りおよび書き込み属性と、読み取りおよび書き込み属性に基づくリクエスト処理ロジックについて説明します。 このトピックでは、ApsaraDB RDSコンソールで、API操作を呼び出して、データベースプロキシエンドポイントの読み取りおよび書き込み属性と読み取り重みを設定する方法についても説明します。
前提条件
RDSインスタンスでデータベースプロキシ機能が有効になっています。 詳細については、「データベースプロキシ機能の有効化」をご参照ください。
RDSインスタンスは、RDS High-availability EditionまたはRDS Cluster Editionを実行します。
説明RDSインスタンスがRDS High-availability Editionを実行している場合、RDSインスタンスの読み取り専用RDSインスタンスを作成して、読み書き分離を実装できます。 詳細については、「読み取り専用ApsaraDB RDS For MySQLインスタンスの作成」をご参照ください。
RDSインスタンスがRDS Cluster Editionを実行している場合、RDSクラスターのプライマリノードとセカンダリノードを使用して、読み書き分離を実装できます。 RDS Cluster Editionを実行するRDSインスタンスは、RDSクラスターと呼ばれます。
単一障害点を回避するために、プライマリインスタンス用に異なるゾーンに少なくとも2つの読み取り専用インスタンスを作成することを推奨します。
読み取りおよび書き込み属性
読み取りおよび書き込み属性は、読み取り /書き込みおよび読み取り専用です。
Read/Write: この属性は、読み書き分離をサポートするために使用されます。 読み書き分割は、データベースシステムのワークロード処理機能を線形にスケーリングするのに役立ちます。 詳細については、「読み書き分離とは何ですか? 」をご参照ください。
この属性を選択した場合、使用するデータベースプロキシエンドポイントがプライマリ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アドレスホワイトリストも更新されます。
読み取りおよび書き込み属性に基づく処理ロジック
読み取りおよび書き込み属性 | 読み取り重みを指定するメソッド | プライマリRDSインスタンスの重み | 通常のケース | 最後の読み取り専用RDSインスタンスの削除後 | すべての読み取り専用RDSインスタンスに障害が発生した場合 |
読み取り専用 | 自動またはカスタム | プライマリRDSインスタンスに読み取り重みを指定することはできません。 |
|
|
|
読み取り /書き込み | 自動 | 0に等しい重み 詳細については、「システムによる読み取り重み割り当てのルール」をご参照ください。 |
|
|
|
Custom | 0より大きい重み |
|
|
| |
0に等しい重み |
|
|
|
リクエスト転送なし: プライマリRDSインスタンスが読み取り専用リクエスト転送に関与していないことを示します。
接続エラー: 読み取り専用属性を持つデータベースプロキシエンドポイントの接続設定で読み取りおよび書き込み要求を処理できない場合、エラーが報告されることを示します。
読み取り /書き込みモードで、プライマリRDSインスタンスの重みが0に設定されている場合、読み取りリクエストはプライマリRDSインスタンスに転送されません。 プライマリRDSインスタンスの読み取り専用RDSインスタンスに障害がある場合、強制的なヒントが指定されている場合、またはトランザクション分割が有効になっている場合、読み取り要求はプライマリRDSインスタンスに転送されます。
手順
ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDSインスタンスが存在するリージョンを選択し、RDSインスタンスを見つけて、インスタンスIDをクリックします。
左側のナビゲーションペインで、[データベース] をクリックします。
[接続情報] セクションで、変更するデータベースプロキシエンドポイントを見つけ、[操作] 列の [設定の変更] をクリックします。
表示されるダイアログボックスで、[読み取り /書き込み属性] を [読み取り /書き込み (読み取り /書き込み分割)] または [読み取り専用] (プライマリインスタンスが書き込みリクエストの受信に接続されていません) に設定します。
[読み取り重み割り当て] を [自動] または [カスタム] に設定します。
自動: システムは、RDSインスタンスの仕様に基づいて、データベースシステム内の各RDSインスタンスに読み取り重みを割り当てます。 読み取り専用RDSインスタンスを作成すると、読み取り専用RDSインスタンスに読み取り重みが自動的に割り当てられ、読み取り専用RDSインスタンスが読み書き分離リンクに追加されます。 詳細については、「システムによる読み取り重み割り当てのルール」をご参照ください。
カスタム: 各インスタンスの読み取り重みを指定できます。 有効な値: 0 ~ 10000 このオプションを選択した場合、プライマリRDSインスタンスに対して読み取り専用RDSインスタンスが作成されるたびに、システムは読み取り専用RDSインスタンスの読み取り重みを0に設定します。 読み取り専用RDSインスタンスの読み取り重みを変更する必要があります。
読み取り重み割り当てパラメーターは、読み取り重みを割り当てるために使用されるメソッドを指定します。 より高い読み取り重みは、より多くの読み取り要求が処理される必要があることを示す。 たとえば、3つの読み取り専用RDSインスタンスがプライマリRDSインスタンスにアタッチされています。 プライマリRDSインスタンスの読み取り重みは0で、3つの読み取り専用RDSインスタンスの読み取り重みは100、200、200です。 この場合、プライマリRDSインスタンスは書き込みリクエストのみを処理し、3つの読み取り専用RDSインスタンスは1:2:2の比率に基づいてすべての読み取りリクエストを処理します。
読み取り専用RDSインスタンスを削除すると、読み取り専用RDSインスタンスの読み取り重みも削除されます。 ただし、他のRDSインスタンスの読み取り重みは変更されません。
データレプリケーションのレイテンシーが指定されている読み取り専用RDSインスタンスには重みを指定できません。 詳細については、「読み取り専用ApsaraDB RDS For MySQLインスタンスのデータレプリケーション遅延の設定」をご参照ください。
このパラメーターを変更すると、新しい読み取り重みがすぐに有効になります。 変更によってサービスが利用できなくなることはありません。 変更後、既存の接続は有効なままです。 既存および新しい接続を介して送信される要求は、新しい重みに基づいて転送されます。
関連する API 操作
API 操作 | 説明 |
インスタンスのデータベースプロキシの詳細を照会します。 | |
インスタンスのデータベースプロキシエンドポイントの接続設定を照会します。 データベースプロキシエンドポイントは、以前はプロキシ端末と呼ばれていました。 | |
インスタンスのデータベースプロキシエンドポイントの接続設定を変更します。 |
付録: ヒントを使用して、RDS High-availability Editionを実行するプライマリおよび読み取り専用RDSインスタンス、またはRDSクラスターのプライマリノードとセカンダリノードで実行するSQL文を指定します。
読み書き分離の重み割り当てシステムに加えて、ヒントは補完的なSQL構文として機能し、RDS High-availability Editionを実行するプライマリおよび読み取り専用RDSインスタンス、またはRDSクラスターのプライマリノードとセカンダリノードで実行される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であっても、プライマリRDSインスタンスでSQL文が実行されます。
RDS Cluster Editionを実行するRDSインスタンスに /* FORCE_MASTER * /を使用すると、プライマリノードの読み取り重みが0であっても、クラスター内のプライマリノードでSQL文が実行されます。
たとえば、RDS High-availability Editionを実行しているRDSインスタンスの次のステートメントの前にヒントを追加した場合、プライマリインスタンスの重みに関係なく、そのステートメントはプライマリRDSインスタンスで実行されます。
/*FORCE_MASTER*/ SELECT * FROM table_name;