集羣:集羣基礎概念
如果用用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