RDS For MySQL常見連接問題總結
RDS常見問題總結主要分為兩個方面的原因:用戶側配置問題、外部原因。
問題概述
1、 用戶側問題
1.1 用戶自身配置問題可能有多方面配置原因導致,在此列舉下常見的一些配置問題
1.1.1 白名單設置問題
RDS是有白名單訪問保護的,不論用戶內網訪問還是外網訪問都需要先添加要訪問的IP到目標實例的白名單中,當前一個RDS實例最多可設置50個白名單分組和1000個IP,具體信息請參考RDS設置白名單。
在高安全訪問模式下的報錯提示為:在標準訪問模式下的報錯提示為:
1.1.2 用戶自建DNS異常
RDS的訪問不是直接以IP的形式進行訪問,都是提供一個訪問連接地址加埠號的形式進行訪問,因此中間涉及到訪問連接地址到IP的域名解析過程,通常情況下用戶都會使用RDS自身提供的DNS解析服務,但是也存在個別用戶出於各自運維管理的需要而自建DNS服務進行域名解析的情況。RDS提供域名給用戶訪問就是為了方便用戶使用,在遇到如HA切換、實例遷移等情況,用戶的訪問方式可以保持不變,其機制就是後台在實例切換的過程中雖然IP發生變化,但是通過域名解析映射,保證了用戶的訪問方式不發生變化。因此通常情況下建議用戶訪問RDS實例使用RDS提供的連接地址進行訪問,自建DNS服務是無法確定切換後實例的IP。
1.1.3 用戶自身Mysql命令環境變數配置有誤或/etc/my.cnf下指定連接信息不正確
用戶在mysql客戶端訪問RDS實例的時候,一般常見需要如下幾個參數:-u 用戶名 –p 密碼(可非顯示輸入) -h 實例地址 –P 埠(默認3306)等,mysql客戶端在進行登錄的時候對於沒有明確設置的參數通過讀取配置文件(通常情況下為) /etc/my.cnf進行設置,舉一個常見的例子,用戶在my.cnf配置文件里設置了默認埠為3307,可用戶要連接的實例的埠為3306,用戶在mysql登錄的時候沒有設置-P參數,因此出現連接錯誤:
指定正確埠即可訪問:
1.1.4 Iptables防火牆配置
RDS白名單是屬於RDS側的訪問控制,防火牆是屬於用戶側的訪問控制,如果用戶是使用ECS進行訪問,還需要首先在ECS上設置相應的安全組,本文暫以用戶用Linux訪問RDS進行說明,如用戶開啟了Iptables,可通過iptables –L
進行訪問策略查看,Iptables可通過IP、協議、埠三個維度進行訪問限制,因此用戶需要在Iptables中設置相應的策略,用戶也可選擇關閉Iptables,可通過service iptables stop
進行關閉。
1.1.5 用戶本地DNS緩存或者綁定Host
用戶DNS緩存問題或者hosts文件中配置中問題,和上述第二個原因很類似,都屬於域名解析類問題,Linux下清除域名緩存可通過service nscd restart
的方式,/etc/hosts文件主要是用戶在文件中將連接地址和IP進行綁定,因此在實例進行切換時導致訪問失敗,通常不建議用戶這麼做,建議還是以RDS提供的連接地址的形式進行訪問。
1.2 用戶應用代碼配置問題
1.2.1 代碼中連接信息配置不對
遇到比較多的情況是用戶的代碼中連接地址配置錯誤、賬戶信息配置錯誤,或者上述提到比較多的,在代碼中是以IP進行訪問等,這種情況下,一般建議用戶先通過mysql客戶端的形式進行RDS登錄,如能正常登錄,建議用戶檢查下自己代碼中關於連接部分的設置。
1.2.2 代碼中連接參數設置不合理
用戶代碼中不合理的連接設置,導致大部分連接沒有及時關閉,進而消耗RDS資源,最終引發連接數打滿的情況。建議用戶調整應用代碼中關於連接部分的設置。
1.3 用戶ECS側問題
通常阿里雲的用戶都會通過ECS進行RDS訪問,可能會因為爭搶、OOM等原因導致RDS訪問失敗,也會存在源端因CPU打滿、網卡打滿(這裡不局限於ECS)等情況產生的網路丟包現象而引起的連接閃斷現象。
1.4 用戶業務引起的RDS連接報錯
1.4.1 慢查詢引起CPU使用率增高導致連接堆積
用戶代碼中存在性能較差的SQL導致RDS出現慢大量SQL,CPU打滿,引發連接堆積RDS無法響應的現象,通常建議用戶通過CloudDBA中的診斷慢SQL功能對慢SQL進行診斷並調整優化。
1.4.2 當前實例規格不滿足業務增長
用戶的業務正常增長,但是當前實例規格無法滿足業務的合理增長,RDS是可以在線升級配置的, 因此建議用戶升級配置,升配過程中可能會有一次30s左右的閃斷,建議用戶做好連接重連機制,保證用戶業務的正常運行,具體信息請參考:RDS使用須知。
1.5 用戶RDS使用問題
1.5.1 RDS相關連接參數設置不合理
用戶存在相關參數設置不合理的情況,例如用戶有session在執行長時間的read或者write操作時,net_read_timeout和net_write_timeout設置過低導致連接中斷。建議用戶結合業務和SQL實際運行情況調整RDS參數值。
1.5.2 實例被鎖定
用戶RDS實例因為磁碟空間超出購買規格限制而被鎖定,在實例鎖定期間,應用無法對RDS資料庫進行讀寫操作。建議用戶提前設置好RDS磁碟空間監控,在達到空間監控閥值進行預警,具體處理辦法請參考: MySQL實例空間使用率過高的原因和解決方法
2、 外部原因
2.1 阿里雲與其他雲廠商伺服器之間的互訪
用戶的RDS實例在阿里雲上,但是應用端在其他雲廠商如AWS或IDC機房裡,目前出現過阿里雲RDS在與AWS網路互訪出現問題導致RDS訪問報錯的情況,或者用戶應用端在IDC機房,走公網訪問RDS,由於公網網路質量原因導致的RDS訪問丟包現象。
2.2 用戶在阿里雲內的跨區訪問中發生的網路不穩定
用戶ECS實例與RDS實例均在阿里雲上,但是RDS實例與ECS不在同一個Region中,非同一個Region相互間訪問需要走公網,因此也存在因公網網路質量原因導致的RDS訪問丟包現象。建議用戶在架構上合理搭配,盡量ECS和RDS在同一可用區,避免跨可用區甚至跨地域的情況發生。
以上是常見的RDS連接出錯可能產生的原因,並不是產生報錯的全部原因。但是大部分的連接問題都可以在上面的可能原因中找到對應情況。在診斷RDS連接報錯時,通常可通過如下幾個步驟進行排查:
1、ping URL 驗證DNS服務是否正常2、telnet URL port 再次驗證DNS服務,同時看埠能否通,(在高安全訪問模式下,telnet能通不代表RDS一定能正常服務)3、telnet vip port 驗證4層服務是否OK4、mysql –u –h –p –P 查下7層是否能聯通,(需要用戶使用官方的mysql客戶端)5、如果上面都沒有問題,建議用戶在源端進行抓包,分析下網路包看下是否建連成功
了解更多請微博關注阿里雲客戶滿意中心
推薦閱讀:
※雲支付的前景是怎樣的?
※你應該了解的 Spring Cloud 是什麼
※【OSS 排查方案-6】圖片處理業務
※為何維基百科一年需要2千萬美元的資金來維護?
※優朋普樂:從傳媒到雲服務商的涅槃