MySQL如何實現(xiàn)負載均衡功能
前言
MySQL是一個高速度、高性能、多線程、開放源代碼,建立在客戶/服務(wù)器(Client/Server)結(jié)構(gòu)上的關(guān)系型數(shù)據(jù)庫管理系(RDBMS)。它始于1979年,最初是MichaelWidenius為瑞典TcX公司創(chuàng)建的UNIREG數(shù)據(jù)庫系統(tǒng),當(dāng)時的UNIREG沒有SQL(StructuredQueryLanguage結(jié)構(gòu)化查詢語言)接口,限制了它的應(yīng)用。
1996年5月,Widenius開發(fā)出了MySQL的最初版本,開始在Internet上公開發(fā)行。MySQL的開發(fā)人員從一開始就一直關(guān)注它的性能,為此不惜特性集,直到今天,MySQL依然保持本色,以高速度高性能為首要原則。隨著時間的推移,MySQL也加入了大型數(shù)據(jù)庫產(chǎn)品的高級特性,如存儲過程、視圖、觸發(fā)器等,使其在企業(yè)級數(shù)據(jù)庫系統(tǒng)中開始被部署應(yīng)用[1]。
2008年10月,SUN公司收購了MySQLAB公司,開始進入開源領(lǐng)域。隨著重量級操作系統(tǒng)Solaris的開源,SUNMySQL在數(shù)據(jù)庫市場占有的份額將會進一步提高。因此,在生產(chǎn)環(huán)境中部署具有負載均衡功能的MySQL服務(wù)器集群,對于提高企業(yè)數(shù)據(jù)庫應(yīng)用系統(tǒng)的速度、穩(wěn)定性及可伸縮性具有很大的現(xiàn)實意義,也可以有效降低應(yīng)用系統(tǒng)的投資成本。
一、負載均衡基本思路
在一個服務(wù)器集群中,盡可能的平均負載量。通常做法是在服務(wù)器前端設(shè)置一個負載均衡器(專門的硬件設(shè)備),MySQL的負載均衡,通常都離不開數(shù)據(jù)分片(把數(shù)據(jù)分割成小塊,存儲到不同的db節(jié)點中)、復(fù)制等操作。
在一個服務(wù)器集群中,盡可能的平均負載量。通常做法是在服務(wù)器前端設(shè)置一個負載均衡器(專門的硬件設(shè)備),MySQL的負載均衡,通常都離不開數(shù)據(jù)分片(把數(shù)據(jù)分割成小塊,存儲到不同的db節(jié)點中)、復(fù)制等操作。
負載均衡的主要貢獻,除了均發(fā)數(shù)據(jù)庫請求,還可提供管理讀/寫策略。在分發(fā)請求時則確定那些節(jié)點可寫,可讀,隨即將請求發(fā)送到指定節(jié)點上執(zhí)行操作。
二、實現(xiàn)負載均衡的方式
1、mysql讀寫分離
mysql復(fù)制時,產(chǎn)生了多個數(shù)據(jù)副本(備庫),為減少服務(wù)器壓力,備庫用于處理讀操作,主庫可同時處理讀寫是mysql集群實現(xiàn)讀寫分離的常用策略。
由于備庫的復(fù)制是異步的,無法實時同步,讀寫分離的主要難點也在于備庫上的臟數(shù)據(jù)。通常如果使用備庫進行讀,一般對數(shù)據(jù)的實時性要求不能太高。對此,mysql提供了幾種常見的讀寫分離方式,例如基于查詢的讀寫分離、基于臟數(shù)據(jù)、基于會話等,有興趣可繼續(xù)研究。
mysql設(shè)置的讀寫分離,減少了主庫的請求量,將大量讀的操作發(fā)送給備庫,實現(xiàn)負載均衡。
2、修改DNS
在高并發(fā)負載均衡(一)——企業(yè)架構(gòu)分析和DNS中詳細介紹了DNS以及DNS如何實現(xiàn)負載,簡言之,通過n個服務(wù)器IP指定到一個域名,根據(jù)請求的不同標識特征,將請求發(fā)送給不同的IP服務(wù)器進行處理。
3、引入中間件
mysql官方提供了一個mysql負載的中間件,mysql_proxy,也需要在服務(wù)器上進行安裝,修改配置文件(mysql的服務(wù)器IP),實質(zhì)與nginx類似,也是一個代理服務(wù)器。
4、利用mysql復(fù)制分流查詢操作
利用mysql的主從復(fù)制可以有效的分流更新操作和查詢操作,具體的實現(xiàn)是一個主服務(wù)器,承擔(dān)更新操作,多臺從服務(wù)器,承擔(dān)查詢操作,主從之間通過復(fù)制實現(xiàn)數(shù)據(jù)的同步。多臺從服務(wù)器一方面用來確??捎眯裕环矫婵梢詣?chuàng)建不同的索引滿足不同查詢的需要。
對于主從之間不需要復(fù)制全部表的情況,可以通過在主的服務(wù)器上搭建一個虛擬的從服務(wù)器,將需要復(fù)制到從服務(wù)器的表設(shè)置成blackhole引擎,然后定義replicate-do-table參數(shù)只復(fù)制這些表,這樣就過濾出需要復(fù)制的binlog,減少了傳輸binlog的帶寬。因為搭建的虛擬的從服務(wù)器只起到過濾binlog的作用,并沒有實際紀錄任何數(shù)據(jù),所以對主數(shù)據(jù)庫服務(wù)器的性能影響也非常的有限。
通過復(fù)制分流查詢的存在的問題是主數(shù)據(jù)庫上更新頻繁或者網(wǎng)絡(luò)出現(xiàn)問題的時候,主從之間的數(shù)據(jù)可能存在差異,造成查詢結(jié)果的異議,應(yīng)用在設(shè)計的時候需要有所考慮。
5、采用分布式數(shù)據(jù)庫架構(gòu)
mysql從5.0.3開始支持分布式事務(wù),當(dāng)前分布式事務(wù)只對Innodb存儲引擎支持。分布式的數(shù)據(jù)庫架構(gòu)適合大數(shù)據(jù)量,負載高的情況,有良好的擴展性和高可用性。通過在多臺服務(wù)器之間分布數(shù)據(jù)實現(xiàn)在多臺服務(wù)器之間的負載平均,提高了訪問的執(zhí)行效率。具體實現(xiàn)的時候,可以使用mysql的Cluster功能(NDB引擎)或者自己編寫程序來實現(xiàn)全局事務(wù)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
mysql:ERROR?2003?(HY000)故障錯誤解決方法與思路
這篇文章主要給大家介紹了關(guān)于mysql:ERROR?2003?(HY000)故障錯誤解決方法與思路的相關(guān)資料,error 2003 hy000是MySQL數(shù)據(jù)庫中一個常見的錯誤代碼,它通常意味著MySQL無法建立到數(shù)據(jù)庫的連接,需要的朋友可以參考下2024-02-02MySQL的日志基礎(chǔ)知識及基本操作學(xué)習(xí)教程
這篇文章主要介紹了MySQL的日志基礎(chǔ)知識學(xué)習(xí)教程,包括MySQL中日志相關(guān)常用的服務(wù)器變量說明,極力推薦!需要的朋友可以參考下2015-11-11mysql獲取指定時間段中所有日期或月份的語句(不設(shè)存儲過程,不加表)
最近需要用mysql獲取一個時間段中的所有月份,網(wǎng)上查都是要設(shè)置存儲過程或者加一個日期表的,不滿足我的需求,翻墻找資料加上自己試驗,如下代碼分享給大家2021-06-06MySQL對數(shù)據(jù)表已有表進行分區(qū)表的實現(xiàn)
本文主要介紹對現(xiàn)有的一個表進行創(chuàng)建分區(qū)表,并把數(shù)據(jù)遷移到新表,可以按時間來分區(qū),具有一定的參考價值,感興趣的可以了解一下2021-10-10