PolarDB for MySQL クラスタは、読み書き分離機能をサポートしています。アプリケーションが 読み書き モードでクラスタエンドポイントに接続すると、アプリケーションの書き込みリクエストはプライマリノードに自動的に転送されます。読み取りリクエストは、各ノードのワークロード(保留中のリクエスト数)に基づいて、プライマリノードまたは読み取り専用ノードにインテリジェントに分散されます。
メリット
読み取り整合性
アプリケーションが読み書きモードでクラスタエンドポイントを使用してクラスタとの接続を確立すると、読み書き分離に使用される組み込みデータベースプロキシが、アプリケーションのプライマリノードと読み取り専用ノードへの接続を自動的に確立します。アプリケーションの接続セッションでは、プロキシは各データベースノードのデータ同期ステータスに基づいて、リクエストを最適なノードにインテリジェントに分散します。このプロセスにより、データの正確性(書き込み操作後の正しい読み取り結果)が確保され、ノード間で読み取りおよび書き込みリクエストのバランスが取られます。
パフォーマンス向上のためのネイティブ読み書き分離
クラウドにプロキシを作成して、読み書き分離を実装できます。ただし、データがデータベースに書き込まれる前に複数のコンポーネントによってデータが解析および転送されるため、高レイテンシの問題が発生する可能性があります。PolarDB は、既存の安全なリンクにデプロイされた組み込みプロキシを使用して読み書き分離を実装し、データが複数のコンポーネント間を移動しないようにします。これにより、レイテンシが短縮され、データ処理が高速化されます。
容易なメンテナンス
従来のモードで読み書き分離を実装するのは複雑で時間がかかります。アプリケーションでプライマリノードと各読み取り専用ノードのエンドポイントを指定する必要があります。また、書き込みリクエストをプライマリノードに送信し、読み取りリクエストをすべてのノードに送信するための転送ルールを設定する必要があります。
PolarDB は、アプリケーションがクラスタとの接続を確立するために使用できるクラスタエンドポイントを提供します。接続が確立されると、アプリケーションはクラスタに読み取りおよび書き込みリクエストを送信できます。書き込みリクエストはプライマリノードに自動的に転送され、読み取りリクエストはプライマリノードまたは読み取り専用ノードにインテリジェントに分散されます。読み書き分離プロセスはユーザーにとって透過的であり、メンテナンスコストを効果的に削減します。
アプリケーションを変更することなく、読み取り専用ノードを追加することで、システムの処理能力を拡張できます。
データベースの可用性を向上させるためのノードヘルスチェック
PolarDB の読み書き分離モジュールは、クラスタ内のすべてのノードでヘルスチェックを自動的に実行します。ノードに障害が発生した場合、またはレイテンシが指定されたしきい値を超えた場合、PolarDB は、読み取りリクエストのノードへの転送を停止します。読み取りおよび書き込みリクエストは他の正常なノードに転送され、読み取り専用ノードに障害が発生した場合でもアプリケーションがクラスタにアクセスできるようにします。障害が発生したノードが回復すると、PolarDB は、リクエストを受信できるノードのリストにノードを自動的に追加します。
リソースとメンテナンスコストを削減する無料機能
読み書き分離機能は無料で使用できます。
リクエスト転送ルール
読み書き分離モードでの転送ルール:
次のリクエストはプライマリノードのみに転送されます。
INSERT、UPDATE、DELETE、SELECT FOR UPDATE などのステートメントを含むすべての DML 操作。
データベースまたはテーブルの作成、データベースまたはテーブルの削除、テーブルスキーマまたは権限の変更など、すべての DDL 操作。
トランザクション分割が無効になっている場合のすべてのトランザクションリクエスト。
説明トランザクション分割が有効になった後のトランザクションリクエストの分散ルールについては、「負荷分散」トピックの「トランザクション分割」セクションを参照してください。
ユーザー定義関数。
ストアドプロシージャ。
LOCK TABLES および UNLOCK TABLES ステートメント。
複数ステートメントクエリ。詳細については、「複数ステートメント」を参照してください。
一時テーブルに関連するリクエスト。
SELECT last_insert_id()
ステートメント。ユーザー環境変数のクエリまたは変更。
BINLOG DUMP ステートメント。
次のリクエストは、プライマリノードまたは読み取り専用ノードに転送されます。
説明プライマリノードによる読み取りリクエストの許可 パラメータを [はい] に設定した場合にのみ、リクエストはプライマリノードに転送されます。
非トランザクション読み取りリクエスト。
START TRANSACTION READ ONLY ステートメントを使用する読み取り専用トランザクション。
次のリクエストはすべてのノードに転送されます。
システム環境変数の変更。
USE ステートメント。
PREPARE および DEALLOCATE PREPARE ステートメント。
COM_CHANGE_USER、COM_RESET_CONNECTION、COM_QUIT、および COM_SET_OPTION ステートメント。
SHOW PROCESSLIST
ステートメント。説明SHOW PROCESSLIST
ステートメントを実行すると、PolarDB はデータベースシステムのノードで実行されているすべてのプロセスを返します。SQL の KILL ステートメント(Linux の KILL コマンドではありません)。
読み取り専用モードでの転送ルール:
DDL および DML 操作はサポートされていません。
リクエストは負荷分散モードで読み取り専用ノードに転送されます。
選択したノードのリストにプライマリノードを追加した場合でも、読み取りリクエストはプライマリノードに転送されません。
BINLOG DUMP ステートメントは、特定の読み取り専用ノードのみに転送されます。