このトピックでは、ApsaraDB RDS for MySQL のデータベースプロキシ機能に関するよくある質問とその回答を示します。データベースプロキシ機能の使用中に問題が発生した場合は、このトピックをご参照ください。
目次
データベースプロキシ機能を有効にした後、システムはプライマリ RDS インスタンスとその読み取り専用 RDS インスタンスの元のエンドポイントを回収しますか?
データベースプロキシの内部ネットワークタイプは、そのプライマリ RDS インスタンスの内部ネットワークタイプと同じですか?
データベースプロキシはどのアーキテクチャを使用しますか? このアーキテクチャはフェールオーバーメカニズムを提供しますか?
データベースプロキシエンドポイントを使用して RDS インスタンスに接続するときにタイムアウトエラーが発生した場合はどうすればよいですか?
プライマリ RDS インスタンスが処理する書き込みリクエストの数が少ない場合、読み取りリクエストもプライマリ RDS インスタンスに送信できますか?
プライマリ RDS インスタンスと読み取り専用 RDS インスタンスの負荷が、インスタンスの読み取りの重みに準拠しないのはなぜですか?
RDS インスタンスのデータベースプロキシ機能を無効にした場合、その読み取り専用 RDS インスタンスに読み取りの重みを割り当てることはできますか?
読み書き分離を実装するために読み取り専用 RDS インスタンスを購入した後、プライマリ RDS インスタンスの既存データは自動的に読み取り専用 RDS インスタンスに同期されますか?
データベースプロキシの接続プールとアプリケーションの接続プールの違いは何ですか? 接続プールを一緒に使用するにはどうすればよいですか?
データベースプロキシとは何ですか?
データベースプロキシは、データベースシステムとアプリケーションの間に存在するネットワークプロキシとして機能し、アプリケーションからのすべてのリクエストを転送します。データベースプロキシは、自動読み書き分離、トランザクション分割、コネクションプーリング、持続的接続などの高度な機能を提供します。データベースプロキシは使いやすく、保守も容易で、高可用性と高性能を実現します。
汎用データベースプロキシと専用データベースプロキシの違いは何ですか?
汎用: このタイプのデータベースプロキシは物理 CPU リソースを共有し、無料で提供されます。このデータベースプロキシタイプの最高仕様は、8 つのプロキシノードによって提供される 16 CPU コアです。
専用: このタイプのデータベースプロキシは物理 CPU リソースを排他的に占有し、従量課金方法に基づいて課金されます。このデータベースプロキシタイプの最高仕様は、32 のプロキシノードによって提供される 64 CPU コアです。このタイプのデータベースプロキシは、より安定したパフォーマンスを提供します。
詳細については、「データベースプロキシタイプ」、「データベースプロキシの数とデータベースプロキシの仕様の関係」、「データベースプロキシ機能の課金ルール」をご参照ください。
データベースプロキシはプライマリ RDS インスタンスの QPS または TPS を消費しますか?
いいえ、消費しません。
データベースプロキシエンドポイントは通常のエンドポイントと同じですか?
番号
通常のエンドポイントは、RDS インスタンスにのみ送信されるすべてのリクエストを転送します。
データベースプロキシエンドポイントは、実行される SQL 文に基づいて、書き込みリクエストをプライマリ RDS インスタンスに、読み取りリクエストを読み取り専用 RDS インスタンスに自動的に転送します。これにより、プライマリ RDS インスタンスの負荷を軽減できます。
データベースプロキシ機能を有効にした後、システムはプライマリ RDS インスタンスとその読み取り専用 RDS インスタンスの元のエンドポイントを回収しますか?
回収されません。
データベースプロキシの内部ネットワークタイプは、そのプライマリ RDS インスタンスの内部ネットワークタイプと同じですか?
はい、データベースプロキシとそのプライマリ RDS インスタンスの内部ネットワークタイプは、どちらも仮想プライベートクラウド (VPC) です。
データベースプロキシはどのアーキテクチャを使用しますか? このアーキテクチャはフェールオーバーメカニズムを提供しますか?
データベースプロキシは、2 つのプライマリノードを持つ高可用性アーキテクチャを使用します。接続は 1:1 の比率で 2 つのノードに分散されます。一方のノードに障害が発生した場合、もう一方のノードが障害ノードを引き継ぎ、システムは障害ノードで復元タスクを自動的にトリガーして、データベースサービスの高可用性を確保します。
データベースプロキシのデプロイメントアーキテクチャの詳細については、「プロキシノードのデプロイメントアーキテクチャ」をご参照ください。
データベースプロキシの仕様とプロキシノードの仕様の関係は何ですか?
データベースプロキシの仕様 = すべてのプロキシノードの合計仕様。
たとえば、4 つの専用データベースプロキシノードがゾーン A とゾーン B にデプロイされ、単一プロキシノードの CPU コア数がゾーン A で 1、ゾーン B で 2 の場合、データベースプロキシの仕様は 6 CPU コアになります。この値は、1 × 2 + 2 × 2 = 2 + 4 = 6 という計算に基づいて取得されます。
データベースプロキシの数とデータベースプロキシの仕様の関係は何ですか?
プロキシ数 = プロキシ仕様 / ユニットプロキシ仕様。ここで、ユニットプロキシ仕様は 2 CPU コアです。
たとえば、データベースプロキシの仕様が 6 CPU コアの場合、プロキシノードの数は 3 です。この値は、6/2 = 3 という計算に基づいて取得されます。
プロキシノードの仕様に関する制限は何ですか?
汎用プロキシノードは最大 8 CPU コア、専用プロキシノードは最大 16 CPU コアを持つことができます。
同じゾーンにデプロイされているプロキシノードの仕様は同じである必要があります。
2 つのプロキシノードを含むデュアルゾーンデプロイメントモードでは、プロキシノードの仕様は同じである必要があります。
異なるゾーンにデプロイされているプロキシノードの仕様は異なっていてもかまいません。異なるゾーンに汎用プロキシノードをデプロイする場合、プロキシノードが同じ仕様を使用することをお勧めします。
プロキシの数とプロキシアドレスの数に関係はありますか?
いいえ。
データベースプロキシ機能が有効になっている各 RDS インスタンスは、最大 7 つのデータベースプロキシエンドポイントをサポートします。各データベースプロキシエンドポイントに対して、1 つの内部エンドポイントと 1 つのパブリックエンドポイントを申請できます。詳細については、「データベースプロキシエンドポイントの作成」をご参照ください。
データベースプロキシエンドポイントの数を増やすと、データベースプロキシのパフォーマンスは向上しますか?
番号
RDS インスタンスが RDS High-availability Edition を実行している場合、RDS インスタンスのデータベースプロキシ機能のパフォーマンスは、読み取り専用 RDS インスタンスの数、データベースプロキシの数、およびデータベースプロキシの仕様に関連します。RDS インスタンスが RDS Cluster Edition を実行している場合、RDS クラスターのデータベースプロキシのパフォーマンスは、セカンダリノードの数、データベースプロキシの数、およびデータベースプロキシの仕様に関連します。RDS Cluster Edition を実行する RDS インスタンスは、RDS クラスターと呼ばれます。
RDS High-availability Edition を実行する RDS インスタンスの読み取り専用 RDS インスタンスの数、または RDS クラスターのセカンダリノードの数を増やすと、データベースプロキシはより多くの読み取りリクエストを処理できます。
データベースプロキシの数を増やすか、データベースプロキシの仕様を追加すると、データベースプロキシのパフォーマンスが向上します。
データベースプロキシへの接続数に制限はありますか?
データベースプロキシに確立できる最大接続数に制限はありません。最大接続数は、データベースシステム内のプライマリ RDS インスタンスと読み取り専用 RDS インスタンスの仕様によって異なります。
データベースプロキシエンドポイントを使用して RDS インスタンスに接続するときにタイムアウトエラーが発生した場合はどうすればよいですか?
wait_timeout パラメーターの値を増やして、もう一度お試しいただくことをお勧めします。インスタンスパラメーターの変更方法の詳細については、「インスタンスパラメーターの設定」をご参照ください。
データベースプロキシエンドポイントまたは読み書き分離エンドポイントを変更できますか?
はい、できます。
データベースプロキシエンドポイントまたは読み書き分離エンドポイントの変更方法の詳細については、「データベースプロキシエンドポイントの管理」をご参照ください。
プライマリ RDS インスタンスが処理する書き込みリクエストの数が少ない場合、読み取りリクエストもプライマリ RDS インスタンスに送信できますか?
はい、そうです。
プライマリ RDS インスタンスに適切な読み取りの重みを指定するだけで済みます。プライマリ RDS インスタンスの読み取りの重みを設定する方法の詳細については、「データベースプロキシ機能を有効にする」をご参照ください。
読み書き分離はヒントをサポートしていますか?
はい、読み書き分離機能はヒントをサポートしています。ヒントを使用して、リクエストをプライマリ RDS インスタンスに強制的にルーティングできます。サポートされているヒントのフォーマットの詳細については、「システムによる読み取りの重み割り当てのルール」のプライマリ RDS インスタンスまたは読み取り専用 RDS インスタンスに送信する SQL 文を指定するためのヒントの使用に関するセクションをご参照ください。
プライマリ RDS インスタンスと読み取り専用 RDS インスタンスの読み取りの重みを変更した後、新しい読み取りの重みが有効にならないのはなぜですか?
新しい読み取りの重みは、新しい接続にのみ有効です。既存の接続は再確立されないため、新しい読み取りの重みは既存の接続には有効になりません。
プライマリ RDS インスタンスと読み取り専用 RDS インスタンスの負荷が、インスタンスの読み取りの重みに準拠しないのはなぜですか?
各ノードの負荷が設定された読み取りの重みと一致しない場合は、次の 2 つの点を確認してください。
リクエストにトランザクションが含まれています。トランザクションを含むすべてのリクエストは、プライマリ RDS インスタンスにのみ転送されます。プライマリ RDS インスタンスからリクエストをオフロードするには、トランザクション分割を有効にできます。詳細については、「ApsaraDB RDS for MySQL インスタンスでトランザクション分割機能を使用する」をご参照ください。
プライマリ RDS インスタンスと読み取り専用 RDS インスタンスのエンドポイントは、データベースシステムへの接続に使用されます。その結果、リクエストはインスタンスの読み取りの重みに基づいてプライマリ RDS インスタンスと読み取り専用 RDS インスタンスに転送されません。この場合、データベースプロキシエンドポイントを使用してデータベースシステムに接続できます。
RDS インスタンスのデータベースプロキシ機能を無効にした場合、その読み取り専用 RDS インスタンスに読み取りの重みを割り当てることはできますか?
いいえ、RDS インスタンスのデータベースプロキシ機能を無効にすると、読み取り専用 RDS インスタンスに読み取りの重みを割り当てることはできません。読み書き分離と負荷分散を実装するために、異なるアプリケーションでプライマリ RDS インスタンスとその読み取り専用 RDS インスタンスのエンドポイントを構成できます。
読み取り専用 RDS インスタンスに障害が発生した場合、新しい接続は他の正常な読み取り専用 RDS インスタンスにのみ確立されます。この場合、障害が発生した読み取り専用 RDS インスタンスへの現在の接続は、他の正常な読み取り専用 RDS インスタンスにフェールオーバーしますか?
いいえ、障害が発生した読み取り専用 RDS インスタンスへの現在の接続は、他の正常な読み取り専用 RDS インスタンスにフェールオーバーしません。現在の接続がタイムアウトするまで待つ必要があります。その後、新しい接続が他の正常な読み取り専用 RDS インスタンスに確立されます。
RDS インスタンスのデータベースプロキシ機能を有効にした後、読み書き分離をどのように検証しますか?
読み書き分離の検証方法の詳細については、「ApsaraDB RDS for MySQL インスタンスでの読み書き分離の検証」をご参照ください。
読み書き分離を実装するために読み取り専用 RDS インスタンスを購入した後、プライマリ RDS インスタンスの既存データは自動的に読み取り専用 RDS インスタンスに同期されますか?
はい、データベースプロキシ機能を有効にし、読み書き分離の構成を完了すると、プライマリ RDS インスタンスの既存データが自動的に読み取り専用 RDS インスタンスに同期されます。
データベースプロキシの接続プールとアプリケーションの接続プールの違いは何ですか? 接続プールを一緒に使用するにはどうすればよいですか?
ApsaraDB RDS for MySQL のデータベースプロキシのコネクションプーリング機能は、クライアントのコネクションプーリング機能には影響しません。クライアントが接続プールを提供する場合、データベースプロキシのコネクションプーリング機能を無効にできます。ApsaraDB RDS for MySQL のデータベースプロキシのコネクションプーリング機能の詳細については、「ApsaraDB RDS for MySQL インスタンスの接続プールタイプを設定する」をご参照ください。
データをクエリすると文字化けした文字が返されるのはなぜですか?
プライマリ RDS インスタンスで使用されている文字セットが、読み取り専用 RDS インスタンスで使用されている文字セットと異なる場合があります。次の文を実行して、プライマリ RDS インスタンスと読み取り専用 RDS インスタンスが同じ文字セットを使用しているかどうかを確認できます。
select
@@global.character_set_results,
@@global.character_set_client,
@@global.character_set_connection,
@@global.character_set_server;プライマリ RDS インスタンスと読み取り専用 RDS インスタンスが異なる文字セットを使用している場合は、プライマリ RDS インスタンスまたは読み取り専用 RDS インスタンスの文字セットを変更して、これらのインスタンスが同じ文字セットを使用するようにすることができます。RDS インスタンスの文字セットを変更する方法の詳細については、「ApsaraDB RDS for MySQL の文字セットの説明」をご参照ください。
DDL 操作はプライマリ RDS インスタンスからセカンダリ RDS インスタンスに自動的に同期されますか?
データベースやテーブルの作成と削除、テーブルスキーマの変更、権限の変更などのすべての DDL 操作は、プライマリ RDS インスタンスからセカンダリ RDS インスタンスに自動的に同期されます。
VPC タイプの内部エンドポイントの VPC ID と vSwitch ID パラメーターを表示するにはどうすればよいですか?
インスタンスの [データベースプロキシ] ページで、[接続情報] セクションの [ポート] の右側にあるアイコンにポインターを合わせます。次の図に示します。

データベースプロキシのゾーン間移行は、プライマリ RDS インスタンスへの接続に影響しますか?
データベースプロキシのゾーン間移行は、データベースプロキシエンドポイントを使用して RDS インスタンスに接続する場合にのみワークロードに影響します。RDS インスタンスが RDS High-availability Edition を実行しており、プライマリ RDS インスタンスまたは読み取り専用 RDS インスタンスのエンドポイントを使用してアプリケーションを RDS インスタンスに接続する場合、ワークロードは影響を受けません。RDS インスタンスが RDS Cluster Edition を実行しており、読み書きエンドポイント、読み取り専用エンドポイント、またはダイレクトノード接続エンドポイントを使用してアプリケーションを RDS インスタンスに接続する場合、ワークロードは影響を受けません。前述のエンドポイントを使用してアプリケーションを RDS インスタンスに接続し、オフピーク時にデータベースプロキシをゾーン間で移行することをお勧めします。
データベースプロキシのゾーン間移行の影響は何ですか?
データベースプロキシをゾーン間で移行すると、移行中に約 30 秒間続く一時的な切断が発生します。一時的な切断の期間は、ビジネスによって異なります。移行の影響を受けないエンドポイントを使用して RDS インスタンスに接続し、オフピーク時にデータベースプロキシをゾーン間で移行することをお勧めします。影響の詳細については、「データベースプロキシをゾーン間で移行する」をご参照ください。
プロキシノードをゾーン間で移行すると、最寄りアクセス機能は使用できなくなりますか?
無効になる可能性があります。
ゾーン間移行後、新しい最寄りゾーンにはデフォルトでアクセスできます。元の最寄りゾーンにはアクセスできなくなります。プロキシエンドポイントのゾーンをデフォルトゾーンとは異なるゾーンに変更すると、新しいゾーンへの最寄りアクセスは失敗します。次の表に、シナリオの例を示します。
シナリオ | 元のプロキシノード情報 | 新しいプロキシノード情報 | |||||
プロキシノードの現在のゾーン | プロキシエンドポイント | 最寄りアクセス | プロキシノードの新しいゾーン | プロキシエンドポイントのデフォルトゾーン | プロキシエンドポイントの新しいゾーン | 最寄りアクセス | |
シナリオ 1:
| ゾーン A | プロキシエンドポイント a | ゾーン A | ゾーン A | ゾーン A | ゾーン A | ゾーン A |
ゾーン C | 無効 | ||||||
ゾーン B | プロキシエンドポイント b | ゾーン B | ゾーン C | ゾーン C | ゾーン C | ゾーン C | |
ゾーン D | 無効 | ||||||
シナリオ 2:
| ゾーン A | プロキシエンドポイント a | ゾーン A | ゾーン C | ゾーン C | ゾーン C | ゾーン C |
ゾーン E | 無効 | ||||||
ゾーン B | プロキシエンドポイント b | ゾーン B | ゾーン D | ゾーン D | ゾーン D | ゾーン D | |
ゾーン E | 無効 | ||||||
プロキシノードの構成を変更するときに、プロキシノードのゾーンを変更できますか?
サポートされていません。
プロキシノードをゾーン間で移行する方法の詳細については、「データベースプロキシをゾーン間で移行する」をご参照ください。
デプロイメントモードをデュアルゾーンデプロイメントからシングルゾーンデプロイメントに変更すると、「データベースプロキシエンドポイントの vSwitch ID が指定されたゾーンにありません」というエラーメッセージが表示されます。どうすればよいですか?
デプロイメントモードをデュアルゾーンデプロイメント (ゾーン 1+ゾーン 2) からシングルゾーンデプロイメント (ゾーン 1) に変更する場合は、ゾーン 2 のデータベースプロキシエンドポイントを削除する必要があります。詳細については、「データベースプロキシエンドポイントの管理」をご参照ください。
データベースプロキシエンドポイントから解決された IP アドレスは固定されていますか?
いいえ、IP アドレスは固定されていません。RDS インスタンスに接続するには、データベースプロキシエンドポイント (例: d3pswqe3jk9xwc5d****-rw4rm.rwlb.rds.aliyuncs.com) を使用する必要があります。解決された IP アドレスは使用しないでください。
セッションがデータベースプロキシエンドポイント経由で接続されているかどうかを判断するにはどうすればよいですか?
セッション ID に基づいて、セッションがデータベースプロキシエンドポイント経由で接続されているかどうかを判断できます。セッション ID が 16777215 未満の場合、セッションは インスタンスのエンドポイントとポートの表示と管理 経由で接続されています。それ以外の場合、セッションはデータベースプロキシエンドポイント経由で接続されています。
セッションマネージャー 機能を使用してセッション ID を表示できます。
データベースプロキシエンドポイント経由でクエリを実行したときに、書き込んだばかりのデータを取得できないのはなぜですか?
一般的な原因: データベースプロキシエンドポイントはリクエストを読み取り専用 RDS インスタンスにルーティングしますが、読み取り専用 RDS インスタンスはまだ対応するバイナリログを適用していません。その結果、最新のデータをクエリできません。
解決策:
ヒント構文を使用する を使用して、強力な整合性を必要とするクエリを
/*FORCE_MASTER*/を使用してプライマリ RDS インスタンスにルーティングします。トランザクション分割を設定する を使用し、強力な整合性を必要とするクエリをトランザクションにカプセル化します。
整合性レベル をグローバル整合性に設定します。
上記の方法はすべて、より多くのクエリリクエストをプライマリ RDS インスタンスにルーティングします。したがって、プライマリ RDS インスタンスの容量を評価する必要があります。強力な整合性が必要なクエリのみをプライマリ RDS インスタンスにルーティングするには、ヒント構文を使用することをお勧めします。