集羣概念:html
由兩個或兩個以上的服務實體協調、配合完成一系列工做的模式,對外表現爲一個總體。node
特色mysql
分配用戶請求nginx
故障轉移web
共享存儲算法
結構:sql
agent 負載調度器後端
業務層 服務器池緩存
存儲 共享存儲安全
1.垂直擴展
爲一樣的計算資源池加入更多資源,好比增長更多內存、磁盤或是虛擬cpu,來應對增長的應用負載
2.水平擴展
須要向計算平臺加入更多的機器或設備,來處理增加的需求
向上拓展:對硬件的升級、更換、提高
缺點:
性能:提高是有限度的
弊端:
DNS沒有對後端設備健康狀態進行檢測的能力,也就是說當WEB2設備出現故障以後,DNS仍是根據本身緩存的記錄把任務分配到WEB2上。
dns的缺陷:沒法實現健康狀態檢查
緩存dns沒法實現分配用戶請求
DNS的解析緩存形成任務分配不均,致使單個服務器壓力過大。
算法:
RR(Round-Robin):輪詢
WRR(weightd-Round-Robin):權重(加權輪詢)
使用agent代理機制,能夠對後端設備的健康狀態進行檢測,有效提升的工做效率。
最基礎的一個集羣拓撲:
負載均衡集羣(LBC Load Balance Cluster)
做用:減輕單臺服務器壓力
Load Balancing負載均衡,不一樣節點之間相互獨立,不共享任何資源;經過必定算法將客戶端的訪問請求平分到羣集的各個節點上,充分利用每一個節點的資源。負載均衡擴展了網絡設備和服務器帶寬,增長吞吐量,增強網絡數據處理能力。
實現:
軟件:LVS RAC
硬件:F5
1.分擔系統的負載
2.監控節點的運行狀況
在一個網絡下,能夠搭建多個負載均衡集羣來實現壓力的分散:
區別:
硬件後期的維護,比較好,可是價格偏高
軟件靈活性比較大,價格相對便宜
高可用集羣(HA):保證服務器的不間斷運行
爲應用程序提供持久訪問
出現故障自由切換
實現訪問web1和web2不管哪個,獲得的結果都是同樣的,不會有誤差
爲了使用web1和web2內容一致:
使用的機制是:心跳檢測
方法實現:
RS232串口線(心跳線)
每隔幾秒鐘發個數據包,看對方是否(存活)有迴應,無迴應,則判斷目標出現問題
現有網卡
經過兩個服務器之間的eth1端口進行檢測(每隔一段時間發送數據包進行確認)
eth0是給用戶訪問使用的
服務器可用性要求標準:
99% | 2個9 | 1年 | 87.6小時(停機) |
99.9% | 3個9 | 1年 | 8.8小時(停機) |
99.99% | 4個9 | 1年 | 53分鐘(停機) |
99.999% | 5個9 | 1年 | 3-5分鐘(停機) |
若是心跳線出現故障:
兩臺主機都認爲對方出現故障(死亡),都會搶着接替對方工做,處理響應客戶的請求,搶奪共享的資源、數據。(這種現象稱之爲「腦裂」)
帶來的後果:數據不完整、甚至是災難級
在腦裂的狀況下:
兩臺主機都認爲對方已死亡,都會對共享存儲服務器,讀取、寫入數據,這樣同時對一個文件,進行寫入,會形成數據丟失,完整性遭到破壞。
對服務形成影響:致使訪問不可達
正常狀況下web1在工做,web2不工做,在腦裂狀況下,雙方主機都認爲對方已死亡,這時,web2服務器會搶奪web1的IP地址,給本身配置,在同一個網絡下,因爲web1和web2使用相同的IP,會形成網絡故障,用戶不能正常訪問服務器。
解決方案:
預防爲主:增長冗餘心跳線
強制隔離:
兩臺服務器都鏈接電源交換機,當web2檢測出web1出問題時,想要接替工做,又爲了不腦裂狀況出現,這時,web2會發送一條指令給電源交換機,這時電源交換機會將鏈接web1的電源線斷掉,這樣就不會出現web1和web2衝突的現象
Stonish:爆頭
Shoot in other node in the head
用工具實現:ipfail
爲兩個服務器設置參考IP(通常是網關IP)
當兩臺服務器認爲對方出問題時,這時會ping 設置的參考IP,若是參考IP都ping不通,這時服務器會斷定問題不是出在對方服務器,是本身內部出了問題,這時,會檢測本身內部,並做出相應的動做
高可用集羣軟件:
高性能運算集羣:
A包含10個子任務:a1 a2 a3 .......a10
每一個子任務完成須要1小時
負載均衡集羣:(單位時間內處理的子任務)
1臺計算機完成任務須要10小時(處理10個子任務)
10臺計算機完成任務須要10小時(總共處理100個子任務)
高性能運算集羣:(縮短單個任務的執行時間,來提高效率)
1臺計算機完成任務須要10小時(處理10個子任務)
10臺計算機完成任務須要1小時(總共處理10個子任務)
高性能集羣概念:
高性能計算集羣就是將一個大的運算任務拆分,每個節點計算其中一部分運算內容,最後再將每臺計算機的處理結果彙總,獲得咱們想要的答案,這種運算方式就是高性能運算集羣。
3PB的數據須要處理,這時AGENT會告訴客戶端,如何分發到每一個存儲服務器爲100G,以後,客戶端會找AGENT2,詢問AGENT2如何處理這些分發的數據,這時AGNET2會分別去到每一個節點上運行
程序以運算處理數據,當數據被處理完以後,會將數據彙總,反饋給客戶端,這個過程就是高性能運算集羣。
負載調度器:
硬件:F5 citrix array
軟件:
四層負載調度器 四層交換機
效率高
LVS Linux virtual server
七層負載調度器 七層交換機
mysql proxy
nginx
haproxy
高級特性
四層交換機:IP+端口
七層交換機:URL或主機名或頁面內容包含的高級特性
區別:
1.觸發條件不一樣
四層:工做在傳輸層,轉發數據依靠的是三層的ip和四層的port
七層:工做在應用層。轉發數據依靠URL或主機名
2.實現原理不一樣
四層負載調度器:TCP鏈接創建一次,客戶端和RS主機之間
四層交換機工做原理:(轉發做用)
七層負載調度器:TCP鏈接創建兩次,客戶端和負載調度器;負載調度器和RS主機
七層交換機工做原理:(起到代理服務器的角色)
七層交換機能夠根據客戶發起的訪問請求,作出判斷,給客戶相應的內容反饋!
3.應用場景不一樣
四層負載調度器:TCP應用爲主 OA ERP
七層負載調度器:以HTTP協議爲主
4.安全性不一樣
四層負載調度器:轉發***
七層負載調度器:攔截***
IPVS:鉤子函數,內核機制,在請求沒有到達目的地址以前,捕獲並取得優先控制權的函數。
IPVSADM:工做在用戶空間,負責爲ipvs內核框架編寫規則,定義誰是集羣服務,誰是後端真實 的服務器
LVS概述:
首先簡單介紹一下LVS (Linux Virtual Server)究竟是什麼東西,其實它是一種集羣(Cluster)技術,採用IP負載均衡技術和基於內容請求分發技術。調度器具備很好的吞吐率,將請求均衡地轉移到不一樣的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,並且無需修改客戶端和服務器端的程序。
舉例:
解釋:當外網客戶端,將請求提交到負載調讀器的外網卡上,這時網卡會對請求進行處理,將請求提交到內核所提供的的INPUT函數模塊上 ,這個函數正常狀況下,會將客戶申請訪問本地80端口的應用請求轉發給本地應用所安裝HTTP服務器上面,可是咱們真正的目的是,想讓負載調度器將用戶的請求轉發到後端的web網站節點上面去,這時咱們就須要IPVS,IPVS在這裏扮演的是鉤子函數角色(正常狀況下,所接受的請求會被轉發到本地的相應服務上面,可是IPVS所扮演的鉤子函數角色會在請求被轉發到本地服務上面以前,將數據請求包文強制拿過來,本身先查看,若是發現用戶是訪問集羣節點的話,會經過eth1端口,由於IPVS會保存必定的策略,本身可以判斷,而後會相應的把請求轉交給web1,第二次給web2,依次輪詢。。。)
這時,咱們會有疑問,IPVS內核模塊爲何會知道把請求分別轉發給web1、web2,這是由於是有IPVSadm工具來實現的
CIP:client IP 客戶端IP
DIP:director IP 負載調度器內網口IP
VIP:virtual IP 虛擬IP 集羣IP
RIP:realserver IP 服務器節點IP 真實服務器IP
NAT:地址轉換
注意:
1.最多支持10臺左右RS
2.集羣節點(director和RS)必須在同一個網絡中
3.RS的網關必須位於客戶端和RS之間
4.RS能夠用任意的操做系統
5.RS網關必須設置爲director
DR:路由模式
優勢:
大大減輕了負載調度器的壓力
能夠支持更多的服務器節點RS
注意:
1.RS必須和director在一個網絡
2.RS能夠設置公網IP或私網IP(當負載調度器壞了的話,能夠直接讓客戶訪問經過公網IP訪問集羣)
3.負載調度器只負責入站請求
4.集羣節點的網關不能使用director
TUN:隧道模式
優勢:
不受地理位置限制
注意:
1.全部節點都要有公網IP,RS而且必須配置在RIP上
2.RS必定不能使用負載調度器做爲默認網關
4.必須支持隧道功能
負載調度器算法:
靜態算法:只考慮算法自己,不考慮服務器狀態
rr (輪循):從1開始到n結束(N=RS個數)、無狀態的的調度算法,不考慮服務器性能
wrr (加權輪循):按權重比例進行調度,權重越大,負責的請求越多(權重=優先級)
sh (源地址hash):源地址散列或源地址hash,實現會話綁定,保留以前創建的會話信息。未來自於同一個ip地址的請求發送給一個真實服務器。
dh (目標地址hash):將同一個目標地址的請求,發送給同一個服務器節點。提升緩存命中率
動態算法:既要考慮算法自己,也要考慮服務器狀態(原理:經過hash表記錄鏈接狀態----active/inactive)
LC (最少鏈接):將新的鏈接請求分配給當前鏈接數最少的服務器。。。公式:活動鏈接*256+非活動鏈接
WLC(加權最少鏈接):最少鏈接的特殊模式。。。公式:(活動鏈接*256+非活動鏈接)/權重
SED(最短時間望延遲):加權最少鏈接的特殊模式。。。。公式:(活動鏈接 +1)*256/權重
NQ (永不排隊):sed的特殊模式,當某臺真實服務器鏈接爲0時,直接分配,不計算
LBLC(基於局部性的最少鏈接):dh的特殊模式,既要提升緩存命中率,又要考慮鏈接數量。先根據請求的目標 IP 地址尋找最近的該目標 IP 地址全部使用的服務器,若是這臺服務器依然可用,而且有能力處理該請求,調度器會盡可能選擇相同的服務器,不然會繼續選擇其它可行的服務器
LBLCR(帶複製的基於局部性的最少鏈接):LBLCR=LBLC+緩存共享機制
實驗:基於NAT模式負載集羣搭建
拓撲展現:
背景:須要五臺虛擬機,圖中IP爲展現使用,如下操做,不同
在共享存儲服務器上面配置NFS
在RS1和RS2上面分別安裝Apache服務
RS1的網頁頁面經過掛載NFS服務器上面的首頁
mount -t nfs 192.168.115.179:/share /var/www/html/
掛載以後、啓動Apache服務以後,失敗
chcon -R -h -t httpd_sys_content_t /var/www/html/
以後就行了
RS1的網關指向負載調度器的內網口IP
route add default gw 192.168.115.175
RS2的網頁由本身建立,兩個服務首頁不一樣,方便區分
RS2的網關指向負載調度器的內網口IP
負載調度器:(雙網卡)
開啓路由轉發功能
並執行sysctl -p刷新
安裝IPVSadm軟件
檢查ipvsadm是否安裝成功
配置
外網客戶端驗證:(每刷新一次,頁面會一次出現)
基於DR模式的負載集羣:
原理拓撲展現:
實驗拓撲展現:
圖上IP地址僅供參考:
ARP工做原理:
arp_ignore:接收到其餘主機的ARP請求後的響應級別
後面參數設置的若是是0:
只要本機配置有響應的IP地址就響應
後面參數設置的若是是1:
僅響應請求的目的地址配置在請求到達的網絡接口上
arp_announce:設置ARP通告的級別
0:通告網絡本機全部接口的任何地址信息
2:僅向目標網絡通告網絡與其相匹配的網絡信息
配置:
負載調度器:
配置ifcfg0:1映射子端口,地址爲集羣IP(210)
優化環境配置:(/etc/sysctl.conf)
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
sysctl -p
查詢IPVS是否安裝:
grep -i "ip_vs" /boot/config-2.6.32-431.el6.x86_64
安裝ipvsadm
rpm -ivh ipvsadm-1.26-2.el6.x86_64.rpm
設置增長負載調度器,默認使用輪詢
ipvsadm -A -t 192.168.115.210:80 -s rr
設置使用DR模式
ipvsadm -a -t 192.168.115.210:80 -r 192.168.115.178:80 -g
ipvsadm -a -t 192.168.115.210:80 -r 192.168.115.173:80 -g
ipvsadm -L -n
service ipvsadm save
共享存儲服務器:
RS1配置:
配置本地迴環接口IP
優化環境變量(/etc/sysctl.conf)
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
安裝Apache服務,並將NFS服務器上面的主頁內容掛在過來
mount -t nfs 192.168.115.179:/share /var/www/html/
設置一條路由,凡是請求跟集羣地址(115.210)相關的信息的時候,都會交給本地迴環接口處理
route add -host 192.168.115.210 dev lo:0
RS2配置:
配置本地迴環映射端口:
優化環境:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
安裝Apache服務,手動建立一個主頁,區份內容,以便達到實驗效果
設置一條路由,凡是請求跟集羣地址(115.210)相關的信息的時候,都會交給本地迴環接口處理
route add -host 192.168.115.210 dev lo:0
客戶端驗證:直接訪問集羣的IP,進行訪問,刷新會依次輪詢顯示頁面
ipvsadm命令參數選項詳細含義以下所示:
-A (--add-service) 在內核的虛擬服務器列表中添加一條新的虛擬IP記錄。也就是增長一臺新的虛擬服務器。虛擬IP也就是虛擬服務器的IP地址。
-E (--edit-service) 編輯內核虛擬服務器列表中的一條虛擬服務器記錄
-D (--delete-service) 刪除內核虛擬服務器列表中的一條虛擬服務器記錄
-C (--clear) 清除內核虛擬服務器列表中的全部規則
-R (--restore) 恢復虛擬服務器規則
-S (--save) 保存虛擬服務器規則,輸出爲-R 選項可讀的格式
-a (--add-server) 在內核虛擬服務器列表的一條記錄裏添加一條新的Real Server記錄。也就是在一個虛擬服務器中增長一臺新的Real Server
-e (--edit-server) 編輯一條虛擬服務器記錄中的某條Real Server記錄
-d (--delete-server) 刪除一條虛擬服務器記錄中的某條Real Server記錄
-L|-l –list 顯示內核中虛擬服務器列表
-Z (--zero) 虛擬服務器列表計數器清零(清空當前的鏈接數量等)
--set tcp tcpfin udp 設置鏈接超時值
-t 說明虛擬服務器提供的是tcp服務,此選項後面跟以下格式:
[virtual-service-address:port] or [real-server-ip:port]
-u 說明虛擬服務器提供的是udp服務,此選項後面跟以下格式:
[virtual-service-address:port] or [real-server-ip:port]
-f fwmark 說明是通過iptables標記過的服務類型
-s 此選項後面跟LVS使用的調度算法
有這樣幾個選項: rr|wrr|lc|wlc|lblc|lblcr|dh|sh
默認的調度算法是: wlc
-p [timeout] 在某個Real Server上持續的服務時間。也就是說來自同一個用戶的屢次請求,將被同一個Real Server處理。此參數通常用於有動態請求的操做中,timeout 的默認值爲360 分鐘。例如:-p 600,表示持續服務時間爲600分鐘。
-r 指定Real Server的IP地址,此選項後面跟以下格式:
[real-server-ip:port]
-g (--gatewaying) 指定LVS 的工做模式爲直接路由模式(此模式是LVS 默認工做模式)
-i (-ipip) 指定LVS 的工做模式爲隧道模式
-m (--masquerading) 指定LVS 的工做模式爲NAT模式
-w (--weight) weight 指定Real Server的權值
-c (--connection) 顯示LVS目前的鏈接信息 如:ipvsadm -L -c
-L --timeout 顯示「tcp tcpfin udp」的timeout值,如:ipvsadm -L --timeout
-L --daemon 顯示同步守護進程狀態,例如:ipvsadm -L –daemon
-L --stats 顯示統計信息,例如:ipvsadm -L –stats
-L --rate 顯示速率信息,例如:ipvsadm -L --rate
-L --sort 對虛擬服務器和真實服務器排序輸出,例如:ipvsadm -L --sort
注: 保存添加的虛擬ip記錄和ipvsadm的規則可使用service ipvsadm save,還能夠用-S或--save。清除全部記錄和規則除了使用-C,還以使用--clear。