集羣:集羣基礎概念

集羣:集羣基礎概念


       如果用用LAMP,http搭建一個論壇,沒有用長連接,是無狀態的,同時有200個請求,其中有50個請求是動態的,150個請求是靜態的。Apache工作在prefork模型,每一個進程佔用2M內存,每一個動態的進程佔用的內存是10M。

        資源佔用計算:

        500M+150*2m = 800M

        隨着用戶的增加,增加到1000個用戶,假如這個1000請求裏面裏面,有800個是靜態請求(圖片,css),200個動態請求(查詢數據庫)。動態查詢數據庫比較慢。

       資源佔用計算:

        800*2+200*10 =3.6G

       假如1000個進程,2個CPU,每個CPU平均要處理500個請求。

 

研究顯示,響應速度超過3秒,客戶會流失60%。

面對這種硬件喫緊的情況,怎麼辦?

有2種方式:

(1)Scale On:  向上擴展

 換一個更強的服務器,換一個32G內存,8個CPU。



       換來的新的服務器是舊的服務器的4倍,是不是網站的性能會增加4倍呢?研究顯示,不是線程增加的,因爲CPU多了之後,會增加調度和資源請求等方面的消耗。此外,這種方式的缺點還有擴展的時候需要整體遷移。

(2)Scale out: 向外擴展

再加服務器,不需要整體遷移,只需要加入服務器。如果再加3臺服務器,怎麼讓請求分配到這3臺服務器呢?

DNS A記錄,一個域名可以有N個記錄:

www.magedu.com   IN A  172.16.100.1

www.magedu.com   IN A  172.16.100.2

www.magedu.com   IN A  172.16.100.3

…….

通過DNS的負載均衡能力。

這種方式有什麼缺陷呢?

爲了增加DNS的查詢效率,會加緩存,這樣一個請求查詢,

會緩存的,然後第二個請求來,直接從緩存裏取,會訪問同一

臺服務器,所以我們不能依賴這種機制實現負載均衡(LoadBalanceing:LB)。

那應該怎麼辦?

怎樣讓請求平均的分發到服務器上?

必須依賴一個前端組件,放一個特殊設備。

請求通過該設備(使用某種算法),將用戶請求分發到各臺服務器。

Round Robit: 輪詢

不但要兼顧公平,還要兼顧效率。

WRR: 加權

如果服務器1的性能是服務器2的2倍,應該多分發請求給服務器


以上,叫負載均衡集羣(LB)。

 

但上述集羣還存在問題:

如果一個用戶發一個圖片到服務器1,下次改用戶再訪問該圖片,但

訪問的是服務器2,該用戶能訪問到該圖片嗎?

怎麼實現用戶在那個服務器發的帖子,訪問那臺服務器都能看

到?

獨立出一個服務器,做MySQL數據庫服務器,所有的web服務器都

從該MySQL服務器中取數據。把圖片放到某個服務器硬盤上,帖子

中只保持帖子的連接。MySQL是不能保持圖片的。

代碼每臺服務器上放一份,每次修改代碼的時候,是不是所有

服務器都要重新發布一份?會很麻煩

可以把其中一臺主機目錄做成一個文件共享服務,

主服務器更新的時候,都會通知從服務器,從服務器

都會自動更新。

 

Rsync: 文件同步工具,在同步前,會檢測哪些文件已經更新的,只同步更新的,而且支持遠程複製。

那rsync多少時間更新一次?

在主服務器上,如果有更新,會通過inotify機制,通知從服務器,自動更新。

文件是否發生改變,是內核管理。

 


隨着用戶量的增加,負載均衡服務器會成爲瓶頸,

該怎麼辦?

功能切分,每一個小功能做一個集羣。

負載均衡服務器主服務器掛了,會啓用備份的。

怎麼知道服務器掛了?切換時間是多長?

主服務器會把自己的心跳信息每個一秒鐘外發一次,

如果從服務器沒有收到主服務器的心跳信息,則取而代之。

這種集羣叫高可用集羣(HA: High Availability)

 

怎麼實現Web服務器集羣的高可用呢?

負載均衡定時對Web服務器進行health check:健康檢查

連續檢查3次,如果不正常,剔除;

但繼續檢查,如果發現主機重新上線,重新加回。

 

 

負載均衡集羣和高可用集羣的異同點?

負載均衡是爲了提高併發處理能力爲着眼點;

高可用集羣是爲了提高服務可用性爲着眼點的。

可用性: 在線時間/(在線時間+故障時間)

99%相當高了,但是還有3天不在線,如果是淘寶

是不可接受的。

99.9%,1年只有0.3天不在線;

99.99%, 1年只有0.003天不在線。

如果做高可用集羣,是不是備用的服務器就處在空閒了?

加入公司恰好好提高web和mail服務,就要4

臺服務器,這樣就造成一般的資源浪費。

再提供一個IP地址,如果web或者mail其中一個發送故障,

把其中一個服務的IP移到另外一個服務器。

 

相當於一臺服務器啓用了3個服務。假如由加了一個服務pop3,

如果其中一個服務掛了,可以往優先級高的服務器

遷移。

服務器之間的心跳信息通過多播或者組播傳遞。

推選一個DC(協調員),負載處理協調事務,如果DC掛了,再推選

一個新DC.

83分鐘

DAS: Direct Attached Storage, 直接附加存儲

NAS: Network Attached Storage,網絡附加存儲

怎麼避免2個不同的主機上的進程修改同一個

NAS上的文件不出錯呢?

NAS會代爲持有鎖,如果有一個主機的一個線程正在寫NAS的

某個文件,此時還有另一臺主機發起寫請求,NAS會阻塞後者

UltraSCSI: 320Mbps/8=40M

 

DAS:  100M 以太網帶寬有12.5M

    1000M以太網有1000/8=125M

SAS: 6Gbps/8

 

Split-brain: 腦裂,某一臺主機假死,但另外一臺

主機以爲前者真死了,把IP奪過來了,開始往NAS

寫數據庫,這是2臺主機都往NAS寫數據。

解決的方法是是第二臺主機在奪IP的同時,

通過電源交換機關閉第一臺主機,這叫

STONITH(Shoot the other node in the head)。

 

HP(HPC)

  High Performance

  向量機

  並行處理集羣

     分佈式文件系統

     將大任務切割爲小任務,分別進行處理的機制

     如Hadoop

 

 



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