共計 1941 個字符,預計需要花費 5 分鐘才能閱讀完成。
本篇文章為大家展示了如何利用分區和負載均衡獲得更大更好的 MySQL 數據庫,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
MySQL 數據庫的優化和使用是一件很發雜的事情,那么我們如何讓數據庫變得更大更好呢? 本文將介紹如何通過分區和負載均衡解決方案讓你的 MySQL 變得更大更好。
更大的 MySQL
增加更多的 MySQL 實例是提高應用程序響應速度的有效方法,如果你的服務器有多顆 CPU,充足的內存和快速的硬盤,這些資源有相當一部分處于閑置狀態,那么在這種情況下,在服務器上可以同時運行多個 MySQL 實例,因為 MySQL 默認情況下只有一個進程和多個會話線程,因此它真正能利用的最大硬件資源是有限的。
如果你的服務器已經快飽和了,那么必須增加服務器,不管你的多個 MySQL 實例是在一臺服務器上,還是在多臺服務器上,你都需要為應用程序配置一個方法讓它知道該將查詢發送給哪臺服務器,如果是要修改數據,那就應該將指令發送到主數據庫實例,如果僅僅是查詢操作,那么隨便發給任何一個從數據庫實例即可。
1、數據分區和水平分區
因為許多 Web 應用程序是通過會話來識別用戶的,通過會話將它們分配到不同的從數據庫實例顯得很有道理。例如 A -G,H-O,P- Z 數據庫實例可能在工作,這時可以通過用戶名的哈希值,或 userid 將用戶分配到不同的服務器上,這就是所謂的分區鍵,選擇分區鍵時需要慎重決定,因為它會影響到你如何構建從數據庫實例,主要是考慮如何讓這些服務器平均承擔工作負載,如果選擇得不好,假設從數據庫倒掉,也可能會引起數據中斷。
如果正采用這種分區,你需要決定程序運行時使用哪個數據庫,這可以通過一個中間層如 MySQL 代理來實現,雖然它還處于 Alpha 階段,但它的思想很好,并且已經有很多人將其用于生產環境,它運行在服務器上,響應端口 3306 上的請求,然后將這些查詢通過高速語言如 lua 實現的某些邏輯轉發給后端適當的服務器。
其次你也可以在應用程序中指定將查詢發到哪些服務器,這也是最靈活的方法,你可以完全控制整個決策過程,你也可以使用 master_pos_wait 檢查從數據庫實例,看看它們是否有足夠的計算資源。還有你使用的語言或 Web 框架可能也會提供這方面的支持,如果你還不清楚,可以查詢它們的文檔。
你還可以研究一下 Continuent Tungsten,DBIx::DBCluster for Perl 以及 SQLRelay,它們支持許多不同的編程語言和。同樣,CMS 如 Drupal 也支持多種只讀的從數據庫,你只需要啟用這個功能即可。
使用這種架構需要考慮的另一個事情是,是否要使用主數據庫實例,以及何時使用,一般說來,所有插入,更新和刪除操作都應放在主數據庫實例上完成,所有的查詢操作都放在從數據庫實例上完成。例如,如果某個用戶對博客文章發表了注釋,此時如果直接使用從數據庫,可能無法完成,因為 MySQL 復制架構會存在滯后,此時從數據庫中可能還沒有那篇博文。
檢查過時數據是一個更好的方法,如果你有報告查詢在夜間運行,這種方法可能工作得很好,你只需要確保復制趕得上進度即可。
另一個方法是通過版本號跟蹤數據庫變更,在讀取數據之前確定數據是否是最新的版本。
最后,MySQL 提供了一個函數 master_pos_wait,它可以確定從數據庫更新到哪個時間點了。
2、功能分區
你可能已經使用到功能分區,使用功能分區時,需要創建一個生產數據庫的副本用于不同目的,如其中一個用于數據倉庫和報告,另一個用于文本搜索等。
通過負載均衡使 MySQL 變得更好
如果你的從數據庫已經有些只讀數據,你可能需要實現負載均衡,將流量平均分配到各個從數據庫,實現方法有多種,如隨機分配,最少連接法,響應速度最快法,或某種加權平均法,雖然某些硬件負載均衡設備可以提供負載均衡功能,但它們往往是設計用于均衡網絡流量,并沒有提供數據庫相關的均衡功能。
幸運的是有很多軟件解決方案,LVS 項目就是一個不錯的候選,它已經發展得相當成熟穩定,它提供了類似 DNS 輪詢的負載均衡算法,但是在 IP 層實現的,速度非常快。此外,也有很多項目是建立在 LVS 基礎之上的,包括 wackamole,它是基于對等網絡的,因此不會發生單點故障,還有一個值得推薦的項目是 ultramonkey。
MySQL 提供了許多高級特性可以實現無限制的規模擴展,視不同應用環境有不同的最佳解決方案,因此需要在用于生產數據庫之前,最好先對各種解決方案進行充分了解,并盡量搭建與生產環境負載相當的測試平臺進行測試。
上述內容就是如何利用分區和負載均衡獲得更大更好的 MySQL 數據庫,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。