感謝邀請。
MySQL是一個高速度、高性能、多線程、開放源代碼,建立在客戶/服務器(Client/Server)結構上的關系型數據庫管理系(RDBMS)。它始于1979年,最初是MichaelWidenius為瑞典TcX公司創建的UNIREG數據庫系統。目前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的作用,并沒有實際紀錄任何數據,所以對主數據庫服務器的性能影響也非常的有限。
通過復制分流查詢的存在的問題是主數據庫上更新頻繁或者網絡出現問題的時候,主從之間的數據可能存在差異,造成查詢結果的異議,應用在設計的時候需要有所考慮。
高可用負載均衡方案1、虛擬IP技術
haproxy雙機互備離不開一個關鍵的技術,這個技術是虛擬IP,linux可以在一個網卡內定義多個虛擬IP,得把這些IP地址定義到一個虛擬IP。
2、利用keepalived實現雙機熱備
定義出來一個虛擬IP,這個方案叫雙機熱備,準備2個keepalived,keepalived 就是為了搶占虛擬IP的,誰手快誰能搶到,沒搶到的處于等待的狀態。搶到的叫做主服務器,未搶到的叫做備服務器。兩個keepalived之前有心跳檢測的,當備用的檢測到主服務掛了,就立馬搶占虛擬IP。