最近發現阿裡雲線上環境有一台hls子產品的資料庫從庫一直沒有連接配接,而主庫卻一直連接配接不斷。在阿裡雲控制背景看到連接配接情況如下圖:

上圖是主庫的,下面那個是從庫的,兩者差距很大,可見這樣的配置是錯誤的,因為讀庫根本沒有使用,也就是說讀庫的那份錢是在浪費!
來到對應的atlas伺服器檢視配置,看到atlas 的配置裡規定管理接口的使用者名和密碼是預設的原始套餐,端口被改成了2346,如下面,
于是我們就在子產品伺服器(也就是圖裡的online-hls-001)上登入這個atlas伺服器的管理端口,看一下效果:
發現mysql根本沒有反應,可當我們telnet去atlas的2346端口的時候,發現端口是通的:
于是我們傳回到atlas 的配置檔案,把這台hls子產品伺服器的ip位址添加到clients-ips這個字段裡。
然後再用hls伺服器去測試一下atlas的管理端口,#mysql -hatlas伺服器ip位址 -uuser -ppwd,然後使用#select * from backends;,發現裡面的兩個庫一個連接配接成功,另一個是失敗的:
兩個庫都可以ping通,state卻有這樣的差别。由此可見這台atlas根本沒有連接配接到從庫,導緻從庫的連接配接數始終為0。這個時候我們就要檢查從庫配置的賬号密碼是否正确,而且在阿裡雲控制背景給從庫開啟這個atlas的白名單,然後重新啟動這個mysql-proxy程序,再登入atlas管理端口檢視,發現從庫由down轉up了:
但是此時的atlas日志裡卻出現了很多forbidden的warning的提示:
這時候我們傳回atlas的配置檔案,把之前的修改過的client-ips這個字段注釋掉,讓所有合法ip都連接配接,然後重新開機atlas,這樣這種forbidden ip的警告日志就會消失。
稍等一會,就會看到從庫上也會出現連接配接數了,至此一切恢複到正常狀态,故障排除!
[補充1]
資料庫通路使用了事務的話,從庫也會建立連接配接,隻是連接配接量要小于“非事務通路”,而不是一點連接配接都沒有。
[補充2]
一般來說,在atlas配置檔案裡,主庫寫一個,而從庫最好把主庫和從庫都寫進去,如果希望從庫承擔讀的任務多一點的話,可以把權重調高,比如我想從庫與主庫的讀任務比是2:1,那麼就可以這麼寫:
#Atlas後端連接配接的MySQL主庫的IP和端口,可設定多項,用逗号分隔
proxy-backend-addresses = 主庫位址:3306
#Atlas後端連接配接的MySQL從庫的IP和端口,@後面的數字代表權重,用來作負載均衡,若省略則預設為1,可設定多項,用逗号分隔
proxy-read-only-backend-addresses = 從庫位址:[email protected],主庫位址:[email protected]