1.集群定義:
集群是指用一組服務器運行一到多個應用程序。
集群可以簡單到只有兩台服務器,在他們之間配置故障切換,如果一台服務器失效,由另一台服務器接管應用程序的處理。集群也可以用來運行復雜的分布式系統:應用程序將數據分割成多個可管理的部分,每個部分都可以獨立進行處理。如果一台服務器失效,其他服務器不會受影響,失效節點的進程被重新分配到集群中的其他節點。
2.集群的分類
故障切換集群、分布式數據庫系統
故障切換集群又可以分為兩類:(主動/被動集群、主動/主動集群)
主動/被動集群:任何時候都只有一台服務器擁有負載,輔助服務器以被動模式運行,時刻等待着主動服務器停機進而接管主服務器,它一直與主動服務器保持同步。缺點:只有一個服務器擁有負載,資源浪費,效率低。
主動/主動集群:兩台服務器同時都執行實際的任務。每台服務器都同一個實例,同時又可以作為其他服務器上運行的實例的故障切換數據庫。
3.為什么要用數據庫集群
使用讀寫分離,提高數據庫的系統性能。
讓主數據庫處理事務性操作,從數據庫處理SELECT查詢。數據庫復制被用來把事務性查詢導致的變更同步到集群中的從數據庫,從而使從數據庫和主數據庫的數據保持一致。 主服務器也可以提供查詢服務。
4.為什么讀寫分離能提高數據庫的性能?
1).物理服務器增加,負荷增加
2).主從只負責各自的寫和讀,極大程度的緩解X鎖和S鎖爭用
3).從庫可配置myisam引擎,提升查詢性能以及節約系統開銷
4).從庫同步主庫的數據和主庫直接寫還是有區別的,通過主庫發送來的binlog恢復數據,但是,最重要區別在於主庫向從庫發送binlog是異步的,從庫恢復數據也是異步的。
5).讀寫分離適用與讀遠大於寫的場景,如果只有一台服務器,當select很多時,update和delete會被這些select訪問中的數據堵塞,等待select結束,並發性能不高。對於寫和讀比例相近的應用,應該部署雙主相互復制。
6).分攤讀取。假如我們有1主3從,假設現在1分鍾內有10條寫入,150條讀取。那么,1主3從相當於共計40條寫入,而讀取總數沒變,因此平均下來每台服務器承擔了10條寫入和50條讀取。因此,雖然寫入沒變,但是讀取大大分攤了,提高了系統性能。另外,當讀取被分攤后,又間接提高了寫入的性能。
7).MySQL復制另外一大功能是增加冗余,提高可用性,當一台數據庫服務器宕機后能通過調整另外一台從庫來以最快的速度恢復服務。
5.數據庫集群和分布式數據庫有什么區別?
1).分布式是並聯工作的,集群是串聯工作的。
2).分布式是指將不同的業務分布在不同的地方。集群指的是將幾台服務器集中在一起,實現同一業務。分布式中的每一個節點,都可以做集群。 而集群並不一定就是分布式的。分布式的每一個節點,都完成不同的業務,一個節點垮了,哪這個業務就不可訪問了。
舉例:比如新浪網,訪問的人多了,他可以做一個群集,前面放一個響應服務器,后面幾台服務器完成同一業務,如果有業務訪問的時候,響應服務器看哪台服務器的
負載不是很重,就將給哪一台去完成。而分布式,跟集群差不多, 但是它的組織比較松散,不像集群,有一個組織性,一台服務器垮了,其它的服務器可以頂上來。
3).分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率。