前兩天學習了叢集的應用,簡單總結下:叢集並不是很高深難懂的知識,只要掌握其原理,那麼實現起來並不是很困難。下面我們一起來簡單學習下叢集。
什麼是叢集?
叢集或者說是群集:其目的是為了實現將多台電腦群組合以來完成特定的任務,比如天氣預報,大型網路遊戲,這些都需要很大的運算量,單台電腦實現成本太高,而且不顯示。那麼就需要通過叢集的方式,將廢棄的或者正在使用的電腦聯合起來,結合整體的力量來解決這些問題。
叢集的類型大致分為三類:
1.LB Load Balancing(負載平衡叢集)
2.HA High Availability(高可用性設定組群)
3.HP High Performance(高效能叢集)
簡單說明下這三種類型的叢集:
1. 負載平衡型的叢集目的是為了提高服務的並發能力,比如三台WEB伺服器組合成一個叢集,我們就需要用這種類型的叢集來實現負載平衡,既讓這三台WEB伺服器的負載平均一些,不至於有很閒置伺服器。
2. 高可用性的叢集目的是為了提供7*24小時服務的能力,通過提供冗餘伺服器,來防止宏機造成的服務中斷
3. 高效能叢集目的是為了在短期內解決大量複雜的計算,常見的天氣預報系統,科學勘探,人口普查等等
同時,叢集提供了非常好的擴充/縮減性非常,可以方便的增加或者減少伺服器。
叢集實現的方式
LB負載平衡
F5(硬體)
lvs
haproxy
HA 高可用
Heartbeat ***目前分類成幾個小項目
corosync+openais: RHCS ***REDHAT6.0目前使用的,它的可配置,可共用性優於上面的
ultramokey
keepalive
HP高效能
bowerful
============================分 割 線======================================
下面我們來詳細的介紹下負載平衡叢集和高可用叢集的實現原理
負載平衡叢集
————負載平衡其實就是一個樂隊的指揮,指揮下面的樂隊
為了實現負載平衡,我們需要一個前端的負載平衡器---------Direcor轉寄伺服器(或者專業的硬體),通過它來接受用戶端的請求,把這些請求來轉寄給後方的伺服器。在這個轉寄的過程中,根據後方伺服器的負載情況(通過演算法)平均分配,以實現負載平衡。
上面說了,可以通過構架專用的伺服器來實現負載平衡器的作用,那麼通過什麼軟體來實現這個服務呢?
主要有兩種:
1. LVS Linux Virtual Server LVS是由國人章文嵩開發的開源叢集軟體,是目前廣泛使用的叢集軟體之一。
2. haproxy
LVS經過最佳化能夠提供接近於硬體的效能,而且開源所以使用很多。但是當Director這台主機當機了,整個叢集就失效了,這就是單點故障,所以我們需要通過另一種叢集的組合來實現叢集的功能。
好處:
1.實現負載平衡
2.能過提供類似高可用的功能,比如第一台WEB伺服器當機了,通過演算法將請求轉到第二台
3.能夠非常容易擴充,便捷的擴充性,很容易增加主機
高可用叢集
—————認為哪個地方不會出錯,它就出錯----莫非定律
上面說了,高可用叢集就是為了可以提供7*24小時線上服務的能力,那麼完成這樣的需求都需要什麼呢?
完成高可用叢集需要:
1.服務一旦發生故障,服務就轉移到另一台伺服器
假設伺服器A有一顆“心臟“,在它正在提供服務的時候,剩餘兩台伺服器通過探測它的”心跳“來確認它是否還”活著“,如果“心跳”停止了,那麼立刻再監聽一次,如果這次“心跳”仍然是停止的,那麼立刻頂替上去提供服務
2.資料同步
資料同步的實現方式:
1)通過類似NFS的共用服務,但是NFS也需要網路傳輸,效率比較低
2)通過某種機制(檔案同步rsync),將A節點改變的內容發給B節點.
# Rsync是一個命令,不過現在有專業的工具,通過rsync server來實現同步資料。它的效率比較高,但是缺點是檔案必須存兩份。
上面的都是在檔案層級實現同步,效率不高,但是比NFS高多了,缺點是資料村兩份
3) DRBD:在核心中基於塊層級的共用,類似於rsync比rsync工作層級更低的,效率更高的解決方案,而且新版本的核心已經做進核心,廉價
4)使用專業層級的SAN ,通過光纖來同步塊裝置,(存放區域網路)這種儲存的層級非常高,通過塊裝置。
但是資料同步存在一個問題:
A節點很忙,B認為A當機了,就搶過服務,而A並沒有當機,這樣A也搶服務,這樣A,B同時讀寫共用檔案系統同一個檔案,造成檔案系統崩潰
解決這種問題的方法:
B搶過服務後,B(通過電源交換器)直接將A關閉。當然還有其他的實現方法。
上述只是一種說明,真是情況超過100個節點,心跳探測是通過廣播的方式通告,一旦沒有廣播,就判定那個節點死亡了,這樣就造成了幾十個節點爭奪服務的情況,就需要其他的機制來限制這種爭奪,比如排隊,誰在最前,誰頂替,其他的繼續監聽,當然還有其他的方法。
高效能叢集
類似於LVS,但是它的前端,是把請求分成N個小任務,給後方不同的主機處理,處理的結果返回給前端
它通過bowerfull這個軟體來實現,這裡不作過多說明,因為我們不學這個………
它適用於線上量比較大的網站,遊戲,雲端運算等領域等需要短時間內完成大量複雜運算的領域。
下篇介紹LVS的原理,演算法以及簡單實現~謝謝觀看
作者“Dean的Linux”