如今,隨着上網人數的激增,一些大型的網站開始使用數據庫集羣來提升數據庫的可靠性和數據庫的性能。那麼在介紹數據庫集羣以前首先須要弄清楚幾個問題。mysql
1.爲何要用數據庫集羣sql
(1)經過使用數據庫集羣可使讀寫分離,提升數據庫的系統性能。數據庫
你們都知道,mysql是支持分佈式的。MySQL Proxy最強大的一項功能是實現「讀寫分離(Read/Write Splitting)」。基本的原理是讓主數據庫處理事務性查詢,而從數據庫處服務器
理SELECT查詢。數據庫複製被用來把事務性查詢致使的變動同步到集羣中的從數據庫,從而使從數據庫和主數據庫的數據保持一致。 固然,主服務器也能夠提供查詢服務。網絡
使用讀寫分離最大的做用無非是環境服務器壓力。能夠看下這張圖:併發
——————————————————————————————————————————————————————————異步
爲何讀寫分離能提升數據庫的性能?(摘自網絡)分佈式
1.物理服務器增長,負荷增長
2.主從只負責各自的寫和讀,極大程度的緩解X鎖和S鎖爭用
3.從庫可配置myisam引擎,提高查詢性能以及節約系統開銷
4.從庫同步主庫的數據和主庫直接寫仍是有區別的,經過主庫發送來的binlog恢復數據,可是,最重要區別在於主庫向從庫發送binlog是異步的,從庫恢復數據也是異步的
5.讀寫分離適用與讀遠大於寫的場景,若是隻有一臺服務器,當select不少時,update和delete會被這些select訪問中的數據堵塞,等待select結束,併發性能不高。 對於寫和讀比例相近的應用,應該部署雙主相互複製oop
6.能夠在從庫啓動是增長一些參數來提升其讀的性能,例如--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-write=ALL。固然這些設置也是須要根據具體業務需求來定得,不必定能用上性能
7.分攤讀取。假如咱們有1主3從,不考慮上述1中提到的從庫單方面設置,假設如今1 分鐘內有10條寫入,150條讀取。那麼,1主3從至關於共計40條寫入,而讀取總數沒變,所以平均下來每臺服務器承擔了10條寫入和50條讀取(主庫不 承擔讀取操做)。所以,雖然寫入沒變,可是讀取大大分攤了,提升了系統性能。另外,當讀取被分攤後,又間接提升了寫入的性能。因此,整體性能提升了,說白 了就是拿機器和帶寬換性能。MySQL官方文檔中有相關演算公式:官方文檔 見6.9FAQ之「MySQL複製可以什麼時候和多大程度提升系統性能」
8.MySQL複製另一大功能是增長冗餘,提升可用性,當一臺數據庫服務器宕機後能經過調整另一臺從庫來以最快的速度恢復服務,所以不能光看性能,也就是說1主1從也是能夠的。
——————————————————————————————————————————————————————————
2.數據庫集羣和分佈式數據庫有什麼區別?
一句話:分佈式是並聯工做的,集羣是串聯工做的。
1:分佈式是指將不一樣的業務分佈在不一樣的地方。 而集羣指的是將幾臺服務器集中在一塊兒,實現同一業務。分佈式中的每個節點,均可以作集羣。 而集羣並不必定就是分
布式的。
舉例:就好比新浪網,訪問的人多了,他能夠作一個羣集,前面放一個響應服務器,後面幾臺服務器完成同一業務,若是有業務訪問的時候,響應服務器看哪臺服務器的
負載不是很重,就將給哪一臺去完成。而分佈式,從窄意上理解,也跟集羣差很少, 可是它的組織比較鬆散,不像集羣,有一個組織性,一臺服務器垮了,其它的服務器能夠頂上來。
分佈式的每個節點,都完成不一樣的業務,一個節點垮了,哪這個業務就不可訪問了。
2:簡單說,分佈式是以縮短單個任務的執行時間來提高效率的,而集羣則是經過提升單位時間內執行的任務數來提高效率。
舉例:若是一個任務由10個子任務組成,每一個子任務單獨執行需1小時,則在一臺服務器上執行該任務需10小時。
採用分佈式方案,提供10臺服務器,每臺服務器只負責處理一個子任務,不考慮子任務間的依賴關係,執行完這個任務只需一個小時。(這種工做模式的一個典型表明就是
Hadoop的Map/Reduce分佈式計算模型)
而採用集羣方案,一樣提供10臺服務器,每臺服務器都能獨立處理這個任務。假設有10個任務同時到達,10個服務器將同時工做,1小時後,10個任務同時完成,這樣,
整身來看,仍是1小時內完成一個任務!
看下圖:
轉載自:http://blog.csdn.net/zhangzijiejiayou