利用mysql讀寫分離,提升應用資料吞吐性能
背景
一般情況下,對資料庫的讀和寫都在同一個資料庫伺服器中操作時,業務系統性能會降低。為了提升業務系統性能,優化使用者體驗,可以通過讀寫分離來減輕主資料庫的負載。本篇文章分别從應用層和系統層來介紹讀寫分離的實作方法。
應用層實作方法:
應用層中直接使用代碼實作,在進入service之前,使用aop來做出判斷,是使用寫庫還是讀庫,判斷依據可以根據方法名判斷,比如說以query、find、get等開頭的就走讀庫,其他的走寫庫。
優點:
1、多資料源切換友善,由程式自動完成。
2、不需要引入中間件。
3、理論上支援任何資料庫。
缺點:
1、由程式員完成,運維參與不到。
2、不能做到動态增加資料源。
系統層實作方法:
方式一:使用drds實作
<a href="https://help.aliyun.com/document_detail/29681.html">https://help.aliyun.com/document_detail/29681.html</a>
方式二:使用中間件mysql-proxy實作
本教程使用mysql-proxy實作讀寫分離。
mysql-proxy介紹:
mysql proxy是一個處于client端和mysql server端之間的簡單程式,它可以監測、分析或改變它們的通信。它使用靈活,沒有限制,常見的用途包括:負載平衡,故障、查詢分析,查詢過濾和修改等等。
mysql-proxy原理:
mysql proxy是一個中間層代理,簡單的說,mysql proxy就是一個連接配接池,負責将前台應用的連接配接請求轉發給背景的資料庫,并且通過使用lua腳本,可以實作複雜的連接配接控制和過濾,進而實作讀寫分離和負載平衡。對于應用來說,mysql proxy是完全透明的,應用則隻需要連接配接到mysql proxy的監聽端口即可。當然,這樣proxy機器可能成為單點失效,但完全可以使用多個proxy機器做為備援,在應用伺服器的連接配接池配置中配置到多個proxy的連接配接參數即可。
1、源程式不需要做任何改動就可以實作讀寫分離。
2、動态添加資料源不需要重新開機程式。
1、程式依賴于中間件,會導緻切換資料庫變得困難。
2、由中間件做了中轉代理,性能有所下降。
操作步驟
環境說明:
主庫ip:121.40.18.26
從庫ip:101.37.36.20
mysql-proxy代理ip:116.62.101.76
前期準備:
1、建立3台ecs,并安裝mysql。
2、搭建主從,必須保證主從資料庫資料一緻。
主環境
1.修改mysql配置檔案。
從環境
2.重新開機主從伺服器中的mysql服務。
3.在主伺服器上建立帳戶并授權slave。
4.檢視主資料庫狀态。
5.配置從資料庫。
6.啟動slave同步程序并檢視狀态。
7.驗證主從同步。
主庫上操作:
從庫操作:
從庫中查找testproxy.test1表的資料,與主庫一緻,主從同步成功
讀寫分離配置
1.安裝mysql-proxy。
2.環境變量設定。
3.讀寫分離設定。
mysql proxy會檢測用戶端連接配接, 當連接配接沒有超過min_idle_connections預設值時, 不會進行讀寫分離預設最小4個(最大8個)以上的用戶端連接配接才會實作讀寫分離, 現改為最小1個最大2個,便于讀寫分離的測試,生産環境中,可以根據實際情況進行調整。
調整前:
調整後:
4.将lua管理腳本(admin.lua)複制到讀寫分離腳本(rw-splitting.lua)所在目錄。
授權
1.主庫中操作授權,因主從同步的原因,從庫也會執行。
2.開啟mysql-proxy。
3.啟動mysql-proxy之後,檢視端口和相關程序。
測試讀寫分離
1.關閉從複制
2.mysql-proxy上操作,登入mysql-proxy背景管理。
第一次連接配接,會連接配接到主庫上。
多開幾個連接配接進行測試,當查詢testproxy.test1表的資料顯示是從庫的資料時,讀寫分離成功。
<a href="https://help.aliyun.com/document_detail/52256.html?spm=5176.doc51935.6.755.rb0saq">原文連結</a>