熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

分區和負載均衡讓MySQL更大更好

2022-06-13   來源: SQL語言 

  通常當我們的MySQL數據庫逐漸變慢時我們就希望通過一切努力使它變得更快更強更大更好!那麼都有哪些方法呢?別著急我會一個一個給大家介紹如何才能實現這些美好的願望閱讀本系列文章將有助於擴大你的視野更好地規劃你將來的需要本系列的第一篇文章更快更強的MySQL討論了查詢優化和硬件調整包括增加額外的服務器和應用程序變更本文將介紹如何通過分區和負載均衡解決方案讓你的MySQL變得更大更好

  更大的MySQL

  增加更多的MySQL實例是提高應用程序響應速度的有效方法如果你的服務器有多顆CPU充足的內存和快速的硬盤這些資源有相當一部分處於閒置狀態那麼在這種情況下在服務器上可以同時運行多個MySQL實例因為MySQL默認情況下只有一個進程和多個會話線程因此它真正能利用的最大硬件資源是有限的

  如果你的服務器已經快飽和了那麼必須增加服務器不管你的多個MySQL實例是在一台服務器上還是在多台服務器上你都需要為應用程序配置一個方法讓它知道該將查詢發送給哪台服務器如果是要修改數據那就應該將指令發送到主數據庫實例如果僅僅是查詢操作那麼隨便發給任何一個從數據庫實例即可

  數據分區和水平分區

  因為許多Web應用程序是通過會話來識別用戶的通過會話將它們分配到不同的從數據庫實例顯得很有道理例如AGHOPZ數據庫實例可能在工作這時可以通過用戶名的哈希值或userid將用戶分配到不同的服務器上這就是所謂的分區鍵選擇分區鍵時需要慎重決定因為它會影響到你如何構建從數據庫實例主要是考慮如何讓這些服務器平均承擔工作負載如果選擇得不好假設從數據庫倒掉也可能會引起數據中斷

  如果正采用這種分區你需要決定程序運行時使用哪個數據庫這可以通過一個中間層如MySQL代理來實現雖然它還處於Alpha階段但它的思想很好並且已經有很多人將其用於生產環境它運行在服務器上響應端口上的請求然後將這些查詢通過高速語言如lua實現的某些邏輯轉發給後端適當的服務器

  其次你也可以在應用程序中指定將查詢發到哪些服務器這也是最靈活的方法你可以完全控制整個決策過程你也可以使用master_pos_wait檢查從數據庫實例看看它們是否有足夠的計算資源還有你使用的編程語言或Web框架可能也會提供這方面的支持如果你還不清楚可以查詢它們的文檔

  你還可以研究一下Continuent TungstenDBIx::DBCluster for Perl以及SQLRelay它們支持許多不同的編程語言和數據庫同樣CMS如Drupal也支持多種只讀的從數據庫你只需要啟用這個功能即可

  使用這種架構需要考慮的另一個事情是是否要使用主數據庫實例以及何時使用一般說來所有插入更新和刪除操作都應放在主數據庫實例上完成所有的查詢操作都放在從數據庫實例上完成例如如果某個用戶對博客文章發表了注釋此時如果直接使用從數據庫可能無法完成因為MySQL復制架構會存在滯後此時從數據庫中可能還沒有那篇博文

  檢查過時數據是一個更好的方法如果你有報告查詢在夜間運行這種方法可能工作得很好你只需要確保復制趕得上進度即可

  另一個方法是通過版本號跟蹤數據庫變更在讀取數據之前確定數據是否是最新的版本

  最後MySQL提供了一個函數master_pos_wait它可以確定從數據庫更新到哪個時間點了

  功能分區

  你可能已經使用到功能分區使用功能分區時需要創建一個生產數據庫的副本用於不同目的如其中一個用於數據倉庫和報告另一個用於文本搜索等

  通過負載均衡使MySQL變得更好

  如果你的從數據庫已經有些只讀數據你可能需要實現負載均衡將流量平均分配到各個從數據庫實現方法有多種如隨機分配最少連接法響應速度最快法或某種加權平均法雖然某些硬件負載均衡設備可以提供負載均衡功能但它們往往是設計用於均衡網絡流量並沒有提供數據庫相關的均衡功能

  幸運的是有很多軟件解決方案LVS項目就是一個不錯的候選它已經發展得相當成熟穩定它提供了類似DNS輪詢的負載均衡算法但是在IP層實現的速度非常快此外也有很多項目是建立在LVS基礎之上的包括wackamole它是基於對等網絡的因此不會發生單點故障還有一個值得推薦的項目是ultramonkey

  小結

  MySQL提供了許多高級特性可以實現無限制的規模擴展視不同應用環境有不同的最佳解決方案因此需要在用於生產數據庫之前最好先對各種解決方案進行充分了解並盡量搭建與生產環境負載相當的測試平台進行測試


From:http://tw.wingwit.com/Article/program/SQL/201405/30852.html
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.