天天看點

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

利用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原理:

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

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.檢視主資料庫狀态。

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

5.配置從資料庫。

6.啟動slave同步程序并檢視狀态。

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

7.驗證主從同步。

主庫上操作:

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

從庫操作:

從庫中查找testproxy.test1表的資料,與主庫一緻,主從同步成功

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

讀寫分離配置

1.安裝mysql-proxy。

2.環境變量設定。

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

3.讀寫分離設定。

mysql proxy會檢測用戶端連接配接, 當連接配接沒有超過min_idle_connections預設值時, 不會進行讀寫分離預設最小4個(最大8個)以上的用戶端連接配接才會實作讀寫分離, 現改為最小1個最大2個,便于讀寫分離的測試,生産環境中,可以根據實際情況進行調整。

調整前:

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

調整後:

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

4.将lua管理腳本(admin.lua)複制到讀寫分離腳本(rw-splitting.lua)所在目錄。

授權

1.主庫中操作授權,因主從同步的原因,從庫也會執行。

2.開啟mysql-proxy。

3.啟動mysql-proxy之後,檢視端口和相關程序。

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能
雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

測試讀寫分離

1.關閉從複制

2.mysql-proxy上操作,登入mysql-proxy背景管理。

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

第一次連接配接,會連接配接到主庫上。

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

多開幾個連接配接進行測試,當查詢testproxy.test1表的資料顯示是從庫的資料時,讀寫分離成功。

雲伺服器 ECS 配置:利用MySQL讀寫分離,提升應用資料吞吐性能

<a href="https://help.aliyun.com/document_detail/52256.html?spm=5176.doc51935.6.755.rb0saq">原文連結</a>