読み書き分離は、読み取りクエリを読み取り専用インスタンスにルーティングすることで、プライマリインスタンスの読み取りトラフィックの負荷を軽減し、ハイブリッドトランザクション/分析処理 (HTAP) ワークロードのクエリスループットをスケーリングします。
読み書き分離は、バージョン 5.4.13-16415631 以降を実行している PolarDB-X Enterprise Edition のインスタンスでのみ利用できます。
エンドポイントのタイプ
PolarDB-X は、読み書き分離のために次の 2 種類のエンドポイントを提供します。
| エンドポイント | 説明 | 使用シーン |
|---|---|---|
| クラスターエンドポイント | PolarDB-X インスタンスのデフォルトのエンドポイントです。書き込みトラフィックをプライマリインスタンスにルーティングし、設定されている場合は読み取りトラフィックを読み取り専用インスタンスに分散します。 | TP と AP の両方のトラフィックを含む、標準的なオンラインビジネスおよび HTAP ワークロード |
| 読み取り専用ルートエンドポイント | 特定の読み取り専用インスタンス専用のエンドポイントです。このエンドポイントを介したすべての接続は、そのインスタンスのみに送られます。 | リソースが隔離されたワークロード:バッチ処理、オフラインデータのエクスポート、または単一の読み取り専用インスタンスへの排他的アクセスを必要とするシナリオ |
トラフィックのルーティング方法
プライマリインスタンスのリソースプールに読み取り専用インスタンスを追加すると、クラスターエンドポイントは両方のインスタンスに読み取りトラフィックを分散できます。2 種類のトラフィックは独立してルーティングされます。
| トラフィックタイプ | ルーティング動作 | 必要な設定 |
|---|---|---|
| AP トラフィック (分析処理) | インテリジェント読み書き分離を介して、自動的に読み取り専用インスタンスにルーティングされます。これは超並列処理 (MPP) を使用してクエリを高速化します。読み取り専用インスタンスの購入後にデフォルトで有効になります。 | なし |
| TP トラフィック (トランザクション処理) | デフォルトではプライマリインスタンスにルーティングされます。[読み取り専用トラフィック (%)] を 0 より大きい値に設定した場合にのみ、読み取り専用インスタンスにルーティングされます。 | クラスターエンドポイントの設定で [読み取り専用トラフィック (%)] を設定 |
つまり、読み取り専用インスタンスを購入すると AP クエリは自動的にオフロードされますが、TP の読み取りクエリには明示的な設定が必要です。
読み書き分離のためのクラスターエンドポイントの設定
前提条件
開始する前に、以下を確認してください。
バージョン 5.4.13-16415631 以降を実行している PolarDB-X Enterprise Edition インスタンス
購入済みの読み取り専用インスタンスが 1 つ以上あること (高可用性のために 2 つ以上を推奨)
クラスターエンドポイントの設定
PolarDB-X コンソールにログインします。
上部のナビゲーションバーで、インスタンスがデプロイされているリージョンを選択します。
「[インスタンス]」ページで、「[PolarDB-X 2.0]」タブをクリックします。
対象のインスタンスを見つけ、インスタンス ID をクリックします。
[接続情報] セクションで、[設定管理] をクリックします。
次の表のパラメーターを設定し、変更を保存します。
| パラメーター | 説明 |
|---|---|
| リソース設定 | プライマリインスタンスのリソースプールに読み取り専用インスタンスを追加します。リソースプールにない読み取り専用インスタンスは、オフロードされた読み取りトラフィックを受信できません。 |
| [読み取り専用インスタンスを自動的に追加] | 有効 (デフォルト) にすると、新しく購入した読み取り専用インスタンスが自動的にリソースプールに追加されます。 |
| インテリジェントな読み書き分離 | 有効 (デフォルト) にすると、AP トラフィックは MPP で高速化されたクエリ処理のために自動的に読み取り専用インスタンスにルーティングされます。AP トラフィックのルーティングを停止するには、この設定を無効にします。詳細については、「読み書き分離」をご参照ください。 |
| [読み取り専用トラフィック (%)] | リソースプール内の読み取り専用インスタンスにルーティングされる TP 読み取りクエリの割合です。TP 読み取りトラフィックをオフロードするには、これを 0 より大きい値に設定します。 |
| データ読み取り整合性 | プライマリインスタンスからまだレプリケーションされていないデータを読み取り専用インスタンスがどのように処理するかを制御します。
|
| [読み取り専用インスタンスのレイテンシーしきい値 (秒)] | 読み取り専用インスタンスの読み取りレイテンシーがこのしきい値を超えた場合、リクエストはしきい値内の他の読み取り専用インスタンスにリダイレクトされます。すべてのインスタンスがしきい値を超えた場合、システムは可用性に基づいてリクエストをプライマリインスタンスにルーティングするかどうかを評価します。 |
| [読み取り専用トラフィックのプライマリインスタンスへの切り替え] | すべての読み取り専用インスタンスが利用できないか、レイテンシーしきい値を超えた場合に、TP 読み取りトラフィックをプライマリインスタンスにフォールバックするかどうかを決定します。このフォールバックの可能性を減らすために、2 つ以上の読み取り専用インスタンスを使用してください。 |
強力な整合性は、読み取りごとに最大 3 秒のレイテンシーを追加し、プライマリインスタンスで DDL 文が実行されている場合やレプリケーションの遅延が大きい場合にクエリのタイムアウトを引き起こす可能性があります。ワークロードで強力な整合性が不要な場合は、クエリパフォーマンスを向上させるために [弱い整合性] を選択してください。
読み取り専用ルートエンドポイントの設定
読み取り専用ルートエンドポイントは、単一の読み取り専用インスタンスへの排他的な接続を提供し、他のインスタンスとのトラフィック共有や負荷分散は行いません。バッチジョブやオフライン分析など、リソースの隔離が必要なワークロードに使用します。
PolarDB-X コンソールにログインします。
上部のナビゲーションバーで、インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、[PolarDB-X 2.0] タブをクリックします。
対象の読み取り専用インスタンスを見つけ、インスタンス ID をクリックします。
[接続情報] セクションで、[設定管理] をクリックして、読み取り専用エンドポイントのパラメーターを設定します。
読み取り専用ルートエンドポイントの [データ読み取り整合性] オプションは次のように機能します。
強力な整合性:クエリは、プライマリインスタンスでコミットされた最新のデータを返します。レプリケーションの遅延が大きい場合、クエリは同期を待ってから結果を返します。
弱い整合性:クエリは、同期を待たずに、読み取り専用インスタンスで利用可能な最新データをすぐに返します。
よくある質問
読み取り専用インスタンスを購入しましたが、トラフィックがルーティングされません。どうすればよいですか?
どのトラフィックタイプがルーティングされることを想定しているかを確認してください。AP トラフィック (分析クエリ) は、インテリジェント読み書き分離が有効な場合、購入後に自動的にルーティングされます。TP トラフィック (トランザクションの読み取り) は、クラスターエンドポイントの設定で [読み取り専用トラフィック (%)] を 0 より大きい値に設定するまでルーティングされません。また、読み取り専用インスタンスがプライマリインスタンスのリソースプールに追加されていることも確認してください。
[読み取り専用トラフィック (%)] を 0 に設定しましたが、まだトラフィックが読み取り専用インスタンスに送られています。なぜですか?
そのトラフィックは、インテリジェント読み書き分離によってルーティングされた AP トラフィックです。これはデフォルトで有効になっており、[読み取り専用トラフィック (%)] の設定とは独立して動作します。読み取り専用インスタンスへのすべてのルーティングを停止するには、インテリジェント読み書き分離を無効にしてください。
[読み取り専用トラフィック (%)] を設定しましたが、TP トラフィックがまだ読み取り専用インスタンスに到達しません。なぜですか?
[読み取り専用トラフィック (%)] は、リソースプール内の読み取り専用インスタンスにのみトラフィックをルーティングします。ご利用の読み取り専用インスタンスがリソースプールから削除されている可能性があります。クラスターエンドポイントの設定で、[リソース設定] を確認し、インスタンスをプールに再度追加してください。
PolarDB-X の組み込み機能の代わりに、別々の接続文字列を使用して読み書き分離を実装できますか?
はい、できます。プライマリインスタンスのリソースプールから読み取り専用インスタンスを削除し、読み取りクエリには読み取り専用ルートエンドポイント、書き込みクエリにはクラスターエンドポイントにアプリケーションを直接接続します。
強力な整合性を有効にする必要がありますか?
いいえ。ワークロードがわずかに古いデータの読み取りを許容できる場合は、クエリパフォーマンスを向上させるために [弱い整合性] を選択してください。強力な整合性は、アプリケーションが読み取り結果に常にプライマリインスタンスの最新の書き込みを反映させる必要がある場合にのみ有効にしてください。強力な整合性は、DDL 文が実行されている場合や、読み取り専用インスタンスの仕様がプライマリインスタンスの仕様よりも大幅に小さい場合に、クエリのタイムアウトを引き起こす可能性があることに注意してください。
強力な整合性を無効にするにはどうすればよいですか?
クラスターエンドポイントの設定で、[データ読み取り整合性] を [弱い整合性] に設定します。アプリケーションが読み取り専用ルートエンドポイントを介して接続する場合は、読み取り専用エンドポイントの設定でも [データ読み取り整合性] を [弱い整合性] に設定してください。
読み書き分離を有効にした後、クエリがタイムアウトします。どうすればよいですか?
これは通常、強力な整合性が有効な場合に、プライマリインスタンスと読み取り専用インスタンス間のレプリケーションの遅延が大きいことが原因です。一般的な原因は次のとおりです。
プライマリインスタンスで DDL 文が実行されているか、大量のデータがインポートされている。
読み取り専用インスタンスの仕様がプライマリインスタンスの仕様よりも大幅に小さい。
レプリケーションの待機をなくすために [弱い整合性] に切り替えるか、レプリケーションの遅延を減らすために読み取り専用インスタンスの仕様を上げてください。