本トピックでは、Elastic Compute Service (ECS) インスタンスが ApsaraDB RDS for MySQL インスタンスへの接続に失敗する最も一般的な原因と、それぞれの解決方法について説明します。
クイックリファレンス
状況に合わせて解決策をご確認ください:
| 状況 | 考えられる原因 | 参照先 |
|---|---|---|
| ECS が Virtual Private Cloud (VPC) 内にあり、RDS がクラシックネットワーク内にある | ネットワークタイプの不一致 | 異なるネットワークタイプ |
| ECS がクラシックネットワーク内にあり、RDS が VPC 内にある | ネットワークタイプの不一致 | 異なるネットワークタイプ |
| ECS と RDS の両方が VPC 内にあるが、異なる VPC に属している | VPC の分離 | 異なる VPC |
| ECS と RDS が異なるリージョンまたは Alibaba Cloud アカウントに属している | クロスリージョンまたはクロスアカウントのルーティング | 異なるリージョン |
| ネットワークタイプと VPC は一致しているが、接続に失敗する | ホワイトリストの不正な設定 | IP アドレスホワイトリストの不正な設定 |
| 接続がタイムアウトするか、ホスト名が解決できない | DNS の問題 | ドメイン名前解決の失敗 |
| RDS インスタンスが切り替え途中で停止している | インスタンスの状態の問題 | 「ネットワーク接続の作成中」状態の RDS インスタンス |
異なるネットワークタイプ
ApsaraDB RDS for MySQL インスタンスと ECS インスタンスが内部ネットワーク経由で通信するには、同じネットワークタイプに属している必要があります。
ECS が VPC 内にあり、RDS がクラシックネットワーク内にある場合
-
方法 1 (推奨): RDS インスタンスを、ECS インスタンスが属する VPC に移行します。 詳細については、「ApsaraDB RDS インスタンスのネットワークタイプの変更」をご参照ください。
説明両方のインスタンスが VPC 内にある場合、内部ネットワーク経由で通信するには、同じ VPC 内にある必要があります。
-
方法 2: クラシックネットワーク内に新しい ECS インスタンスを購入します。 ECS インスタンスは VPC からクラシックネットワークに移行することはできません。 VPC はクラシックネットワークよりも安全です。
-
方法 3: RDS インスタンスの パブリックエンドポイント を使用して接続します。 この方法では、最適なパフォーマンス、セキュリティ、安定性は保証されません。
ECS がクラシックネットワーク内にあり、RDS が VPC 内にある場合
-
方法 1 (推奨): ECS インスタンスを、RDS インスタンスが属する VPC に移行します。
説明両方のインスタンスが VPC 内にある場合、内部ネットワーク経由で通信するには、同じ VPC 内にある必要があります。
-
Method 1: Migrate the ECS instance to the VPC to which the RDS instance belongs. This is the recommended method.
説明If the ECS instance and the RDS instance both reside in VPCs, they must reside in the same VPC to communicate with each other over an internal network.
-
方法 2: RDS インスタンスをクラシックネットワークに移行します。 VPC はクラシックネットワークよりも安全です。
-
方法 3: ClassicLink (ClassicLink の概要) を使用して、ECS インスタンスと RDS インスタンス間の内部ネットワーク接続を確立します。
-
方法 4: RDS インスタンスの パブリックエンドポイント を使用して接続します。 この方法では、最適なパフォーマンス、セキュリティ、安定性は保証されません。
異なる VPC
VPC は相互に論理的に分離されています。 ECS インスタンスと RDS インスタンスの両方が VPC 内にある場合でも、内部ネットワーク経由で通信するには、同じ VPC 内にある必要があります。
-
方法 1 (推奨): 両方のインスタンスを同じ VPC に移動します。 RDS インスタンスの VPC または ECS インスタンスの VPC を変更します。
-
方法 2: Cloud Enterprise Network (CEN) インスタンスを作成して、2 つの VPC 間にプライベート接続を確立します。 詳細については、「CEN を使用した同一リージョン内ネットワーク通信の有効化」をご参照ください。
-
方法 3: RDS インスタンスのパブリックエンドポイントを使用してインターネット経由で接続します。 この方法では、最適なパフォーマンス、セキュリティ、安定性は保証されません。
異なるリージョン
ECS インスタンスと RDS インスタンスが異なるリージョンにあるか、異なる Alibaba Cloud アカウントに属している場合、デフォルトでは内部ネットワークルーティングは利用できません。 以下の方法が利用できます。
インターネットベースの接続
RDS インスタンスの パブリックエンドポイント を申請して使用します。 RDS インスタンスで生成されたインバウンドおよびアウトバウンドのインターネットトラフィックは課金されません。
内部ネットワークベースの接続
VPC ピアリング接続または CEN インスタンスを使用して、クロスリージョンまたはクロスアカウントの VPC をブリッジします:
| オプション | コスト | 設定の複雑さ | 最適なシナリオ |
|---|---|---|---|
| VPC ピアリング接続 | 低 | より複雑 | VPC の数が少ないシンプルなシナリオ |
| CEN インスタンス | 高 | よりシンプル | VPC の数が多い複雑なシナリオ |
オンプレミスデータセンターから RDS インスタンスへの接続
オンプレミスデータセンター (IDC) から内部ネットワーク経由で RDS インスタンスに接続するには、まず、次のいずれかの方法を使用して、オンプレミスネットワークを Alibaba Cloud 上の VPC に接続します:
-
VPN ゲートウェイ: VPN ゲートウェイを作成し、IPsec-VPN サイトツーサイト接続を確立して、オンプレミスネットワークを VPC に接続します。
-
Smart Access Gateway (SAG): オンプレミスデータセンターに SAG デバイスをデプロイして、オンプレミスネットワークを VPC に接続します。
-
Express Connect (専用線): 専用の物理接続を使用して、オンプレミスデータセンターを Alibaba Cloud 上の VPC に接続します。
オンプレミスネットワークが VPC に接続された後、RDS インスタンスの内部エンドポイントを使用して接続を確立します。 リージョンをまたいで接続する必要がある場合は、CEN を使用してクロスリージョンの VPC 相互接続を有効にします。 CEN トランジットルーターは、VPN ゲートウェイの IPsec 接続と SAG ネットワークインスタンスのアタッチをサポートします。
IP アドレスホワイトリストの不正な設定
最も一般的なホワイトリストの問題は以下のとおりです。
デフォルトのホワイトリストでは接続が許可されない
デフォルトのホワイトリストには 127.0.0.1 のみが含まれており、これによりすべての外部アクセスがブロックされます。 RDS インスタンスへのアクセスが必要な IP アドレスを追加してください。 詳細については、「ApsaraDB RDS for MySQL インスタンスの IP アドレスホワイトリストの設定」をご参照ください。
ホワイトリストに 0.0.0.0/0 が含まれている
ホワイトリストに 0.0.0.0/0 を追加すると、すべての IP アドレスからのアクセスが許可されます。 注意して実行してください。
高セキュリティホワイトリストモードが有効になっている
高セキュリティホワイトリストモード が有効になっている場合、ホワイトリストのタイプは接続パスと一致する必要があります:
| 接続パス | 追加する IP | ホワイトリストタイプ |
|---|---|---|
| VPC 内の RDS、内部エンドポイント経由で接続 | ECS インスタンスのプライベート IP アドレス | VPC タイプ |
| クラシックネットワーク内の RDS、内部エンドポイント経由で接続 | ECS インスタンスのプライベート IP アドレス | クラシックネットワークタイプ |
| クラシックネットワーク内の RDS、インターネット経由で接続 | ECS インスタンスのパブリック IP アドレス | クラシックネットワークタイプ |
ホワイトリストに登録されたパブリック IP アドレスが機能しない
一般的な原因は 2 つあります:
-
パブリック IP アドレスが動的であり、追加後に変更された。
-
パブリック IP アドレスを調べるために使用したツールまたはウェブサイトが不正確な結果を返した。
正しいパブリック IP アドレスを取得する方法については、以下をご参照ください:
ドメイン名前解決の失敗
Domain Name System (DNS) サーバーに障害がある場合、またはネットワークインターフェイスコントローラー (NIC) の設定が変更された場合、RDS ホスト名の解決に失敗したり、間違った IP アドレスに解決されたりすることがあります。
接続性のテスト
ECS インスタンスから次のコマンドを実行してください:<Domain name> を RDS の内部またはパブリックエンドポイントに、<Port number> をデータベースのポートに置き換えてください:
ping <Domain name>
telnet <Domain name> <Port number>
macOS には、デフォルトで Telnet が含まれていません。 macOS でポートの接続性をテストするには、nc -vz <Domain name> <Port number> を実行してください。
接続に失敗した場合、問題は DNS の名前解決またはネットワーク設定にある可能性が高いです。 以下の NIC の DNS 設定の修正に進んでください。
NIC の DNS 設定の修正
-
NIC 設定ファイルを編集モードで開きます:
説明ifconfigを実行して、NIC 設定ファイル名を確認してください。 デフォルトはifcfg-eth0です。vi /etc/sysconfig/network-scripts/<NIC 設定ファイル名> -
ファイルの末尾に次の DNS 設定を追加します。
DNS1とDNS2がすでに存在する場合は、その値を更新します:DNS1=100.100.XX.XX DNS2=100.100.XX.XX -
ネットワークサービスを再起動します:
sudo systemctl restart network -
変更が有効になったことを確認します:
cat /etc/resolv.conf
インスタンスの再起動、復元、または DNS 変更後にエンドポイントが解決できない
RDS インスタンスの再起動、復元、または DNS 設定の変更後、クライアントがパブリックエンドポイントを解決できないと報告したり、他の異常な DNS 名前解決の動作を示したりすることがあります。 IP アドレスに対する Ping または Telnet テストは成功する場合があります。
DNS の伝播には数分から数十分かかることがあります。 この期間中、古いローカル DNS キャッシュやグローバル DNS の伝播遅延により、クライアントが最新のアドレスを解決できない場合があります。
-
DNS の伝播が完了するのを待ってから、パブリックエンドポイントを使用して接続を再試行してください。
-
DNS の問題を切り分けるには、一時的に Navicat などのクライアントで IP アドレスを使用してください。 IP アドレスでは接続できるがパブリックエンドポイントでは接続できない場合は、DNS の名前解決とキャッシュのトラブルシューティングを続行してください。
-
クライアントまたはサーバーの DNS 設定またはキャッシュを更新してください。 「NIC の DNS 設定の修正」の手順に従い、再度パブリックエンドポイントを解決して、接続を再テストしてください。
「ネットワーク接続の作成中」状態の RDS インスタンス
ApsaraDB RDS コンソールの [タスク] ページに移動し、[ネットワーク接続の作成中] 状態のタスクを見つけて、[再試行] または [切り替え時間の変更] をクリックします。 詳細については、「タスクセンターの使用」をご参照ください。
よくある質問
Ping および Telnet テストは成功するのに、アプリケーションが接続できないのはなぜですか。
Ping テストの成功はホストが ICMP リクエストに応答することを示し、Telnet テストの成功はデータベースポートが到達可能であることを示します。 それでもアプリケーションが接続できない場合は、次のチェックを完了してください:
-
Navicat などのグラフィカルツールの異常な動作や設定の問題を除外してください。 MySQL コマンドラインインターフェイスを使用して、低レベルの接続テストを実行してください:
mysql -h <endpoint> -P <port> -u <username> -p。 -
コマンドが成功した場合、ネットワーク接続とテストされたアカウントの権限は機能しています。 Java アプリケーションまたは他のアプリケーションコードで、データベースドライバーのバージョン、接続文字列の形式、エンドポイント、ポート、データベース名、ユーザー名、およびパスワードを確認してください。
-
ビジネス接続テストには、名前が
dmsで始まるシステムアカウントを使用しないでください。 コンソールで権限を持つアカウントまたは標準のビジネスアカウントを作成し、それで接続をテストして、そのアカウントが宛先データベースにアクセスできることを確認してください。
コマンドも失敗した場合は、このドキュメントのネットワーク、ホワイトリスト、ポート、およびアカウントのトラブルシューティングを続行してください。