データベースシステムが多数の読み取りリクエストを受信し、少数の書き込みリクエストを受信した場合、プライマリApsaraDB RDS for MySQLインスタンスのパフォーマンスが影響を受けます。 データベースシステムのデータベースプロキシ機能の読み書き分離を使用できます。 データベースシステムは、データベースプロキシエンドポイントを使用して、読み取りおよび書き込み要求を自動的に転送できます。 データベースプロキシエンドポイントは、読み取り要求を読み取り専用RDSインスタンスに転送します。 これにより、プライマリRDSインスタンスの負荷を軽減できます。 データベースプロキシエンドポイントは、以前はプロキシ端末と呼ばれていました。
概要
読み取り専用RDSインスタンスが作成された後、読み書き分離を有効にして、システムがこれらのインスタンスの読み取り重みに基づいて、書き込みリクエストをプライマリRDSインスタンスに転送し、読み取りリクエストを読み取り専用RDSインスタンスに転送できるようにします。 これにより、プライマリRDSインスタンスの負荷を軽減できます。 詳細については、「データベースプロキシとは」をご参照ください。
メリット
メンテナンスを容易にする統一エンドポイント
読み書き分離を無効にした場合、プライマリRDSインスタンスと読み取り専用RDSインスタンスのエンドポイントをアプリケーションに追加した後にのみ、読み書き分離を実行できます。
読み書き分離を有効にした場合、データベースプロキシエンドポイントに接続するだけで、プライマリRDSインスタンスと読み取り専用RDSインスタンスに自動的に転送される書き込みリクエストと読み取りリクエストを処理できます。 これにより、メンテナンスコストの削減に役立ちます。
読み取り専用RDSインスタンスを作成して、アプリケーションの設定データを変更することなく、データベースシステムの読み取り機能を向上させることもできます。
パフォーマンスを向上させ、メンテナンスコストを削減するネイティブリンク
クラウドで独自のプロキシ層を構築して読み書き分離を実装する場合、データがデータベースシステムに到達する前に、データを複数のコンポーネントで解析して転送する必要があります。 その結果、応答レイテンシが増加する。 ApsaraDB RDSエコシステムに読み書き分離機能が組み込まれているため、応答待ち時間の短縮、処理速度の向上、メンテナンスコストの削減が可能です。
さまざまなシナリオでの適合性を確保するための読み取り重みとしきい値の設定
プライマリRDSインスタンスと読み取り専用RDSインスタンスの読み取り重みを指定できます。 読み取り専用RDSインスタンスへのデータレプリケーションのレイテンシしきい値を指定することもできます。
サービスの可用性を向上させるインスタンスレベルのヘルスチェック
読み書き分離は、プライマリRDSインスタンスとその読み取り専用RDSインスタンスのヘルスステータスを自動的にチェックします。 読み取り専用RDSインスタンスが予期せずダウンした場合、またはデータレプリケーションの待ち時間が指定されたしきい値を超えた場合、システムは読み取り専用インスタンスへの読み取り要求の転送を停止します。 システムは、障害のある読み取り専用RDSインスタンス宛ての読み取り要求を、データベースシステム内の正常なRDSインスタンスにリダイレクトします。 これにより、個々の読み取り専用RDSインスタンスに障害が発生した場合でもサービスの可用性が確保されます。 障害のある読み取り専用RDSインスタンスが復旧すると、ApsaraDB RDSはインスタンスへの読み取りリクエストのルーティングを再開します。
説明単一障害点 (SPOF) の影響を軽減するために、少なくとも2つの読み取り専用RDSインスタンスを作成することを推奨します。
リクエストのルーティングに使用されるロジック
次のリクエストは、プライマリRDSインスタンスにのみルーティングされます。
INSERT、UPDATE、DELETE、およびSELECT FOR UPDATEステートメントの実行に使用されるリクエスト。
データベースまたはテーブルの作成、データベースまたはテーブルの削除、スキーマまたはアクセス許可の変更など、DDL操作の実行に使用されるすべての要求。
トランザクションにカプセル化されたすべての要求
ユーザー定義関数を呼び出すために使用されるリクエスト。
ストアドプロシージャの実行に使用されるリクエスト。
executeステートメントの実行に使用されるリクエスト
複数ステートメントクエリの実行に使用されるリクエスト (詳細については、「マルチステートメント」をご参照ください) 。
一時テーブルを含むリクエスト。
SELECT last_insert_id() ステートメントの実行に使用されるリクエスト
ユーザー変数のクエリまたは再構成に使用されるすべての要求
SQLでKILLステートメントを実行するために使用されるリクエスト (これらのステートメントは、LinuxのKILLコマンドとは異なります) 。
次のリクエストは、プライマリRDSインスタンスまたは読み取り専用RDSインスタンスにルーティングされます。
トランザクションにカプセル化されていないSELECTステートメントの実行に使用されるリクエスト。
COM_STMT_EXECUTEステートメントの実行に使用されるリクエスト
次のリクエストは、プライマリRDSインスタンスと読み取り専用RDSインスタンスにルーティングされます。
システム変数の再構成に使用されるすべての要求。
USEステートメントの実行に使用されるリクエスト
SHOW PROCESSLISTステートメントの実行に使用されるリクエスト
説明SHOW PROCESSLISTステートメントが実行されると、専用プロキシは、データベースシステムのプライマリRDSインスタンスと読み取り専用RDSインスタンスで実行されるすべてのプロセスを返します。
COM_STMT_PREPAREステートメントの実行に使用されるリクエスト
COM_CHANGE_USER、COM_QUIT、およびCOM_SET_OPTIONステートメントの実行に使用されるリクエスト
読み取りおよび書き込み属性に基づく処理ロジック
読み取りおよび書き込み属性 | 読み取り重みを指定するメソッド | プライマリRDSインスタンスの重み | 通常のケース | 最後の読み取り専用RDSインスタンスの削除後 | すべての読み取り専用RDSインスタンスに障害が発生した場合 |
読み取り専用 | 自動またはカスタム | プライマリRDSインスタンスに読み取り重みを指定することはできません。 | プライマリRDSインスタンス: 読み取りまたは書き込み要求を処理しません。 この場合、要求の転送は行われない。 Database proxy endpoint: 読み取り要求のみを処理します。 | プライマリRDSインスタンス: 読み取りまたは書き込み要求を処理しません。 この場合、要求の転送は行われない。 データベースプロキシエンドポイント: 読み取りまたは書き込み要求を処理しません。 この場合、接続エラーが発生します。 | プライマリRDSインスタンス: 読み取りまたは書き込み要求を処理しません。 この場合、要求の転送は行われない。 データベースプロキシエンドポイント: 読み取りまたは書き込み要求を処理しません。 この場合、接続エラーが発生します。 |
読み取りと書き込み | 自動 | 0に等しい重み 詳細については、「システムによる読み取り重み割り当てのルール」をご参照ください。 | プライマリRDSインスタンス: 書き込み要求のみを処理します。 Database proxy endpoint: 読み取りおよび書き込み要求を処理します。 | プライマリRDSインスタンス: 読み取りおよび書き込み要求を処理します。 Database proxy endpoint: 読み取りおよび書き込み要求を処理します。 | プライマリRDSインスタンス: 読み取りおよび書き込み要求を処理します。 Database proxy endpoint: 読み取りおよび書き込み要求を処理します。 |
Custom | 0より大きい重み | プライマリRDSインスタンス: 読み取りおよび書き込み要求を処理します。 Database proxy endpoint: 読み取りおよび書き込み要求を処理します。 | プライマリRDSインスタンス: 読み取りおよび書き込み要求を処理します。 Database proxy endpoint: 読み取りおよび書き込み要求を処理します。 | プライマリRDSインスタンス: 読み取りおよび書き込み要求を処理します。 Database proxy endpoint: 読み取りおよび書き込み要求を処理します。 | |
0に等しい重み | プライマリRDSインスタンス: 書き込み要求のみを処理します。 Database proxy endpoint: 読み取りおよび書き込み要求を処理します。 | プライマリRDSインスタンス: 読み取りおよび書き込み要求を処理します。 Database proxy endpoint: 読み取りおよび書き込み要求を処理します。 | プライマリRDSインスタンス: 読み取りおよび書き込み要求を処理します。 Database proxy endpoint: 読み取りおよび書き込み要求を処理します。 |
リクエスト転送なし: プライマリRDSインスタンスが読み取り専用リクエスト転送に関与していないことを示します。
接続エラー: プロキシ端末が読み取り要求または書き込み要求を処理しない場合に接続エラーが報告されることを示します。
読み取り /書き込みモードでは、プライマリRDSインスタンスの重みが0に設定されている場合、デフォルトでは読み取りリクエストはプライマリRDSインスタンスに転送されません。 ただし、プライマリRDSインスタンスの読み取り専用RDSインスタンスに障害がある場合、強制的なヒントが指定されている場合、またはトランザクション分割が有効になっている場合、読み取り要求はプライマリRDSインスタンスに転送されます。
詳細については、「データベースプロキシの読み取り /書き込み属性と読み取り重みの設定」をご参照ください。
手順
詳細については、「データベースプロキシ機能の有効化」および「データベースプロキシエンドポイントの接続設定の構成」をご参照ください。
使用上の注意
詳細については、「データベースプロキシ機能の使用上の注意事項」をご参照ください。
RDSインスタンスでの読み書き分離の検証
詳細については、「読み書き分離の検証」をご参照ください。
よくある質問
詳細については、「データベースプロキシ機能に関するFAQ」をご参照ください。