解決無法連接實例問題
本文介紹在各種情況下如何自助解決連接不上RDS的問題。
在搭建業(yè)務場景調(diào)試的過程中,經(jīng)常會出現(xiàn)無法連接RDS實例的情況,很多時候都是由于網(wǎng)絡類型不統(tǒng)一、白名單未放對應IP等導致的。以下為最常見的原因和解決辦法。
網(wǎng)絡類型不同
ECS實例采用專有網(wǎng)絡(VPC),RDS實例采用經(jīng)典網(wǎng)絡
解決辦法一(推薦):將RDS實例從經(jīng)典網(wǎng)絡切換為VPC,具體操作請參見切換網(wǎng)絡類型。
說明切換后,兩者必須處于同一個VPC,才能內(nèi)網(wǎng)互通。
解決辦法二:重新購買經(jīng)典網(wǎng)絡的ECS實例(ECS實例不支持從VPC遷移到經(jīng)典網(wǎng)絡)。但是VPC比經(jīng)典網(wǎng)絡更安全,建議您使用VPC。
解決辦法三:ECS實例使用RDS實例的公網(wǎng)連接地址連接RDS實例,即通過公網(wǎng)連接RDS實例。這種方式的性能、安全性、穩(wěn)定性較差。
ECS實例采用經(jīng)典網(wǎng)絡,RDS實例采用專有網(wǎng)絡(VPC)
解決辦法一(推薦):將ECS實例從經(jīng)典網(wǎng)絡遷移到VPC,具體操作請參見單ECS遷移示例。
說明切換后,兩者必須處于同一個VPC,才能內(nèi)網(wǎng)互通。
解決辦法二:將RDS實例從VPC切換為經(jīng)典網(wǎng)絡。但是VPC比經(jīng)典網(wǎng)絡更安全,建議您使用VPC。
解決辦法三:使用ClassicLink功能,使經(jīng)典網(wǎng)絡的ECS實例可以和VPC中的云資源通過內(nèi)網(wǎng)互通。
解決辦法四:ECS實例使用RDS實例的公網(wǎng)連接地址連接RDS實例,即通過公網(wǎng)連接RDS實例。這種方式的性能、安全性、穩(wěn)定性較差。
專有網(wǎng)絡(VPC)不同
專有網(wǎng)絡VPC是基于阿里云構(gòu)建的一個隔離的網(wǎng)絡環(huán)境,專有網(wǎng)絡之間邏輯上徹底隔離,所以當ECS和RDS實例的網(wǎng)絡類型都是專有網(wǎng)絡時,還需要保證所屬的專有網(wǎng)絡也相同,才能內(nèi)網(wǎng)互通。
解決辦法一(推薦):將RDS實例遷移到ECS實例所在的VPC。
具體操作:參見切換專有網(wǎng)絡VPC和虛擬交換機或切換網(wǎng)絡類型(先將RDS實例的網(wǎng)絡類型從VPC切換到經(jīng)典網(wǎng)絡,再切換回VPC)。
解決辦法二:在兩個VPC之間建立云企業(yè)網(wǎng)。
解決辦法三:通過公網(wǎng)互通。這種方式的性能、安全性、穩(wěn)定性較差。
地域不同
ECS實例和RDS實例位于不同的地域時,無法直接通過內(nèi)網(wǎng)互通。
解決辦法一:將原實例申請退款,重新購買。
解決辦法二:ECS實例和RDS實例的網(wǎng)絡類型都設置為VPC,同時在兩個VPC之間建立云企業(yè)網(wǎng)。
解決辦法三:通過外網(wǎng)互通。這種方式的性能、安全性、穩(wěn)定性較差。
IP白名單設置有誤
由于白名單設置中只有默認地址127.0.0.1。該地址表示不允許任何設備訪問RDS實例。因此需在白名單中添加對端的IP地址,具體操作請參見設置IP白名單。
白名單設置成了0.0.0.0,正確格式為0.0.0.0/0。
重要0.0.0.0/0表示允許任何設備訪問RDS實例,請謹慎使用。
如果開啟了高安全白名單,需進行如下檢查:
如果使用的是專有網(wǎng)絡的內(nèi)網(wǎng)連接地址,請確保ECS內(nèi)網(wǎng)IP地址添加到了專有網(wǎng)絡的分組。
如果使用的是經(jīng)典網(wǎng)絡的內(nèi)網(wǎng)連接地址,請確保ECS內(nèi)網(wǎng)IP地址添加到了經(jīng)典網(wǎng)絡的分組。
如果通過公網(wǎng)連接,請確保設備公網(wǎng)IP地址添加到了經(jīng)典網(wǎng)絡的分組(專有網(wǎng)絡的分組不適用于公網(wǎng))。
您在白名單中添加的設備公網(wǎng)IP地址可能并非設備真正的出口IP地址。原因如下:
公網(wǎng)IP地址不固定,可能會變動。
IP地址查詢工具或網(wǎng)站查詢的公網(wǎng)IP地址不準確。
域名解析失敗或錯誤
域名服務器出現(xiàn)故障或修改過網(wǎng)卡配置,可能會導致域名解析失敗或錯誤。此時可以通過ping
和 telnet
測試到RDS的連通性,命令如下。
ping <域名>
telnet <域名> <端口號>
示例
如果失敗的話,可以通過修改網(wǎng)卡配置文件來解決問題,具體步驟如下:
修改對應的網(wǎng)卡配置文件。
vi /etc/sysconfig/network-scripts/<網(wǎng)卡配置文件名>
說明<網(wǎng)卡配置文件名>:ECS服務器使用的網(wǎng)卡,可以通過
ifconfig
查看后綴名,默認為ifcfg-eth0。在配置文件末尾加入如下配置。
DNS1=100.100.XX.XX DNS2=100.100.XX.XX
說明如果已經(jīng)有DNS1和DNS2配置,請將IP地址修改為如上所示。
使用如下命令重啟Network服務。
sudo systemctl restart network
使用如下命令查看是否修改成功。
cat /etc/resolv.conf
只讀實例未設置白名單
使用只讀實例或讀寫分離時,要確保只讀實例上也設置了白名單,否則應用程序無法訪問只讀實例。
內(nèi)外網(wǎng)地址使用錯誤
使用內(nèi)網(wǎng)地址從外網(wǎng)進行連接,或者使用外網(wǎng)地址從內(nèi)網(wǎng)進行連接都會導致連接失敗。
請確認您使用的地址類型。如果您需要從內(nèi)網(wǎng)連接RDS實例,請使用RDS實例的內(nèi)網(wǎng)地址;如果您需要從外網(wǎng)連接RDS實例,請使用RDS實例的外網(wǎng)地址。
連接數(shù)已滿
連接數(shù)滿通常是由于空閑連接過多或活動連接過多,具體原因及解決辦法請參見如何處理RDS MySQL連接數(shù)被打滿的情況或如何處理RDS PostgreSQL實例連接數(shù)過多。
實例狀態(tài)一直處于“創(chuàng)建網(wǎng)絡連接”中
通過控制臺進入任務列表,可對實例的當前任務重試,或修改切換時間。詳情請參見任務列表。