一.集群和分布式
1.1 集群
集群是為了解決某個特定問題將多臺計算機組合起來形成的單個系統。即當單獨一臺主機無法承載現有的用戶請求量;或者一臺主機因為單一故障導致業務中斷的時候,就可以增加服務主機數,這些主機在一起提供服務,就叫集群。
類型:
LB(負載均衡);HA(高可用);HPC(高性能計算)
1.2 分布式
一個業務被拆成多個子業務,或者本身就是不同的業務,部署在多臺服務器上。分布式 中,每一臺服務器實現的功能是有差別的,數據和代碼也是不一樣的,分布式每臺服務器功能加起 來,才是完整的業務。
1.3 集群與分布式的區別
集群:同一個業務系統,部署在多臺服務器上,集群中,每一臺服務器實現的功能沒有差別,數據和代碼都是一樣的,即通過提高單位時間內執行的任務數來提升效率,不會因個別主機無法響應而無法進行業務訪問。
分布式:一個業務被拆成多個子業務,或者本身就是不同的業務,部署在多臺服務器上。分布式 中,每一臺服務器實現的功能是有差別的,數據和代碼也是不一樣的,分布式每臺服務器功能加起 來,才是完整的業務 分布式是以縮短單個任務的執行時間來提升效率的,若個別主機無法響應則會導致無法完成完整的業務,導致無法完成服務。
二.lvs運行原理
2.1 LVS概念
VS:調度器
RS:服務器
CIP:用戶?IP
VIP: 調度器鏈接外網的IP
DIP: 調度器鏈接內網的IP
RIP: 服務器?IP
訪問流程:CIP VIP == DIP RIP
2.2 lvs集群的類型
lvs-nat: 修改請求報文的目標IP,多目標IP的DNAT
lvs-dr: 操縱封裝新的MAC地址
lvs-tun: 在原請求IP報文之外新加一個IP首部
lvs-fullnat: 修改請求報文的源和目標IP
2.2.1 nat模式
本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和
PORT實現轉發。
工作原理
1.客戶端發送訪問請求,請求數據包中含有請求來源(cip),訪問目標地址(VIP)訪問目標端口 (9000port)
2.VS服務器接收到訪問請求做DNAT把請求數據包中的目的地由VIP換成RS的RIP和相應端口
3.RS1相應請求,發送響應數據包,包中的相應保溫為數據來源(RIP1)響應目標(CIP)相應端口 (9000port)
4.VS服務器接收到響應數據包,改變包中的數據來源(RIP1-->VIP),響應目標端口(9000-->80)
5.VS服務器把修改過報文的響應數據包回傳給客戶端
缺點:lvs的NAT模式接收和返回客戶端數據包時都要經過lvs的調度機,所以lvs的調度機容易阻塞。
部署NAT模式集群案例
實驗環境
主機名 | ip | 角色 |
client | eth0:172.25.254.111/24 | 用戶主機 |
lvs | eth0:172.25.254.100/24(VIP) eth1:192.168.0.100/24(DIP)僅主機 | 調度器 |
rs1 | eth0:192.168.0.10(RIP1) | web服務器1 |
rs2 | eth0:192.168.0.20(RIP2) | web服務器2 |
配置命令
client:
1.設置路由
?
dr-lvs:
1.安裝ipvsadm(下圖為主機已安裝的圖片)
?2.設置內核路由功能
?3.添加和查看調度策略
?ipvsadm:
(1)管理集群服務中的增刪改
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A :添加
-E:修改
-Z:清空計數器
-C:清空lvs策略
-L:查看lvs策略
-t:tcp服務
-u:udp服務
-s:指定調度算法,默認為WLC -p #設置持久連接超時,持久連接可以理解為在同一個時間段同一個來源的請求調度到同一Realserver -f #firewall mask 火墻標記,是一個數字
(2)管理集群中RealServer的增刪改
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
-a:添加realserver
-e:更改realserver
-t:tcp協議
-u:udp協議
-f:火墻 標簽
-r:realserver地址
-g:直連路由模式
-i:ip隧道模式
-m:nat模式
-w:設定權重
--rate :輸出速率信息
?4.關閉火墻
rs1/rs2:
1.設置路由(以rs1為例):
2.關閉rs的防火墻/允許http服務通過火墻
效果 :
2.2.2 dr模式
工作原理
1.客戶端發送數據幀給vs調度主機幀中內容為客戶端IP+客戶端的MAC+VIP+VIP的MAC
2.VS調度主機接收到數據幀后把幀中的VIP的MAC該為RS1的MAC,此時幀中的數據為客戶端IP+客戶端的MAC+VIP+RS1的MAC
3.RS1得到2中的數據包做出響應回傳數據包,數據包中的內容為VIP+RS1的MAC+客戶端IP+客戶端IP的MAC
特點:
(1)Director和各RS都配置有VIP
(2)確保前端路由器將目標IP為VIP的請求報文發往Director
(3)在前端網關做靜態綁定VIP和Director的MAC地址
部署DR模式集群案例
實驗環境
主機名 | IP | 角色 |
client | eth0:172.25.254.111/24(CIP) | 客戶端主機 |
route | eth0:172.25.254.100/24 eth1:192.168.0.100/24(僅主機) | 路由器 |
lvs | eth0:192.168.0.220/24(VIP)(僅主機) eth0:192.168.0.200/24(DIP)(僅主機) | 調度器 |
rs1 | lo:127.0.0.1/8 lo:192.168.0.220/32(VIP) eth0:192.168.0.10(RIP)(僅主機) | web服務器1 |
rs2 | lo:127.0.0.1/8 lo:192.168.0.220/32(VIP) eth0:192.168.0.20(RIP)(僅主機) | web服務器2 |
配置命令
client:
1.如nat模式設置
route:
2.設置內核路由功能
lvs:
1.添加和查看調度策略
2.若未關閉火墻則將其關閉
?rs(以rs1為例):
解決rs的響應問題,使其不對外響應
效果:
2.2.3 tun模式
工作原理
1.客戶端發送請求數據包,包內有源IP+vip+dport
2.到達vs調度器后對客戶端發送過來的數據包重新封裝添加IP報文頭,新添加的IP報文頭中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并發送到RS1
3.RS收到VS調度器發送過來的數據包做出響應,生成的響應報文中包含SRCIP(VIP)+DSTIP(CIP)+port,響應數據包通過網絡直接回傳給client
2.2.4 fullnet模式
特點:
fullnat:通過同時修改請求報文的源IP地址和目標IP地址進行轉發
CIP --> DIP VIP --> RIP
1.VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP
2.RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往Client
3.請求和響應報文都經由Director
4.支持端口映射
2.3?lvs持久鏈接
在我們客戶上網過程中有很多情況下需要和服務器進行交互,客戶需要提交響應信息給服務器,如果單 純的進行調度會導致客戶填寫的表單丟失,為了解決這個問題我們可以用sh算法,但是sh算法比較簡單 粗暴,可能會導致調度失衡
解決方案
在進行調度時,不管用什么算法,只要相同源過來的數據包我們就把他的訪問記錄在內存中,也就是把 這個源的主機調度到了那個RS上 如果在短期(默認360S)內同源再來訪問我仍然按照內存中記錄的調度信息,把這個源的訪問還調度到 同一臺RS上。 如果過了比較長的時間(默認最長時間360s)同源訪問再次來訪,那么就會被調度到其他的RS上
?效果:
三.lvs的調度算法
3.1 lvs調度算法類型
靜態方法:僅根據算法本身進行調度,不考慮RS的負載情況
動態方法:主要根據每RS當前的負載狀態及調度算法進行調度Overhead=value較小的RS將被調度
3.2 lvs靜態調度算法
1. RR:roundrobin 輪詢 RS分別被調度,當RS配置有差別時不推薦
2. WRR:Weighted RR,加權輪詢根據RS的配置進行加權調度,性能差的RS被調度的次數少
3. SH:Source Hashing,實現session sticky,源IP地址hash;將來自于同一個IP地址的請求始終發往 第一次挑中的RS,從而實現會話綁定
4. DH:Destination Hashing;目標地址哈希,第一次輪詢調度至RS,后續將發往同一個目標地址的請 求始終轉發至第一次挑中的RS
3.3 lvs動態調度算法
主要根據RS當前的負載狀態及調度算法進行調度Overhead=value較小的RS會被調度
1. LC:least connections(最少鏈接發)
適用于長連接應用Overhead(負載值)=activeconns(活動鏈接數) x 256+inactiveconns(非活 動鏈接數)
2. WLC:Weighted LC(權重最少鏈接) 默認調度方法Overhead=(activeconns x 256+inactiveconns)/weight 3、SED:Shortest Expection Delay,
初始連接高權重優先Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,當node1的權重為1,node2的權重為10,經過運算前幾次的調度都會被node2承接
4. NQ:Never Queue,第一輪均勻分配,后續SED
5. LBLC:Locality-Based LC,動態的DH算法,使用場景:根據負載狀態實現正向代理
6. LBLCR:LBLC with Replication,帶復制功能的LBLC,解決LBLC負載不均衡問題,從負載重的復制 到負載輕的RS
四.防火墻標簽解決輪詢錯誤
以http和https為例,當我們在RS中同時開放80和443端口,那么默認控制是分開輪詢的,這樣我們就出現了一個輪詢錯亂的問題
當我第一次訪問80被輪詢到RS1后下次訪問443仍然可能會被輪詢到RS1上
問題呈現:
RS1和RS2中安裝mod_ssl并重啟apache(以rs1為例)