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