1. 程式人生 > 資料庫 >MySQL如何實現負載均衡功能

MySQL如何實現負載均衡功能

前言

MySQL是一個高速度、高效能、多執行緒、開放原始碼,建立在客戶/伺服器(Client/Server)結構上的關係型資料庫管理系(RDBMS)。它始於1979年,最初是MichaelWidenius為瑞典TcX公司建立的UNIREG資料庫系統,當時的UNIREG沒有SQL(StructuredQueryLanguage結構化查詢語言)介面,限制了它的應用。

1996年5月,Widenius開發出了MySQL的最初版本,開始在Internet上公開發行。MySQL的開發人員從一開始就一直關注它的效能,為此不惜特性集,直到今天,MySQL依然保持本色,以高速度高效能為首要原則。隨著時間的推移,MySQL也加入了大型資料庫產品的高階特性,如儲存過程、檢視、觸發器等,使其在企業級資料庫系統中開始被部署應用[1]。

2008年10月,SUN公司收購了MySQLAB公司,開始進入開源領域。隨著重量級作業系統Solaris的開源,SUNMySQL在資料庫市場佔有的份額將會進一步提高。因此,在生產環境中部署具有負載均衡功能的MySQL伺服器叢集,對於提高企業資料庫應用系統的速度、穩定性及可伸縮性具有很大的現實意義,也可以有效降低應用系統的投資成本。

一、負載均衡基本思路

在一個伺服器叢集中,儘可能的平均負載量。通常做法是在伺服器前端設定一個負載均衡器(專門的硬體裝置),MySQL的負載均衡,通常都離不開資料分片(把資料分割成小塊,儲存到不同的db節點中)、複製等操作。

在一個伺服器叢集中,儘可能的平均負載量。通常做法是在伺服器前端設定一個負載均衡器(專門的硬體裝置),MySQL的負載均衡,通常都離不開資料分片(把資料分割成小塊,儲存到不同的db節點中)、複製等操作。

負載均衡的主要貢獻,除了均發資料庫請求,還可提供管理讀/寫策略。在分發請求時則確定那些節點可寫,可讀,隨即將請求傳送到指定節點上執行操作。

二、實現負載均衡的方式

1、mysql讀寫分離

mysql複製時,產生了多個數據副本(備庫),為減少伺服器壓力,備庫用於處理讀操作,主庫可同時處理讀寫是mysql叢集實現讀寫分離的常用策略。

由於備庫的複製是非同步的,無法實時同步,讀寫分離的主要難點也在於備庫上的髒資料。通常如果使用備庫進行讀,一般對資料的實時性要求不能太高。對此,mysql提供了幾種常見的讀寫分離方式,例如基於查詢的讀寫分離、基於髒資料、基於會話等,有興趣可繼續研究。

mysql設定的讀寫分離,減少了主庫的請求量,將大量讀的操作傳送給備庫,實現負載均衡。

2、修改DNS

在高併發負載均衡(一)——企業架構分析和DNS中詳細介紹了DNS以及DNS如何實現負載,簡言之,通過n個伺服器IP指定到一個域名,根據請求的不同標識特徵,將請求傳送給不同的IP伺服器進行處理。

3、引入中介軟體

mysql官方提供了一個mysql負載的中介軟體,mysql_proxy,也需要在伺服器上進行安裝,修改配置檔案(mysql的伺服器IP),實質與nginx類似,也是一個代理伺服器。

4、利用mysql複製分流查詢操作

利用mysql的主從複製可以有效的分流更新操作和查詢操作,具體的實現是一個主伺服器,承擔更新操作,多臺從伺服器,承擔查詢操作,主從之間通過複製實現資料的同步。多臺從伺服器一方面用來確保可用性,一方面可以建立不同的索引滿足不同查詢的需要。

對於主從之間不需要複製全部表的情況,可以通過在主的伺服器上搭建一個虛擬的從伺服器,將需要複製到從伺服器的表設定成blackhole引擎,然後定義replicate-do-table引數只複製這些表,這樣就過濾出需要複製的binlog,減少了傳輸binlog的頻寬。因為搭建的虛擬的從伺服器只起到過濾binlog的作用,並沒有實際紀錄任何資料,所以對主資料庫伺服器的效能影響也非常的有限。

通過複製分流查詢的存在的問題是主資料庫上更新頻繁或者網路出現問題的時候,主從之間的資料可能存在差異,造成查詢結果的異議,應用在設計的時候需要有所考慮。

5、採用分散式資料庫架構

mysql從5.0.3開始支援分散式事務,當前分散式事務只對Innodb儲存引擎支援。分散式的資料庫架構適合大資料量,負載高的情況,有良好的擴充套件性和高可用性。通過在多臺伺服器之間分佈資料實現在多臺伺服器之間的負載平均,提高了訪問的執行效率。具體實現的時候,可以使用mysql的Cluster功能(NDB引擎)或者自己編寫程式來實現全域性事務。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。