mysql集羣與分佈式數據庫的區別

原文鏈接:https://www.iteye.com/blog/han-zw-1662941

簡單說,分佈式是以縮短單個任務的執行時間來提升效率的,而集羣則是通過提高單位時間內執行的任務數來提升效率。

例如:

如果一個任務由10個子任務組成,每個子任務單獨執行需1小時,則在一臺服務器上執行改任務需10小時。

採用分佈式方案,提供10臺服務器,每臺服務器只負責處理一個子任務,不考慮子任務間的依賴關係,執行完這個任務只需一個小時。(這種工作模式的一個典型代表就是Hadoop的Map/Reduce分佈式計算模型)

而採用集羣方案,同樣提供10臺服務器,每臺服務器都能獨立處理這個任務。假設有10個任務同時到達,10個服務器將同時工作,10小後,10個任務同時完成,這樣,整身來看,還是1小時內完成一個任務!

 

以下是摘抄自網絡文章:

集羣概念

1. 兩大關鍵特性 
集羣是一組協同工作的服務實體,用以提供比單一服務實體更具擴展性與可用性的服務平臺。在客戶端看來,一個集羣就象是一個服務實體,但事實上集羣由一組服務實體組成。與單一服務實體相比較,集羣提供了以下兩個關鍵特性:

·  可擴展性--集羣的性能不限於單一的服務實體,新的服務實體可以動態地加入到集羣,從而增強集羣的性能。

·  高可用性--集羣通過服務實體冗餘使客戶端免於輕易遇到out of service的警告。在集羣中,同樣的服務可以由多個服務實體提供。如果一個服務實體失敗了,另一個服務實體會接管失敗的服務實體。集羣提供的從一個出 錯的服務實體恢復到另一個服務實體的功能增強了應用的可用性。

2. 兩大能力 
爲了具有可擴展性和高可用性特點,集羣的必須具備以下兩大能力:

·  負載均衡--負載均衡能把任務比較均衡地分佈到集羣環境下的計算和網絡資源。

·  錯誤恢復--由於某種原因,執行某個任務的資源出現故障,另一服務實體中執行同一任務的資源接着完成任務。這種由於一個實體中的資源不能工作,另一個實體中的資源透明的繼續完成任務的過程叫錯誤恢復。

負載均衡和錯誤恢復都要求各服務實體中有執行同一任務的資源存在,而且對於同一任務的各個資源來說,執行任務所需的信息視圖(信息上下文)必須是一樣的。

3. 兩大技術 
實現集羣務必要有以下兩大技術:

·  集羣地址--集羣由多個服務實體組成,集羣客戶端通過訪問集羣的集羣地址獲取集羣內部各服務實體的功能。具有單一集羣地址(也叫單一影像)是集羣的一個基 本特徵。維護集羣地址的設置被稱爲負載均衡器。負載均衡器內部負責管理各個服務實體的加入和退出,外部負責集羣地址向內部服務實體地址的轉換。有的負載均 衡器實現真正的負載均衡算法,有的只支持任務的轉換。只實現任務轉換的負載均衡器適用於支持ACTIVE-STANDBY的集羣環境,在那裏,集羣中只有 一個服務實體工作,當正在工作的服務實體發生故障時,負載均衡器把後來的任務轉向另外一個服務實體。

·  內部通信--爲了能協同工作、實現負載均衡和錯誤恢復,集羣各實體間必須時常通信,比如負載均衡器對服務實體心跳測試信息、服務實體間任務執行上下文信息的通信。

具有同一個集羣地址使得客戶端能訪問集羣提供的計算服務,一個集羣地址下隱藏了各個服務實體的內部地址,使得客戶要求的計算服務能在各個服務實體之間分佈。內部通信是集羣能正常運轉的基礎,它使得集羣具有均衡負載和錯誤恢復的能力。

集羣分類

Linux集羣主要分成三大類( 高可用集羣, 負載均衡集羣,科學計算集羣)

高可用集羣( High Availability Cluster)
負載均衡集羣(Load Balance Cluster)
科學計算集羣(High Performance Computing Cluster)
================================================

具體包括:

Linux High Availability 高可用集羣                                       
(普通兩節點雙機熱備,多節點HA集羣,RAC, shared, share-nothing集羣等)

Linux Load Balance 負載均衡集羣                                      
 (LVS等....)

Linux High Performance Computing 高性能科學計算集羣     
 (Beowulf 類集羣....)

分佈式存儲                                                                         
其他類linux集羣              
(如Openmosix, rendering farm 等..)

詳細介紹

1. 高可用集羣(High Availability Cluster)
常見的就是2個節點做成的HA集羣,有很多通俗的不科學的名稱,比如"雙機熱備", "雙機互備", "雙機".
高可用集羣解決的是保障用戶的應用程序持續對外提供服務的能力。 (請注意高可用集羣既不是用來保護業務數據的,保護的是用戶的業務程序對外不間斷提供服務,把因軟件/硬件/人爲造成的故障對業務的影響降低到最小程度)。

2. 負載均衡集羣(Load Balance Cluster)

負載均衡系統:集羣中所有的節點都處於活動狀態,它們分攤系統的工作負載。一般Web服務器集羣、數據庫集羣和應用服務器集羣都屬於這種類型。

負載均衡集羣一般用於相應網絡請求的網頁服務器,數據庫服務器。這種集羣可以在接到請求時,檢查接受請求較少,不繁忙的服務器,並把請求轉到這些服務器上。從檢查其他服務器狀態這一點上看,負載均衡和容錯集羣很接近,不同之處是數量上更多。

3. 科學計算集羣(High Performance Computing Cluster)

高性能計算(High Perfermance Computing)集羣,簡稱HPC集羣。這類集羣致力於提供單個計算機所不能提供的強大的計算能力。

高性能計算分類  
 高吞吐計算(High-throughput Computing)
  有一類高性能計算,可以把它分成若干可以並行的子任務,而且各個子任務彼此間沒有什麼關聯。象在家搜尋外星人( SETI@HOME  -- Search for Extraterrestrial Intelligence at Home )就是這一類型應用。這一項目是利用Internet上的閒置的計算資源來搜尋外星人。SETI項目的服務器將一組數據和數據模式發給Internet上 參加SETI的計算節點,計算節點在給定的數據上用給定的模式進行搜索,然後將搜索的結果發給服務器。服務器負責將從各個計算節點返回的數據彙集成完整的 數據。因爲這種類型應用的一個共同特徵是在海量數據上搜索某些模式,所以把這類計算稱爲高吞吐計算。所謂的Internet計算都屬於這一類。按照 Flynn的分類,高吞吐計算屬於SIMD(Single Instruction/Multiple Data)的範疇。

 分佈計算(Distributed Computing)
  另一類計算剛好和高吞吐計算相反,它們雖然可以給分成若干並行的子任務,但是子任務間聯繫很緊密,需要大量的數據交換。按照Flynn的分類,分佈式的高性能計算屬於MIMD(Multiple Instruction/Multiple Data)的範疇。

4. 分佈式(集羣)與集羣的聯繫與區別 
分佈式是指將不同的業務分佈在不同的地方。 
而集羣指的是將幾臺服務器集中在一起,實現同一業務。 
分佈式中的每一個節點,都可以做集羣。 
而集羣並不一定就是分佈式的。 
舉例:就比如新浪網,訪問的人多了,他可以做一個羣集,前面放一個響應服務器,後面幾臺服務器完成同一業務,如果有業務訪問的時候,響應服務器看哪臺服務器的負載不是很重,就將給哪一臺去完成。 
而分佈式,從窄意上理解,也跟集羣差不多, 但是它的組織比較鬆散,不像集羣,有一個組織性,一臺服務器垮了,其它的服務器可以頂上來。 
分佈式的每一個節點,都完成不同的業務,一個節點垮了,哪這個業務就不可訪問了

 

--------------------分割線--------------------------

分佈式數據庫是指利用高速網絡將物理上分散的多個數據存儲單元連接起來組成一個邏輯上統一的數據庫。分佈式數據庫的基本思想是將原來集中式數據庫中的數據分散存儲到多個通過網絡連接的數據存儲節點上,以獲得更大的存儲容量和更高的併發訪問量。

作者:愛源碼來源:今日頭條|2018-01-02 20:00

 收藏

  分享

 

本文只是一個概念,具體配置太多,這裏不做細節描述。

1、分佈式應用的概念和優勢

分佈式數據庫是指利用高速網絡將物理上分散的多個數據存儲單元連接起來組成一個邏輯上統一的數據庫。分佈式數據庫的基本思想是將原來集中式數據庫中的數據分散存儲到多個通過網絡連接的數據存儲節點上,以獲得更大的存儲容量和更高的併發訪問量。近年來,隨着數據量的增長,分佈式數據庫技術也得到了快速的發展,傳統的關係型數據庫開始從集中式模型向分佈式存儲,從集中式計算走向分佈式計算。

分佈式數據庫系統的主要目的是容災、異地數據備份,並且通過就近訪問原則,用戶可以就近訪問數據庫節點,這樣就實現了異地的負載均衡。同時,通過數據庫之間的數據傳輸同步,可以分佈式保持數據的一致性,這個過程完成了數據備份,異地存儲數據在單點故障的時候不影響服務的訪問,只需要將訪問流量切換異地鏡像就行。

分佈式數據庫應用的優勢如下:

(1)適合分佈式數據管理,能夠有效提高系統性能。

(2)系統經濟性和靈活性好。

(3)系統的可靠性和可用性強。

MySQL海量數據分佈式存儲

2、mysql分佈式應用的主要技術

(1)mysql數據切割

數據切割(sharding)是指通過某種特定的條件,將存放在同一數據庫中的數據分散存放到多個數據庫(主機)上面,以達到分散單臺設備負載的效果。數據切分還可以提高系統的總體可用性,因爲單臺crash之後,只有總體數據的某部分不同,而不是所有數據。

根據其切分規則的類型,可以分爲兩種切分模式。一種是按照不同的表(或者schema)來切分到不同的數據庫(主機)之上,這種切分成爲數據的垂直(縱向切分);另一種則是根據表中數據的邏輯關係,將同一個表中的數據按照某種條件拆分到多臺數據庫(主機)上面,這種切分稱爲數據的水平(橫向)切分。垂直切分的***特點就是規則簡單,實施也更爲方便,尤其適合各個業務之間耦合度低,相互影響小、業務邏輯非常清晰的系統。在這種系統中,可以很容易做到將不同業務模塊所使用的表拆分到不同的數據庫中。根據不同的表進行拆分,對應用程序的影響也更小,拆分規則也會比較簡單清晰。水平切分比垂直切分更復雜一點。因爲要將同一個表中的不同數據拆分到不同的數據庫中,對於應用程序來說,拆分規則本身比較複雜,後期的數據維護也更加複雜一些。

(2)爲什麼要切分數據?

1)像Oracle這樣成熟穩定的DB可以支撐海量數據的存儲和查詢,但是價格不是所有人都承受得起。

2)負載高點時,Master-Slaver模式中存在瓶頸。現有技術中,在負載高點時使用相關的Replication機制來實現相關的讀寫的吞吐性能。這種機制存在兩個瓶頸:一是有效性依賴於讀操作的比例,這裏Master往往會成爲瓶頸所在,寫操作時需要一個順序隊列來執行,過載時Master會承受不住,Slaver的數據同步延遲也會很大,同時還會消耗CPU的計算能力,爲write操作在Master上執行以後還是需要在每臺slave機器上都跑一次。而Sharding可以輕鬆的將計算,存儲,I/O並行分發到多臺機器上,這樣可以充分利用多臺機器各種處理能力,同時可以避免單點失敗,提供系統的可用性,進行很好的錯誤隔離。

3)用免費的MySQL和廉價的Server甚至是PC做集羣,達到小型機+大型商業DB的效果,減少大量的資金投入,降低運營成本,何樂而不爲呢?

Mysql5.1以上的版本都支持數據表分區功能。數據庫中的數據在經過垂直或水平切分被存放在不同的數據庫主機中之後,應用系統面臨的***問題就是如何讓這些數據源得到較好的整合,有以下兩種解決思路。

1)在每個應用程序模塊中配置管理自己需要的一個(或者多個)數據源,直接訪問各個數據庫,在模塊內完成數據的整合。

2)通過中間代理層來統一管理所有的數據源,後端數據庫集羣對前端應用程序透明。

第二種方案,雖然短期內需要付出的成本可能會大一些,但是對整個系統的擴展性來說,是非常有幫助的。針對第二種方案,可以思路如下:

1)利用mysql proxy實現數據切分及整合。

Mysql proxy是在客戶端請求與mysql服務器之間建立一個連接池,所有客戶端請求都發送到mysql proxy,由mysql proxy進行相應的分析,判斷是讀操作還是寫操作,然後發送到相應的mysql服務器上。對於多節點slave集羣,也可以做到負載均衡的效果。

2)利用amoeba實現數據切分及整合。

Amoeba是一個基於java開發的、專注於解決分佈式數據庫數據源整合proxy程序的開源框架,amoeba已經具有query路由,query過濾、讀寫分離、負載均衡以及HA機制等相關內容。Amoeba主要解決以下幾個問題:

①數據切分後複雜數據源整合

②提供數據切分規則並降低數據切分規則給數據庫帶來的影響

③降低數據庫與客戶端的連接數

④讀寫分離路由

3)利用HiveDB實現數據切分及整合。

3、mysql讀寫分離

讀寫分離是利用數據庫的複製技術,將讀和寫分佈在不同的處理節點上,從而達到提高可用性和擴展性的目的。主數據庫提供寫操作,從數據庫提供讀操作,在很多系統中,更多地是讀操作。當主數據庫進行寫操作時,數據要同步到從數據庫,這樣纔能有效保證數據庫完整性。Mysql也有自己的同步數據技術。Mysql通過二進制日誌來複制數據,主數據庫同步到從數據庫後,從數據庫一般由多臺數據庫組成,這樣才能達到減輕壓力的目的。讀操作應根據服務器的壓力分配到不同的服務器,而不是簡單的隨機分配。Mysql提供了mysql proxy實現讀寫分離操作。

目前較爲常見的mysql讀寫分離分爲以下兩種。

①基於程序代碼內部實現

在代碼中根據select、insert進行路由分類,這類方法也是目前生產環境中應用最廣泛的。

②基於中間代理層實現

代理位於客戶端和服務器之間,代理服務器收到客戶端請求後通過判斷轉發到後端數據庫。下圖是ebay讀寫分離的結構圖,通過share plex近乎實時的複製數據到其他數據節點,再通過特定的模塊檢查數據庫狀態,並進行負載均衡、讀寫分離,極大地提高了系統可用性。

4、mysql集羣

Mysql cluster技術在分佈式系統中爲mysql數據提供了冗餘特性,增強了安全性,使得單個mysql服務器故障不會對系統產生巨大的負面效應,系統的穩定性得到保障。

Mysql cluster採用shared-nothing(無共享)架構。Mysql custer主要利用了NDB存儲引擎來實現,NDB存儲引擎是一個內存式存儲引擎,要求數據必須全部加載到內存之中。數據被自動分佈在集羣中的不同存儲節點上,每個存儲節點只保存完整數據的一個分片(fragment)。同時,用戶可以設置同一份數據保存在多個不同的存儲節點上,以保證單點故障不會造成數據丟失。

Mysql cluster需要一組計算機,每臺計算機的角色可能是不一樣的。Mysql cluster按照節點類型可以分爲3類:管理節點(對其他節點進行管理)、數據節點(存放cluster中的數據,可以有多個)和mysql節點(存放表結構,可以有多個)。Cluster中的某計算機可以是某一種節點,也可以是2種或3種節點的集合。這3種節點只是在邏輯上劃分,所以他們不一定和物理計算機是一一對應的關係。多個節點之間可以分佈在不同的地理位置,因此也是一個實現分佈式數據庫的方案。

Mysql集羣的出現很好的實現了數據庫的負載均衡,減少了數據中心節點的壓力和大數據處理,當數據庫中心節點出現故障時,集羣會採用一定的策略切換到其他備份節點上,有效的屏蔽了故障問題,單節點的失效不會影響整個數據庫對外提供服務。而且通過採用數據庫集羣架構,主從數據庫之間時刻都在進行數據的同步冗餘,數據庫是多點的、分佈式的,良好的完成了數據庫數據的備份,避免了數據損失。

 

參考:https://www.iteye.com/blog/han-zw-1662941 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章