下面介紹的是Linux集羣
一、Linux集羣基礎
1、Linux集羣類型:LB、HA、HP、DS
(1)、LB:負載均衡集羣
缺陷:單點故障,其調度器會成爲性能瓶頸
(2)、HA:高可用集羣
平均無故障時間(MTBF)、平均故障修復時間(MTTR)。
有效值==MTBF/(MTBF+MTTR) -------------提高可用性公式
(3)、HP:高性能集羣
(4)、DS:分佈式系統集羣
功能:分佈式處理、分佈式存儲
2、Linux集羣調度器:硬件(F5)、軟件(lvs)。
3、負載均衡
(1)、傳輸層的負載均衡:四層交換
應用協議工具:lvs、nginx、haproxy
(2)、應用層的負載均衡:七層交換
應用協議工具:httpd、nginx、haproxy
(3)、FastCGI負載均衡:------------性能好,沒httpd穩定
應用協議工具:httpd、nginx
(4)、mysql的負載均衡:
管理工具:mysql-proxy
二、lvs --------------Linux虛擬服務器
虛擬服務器:vs ------------調度器
真實服務器:rs(Real Server)----------後端服務器
CIP:客戶端 ip,請求發送方 ip地址
VIP:虛擬服務器 ip,客戶端訪問的地址
DIP:調度器 ip
RIP:真實服務器的 ip
1、lvs基礎
lvs是基於套接字(ip:port)來實現數據分發的。lvs,根據目標套接字,調度數據報文到後端真實服務器(rs)上,調度時,通過不同的算法來調度響應的服務器。
lvs使用的調度規則鏈:INPUT
iptables 和 lvs 的規則,不能同時使用,至少INPUT規則鏈不能同時使用。
lvs 的內核組件:ipvs ----------接收 ipvsadm 的管理命令,支持TCP、UDP、SCTP、AH、ESP、AH_ESP協議
用戶空間工具爲:ipvsadm ------------集羣服務和 rs 管理
2、lvs的集羣類型:lvs-nat、lvs-dr、lvs-tunnel。
(1)、lvs-nat -----------多目標IP地址的DNAT
client ---------> DIP ---------- >RIP ------------> RS(目標地址、目標端口)
(同一網段、私有IP)
具體步驟:
client ------> VIP --------> INPUT ------> DIP ------> RIP ------>RS
lvs-nat:(注意)
1、RIP和DIP在同一個網段,並應該是私有IP地址,RS的網關指向DIP。
2、請求報文和響應報文,都必須通過director轉發器轉發,易引發性能瓶頸、單點故障。
3、可以實現端口重定向,即VIP、DIP端口號可以不同。
4、vs必須是Linux系統,而RS可以是任意的操作系統。
(2)、lvs-dr(默認類型) ----------重要
dr:直接路由(注意判斷網關)----------------響應報文不經過轉發器
具體步驟:
client -------> 路由器 ----------> 交換機 ---------> VS -----------> RS ---------------> 交換機
(CIP+VIP) (RIP、DIP同一網段)
-------->路由器 ---------> client
步驟:
1、客戶機將CIP+VIP(源CIP,目的VIP)報文發給路由器;
2、路由器將CIP+VIP報文發給交換機;
3、交換機根據目的地址爲VIP,找到接收端爲轉發器VS;VS有VIP、DIP。
RS也有VIP地址,但是RS的arp_ignore=1/2,表示入棧接口爲指定的接口,在此指定入棧接口爲VS;
4、VS接收CIP+VIP報文,發現VIP地址是集羣服務的,將報文中轉給對應的RS;
VS有DIP接口、VIP標籤接口(別名接口);
5、RS因爲有VIP地址,所以能接收CIP+VIP報文;RS的VIP在環回接口上,不和外部通信;
即:CIP+VIP報文不是從RIP直接發送出去,而是通過一條這路由到VIP的環回接口上走一圈,使發送的源地址變爲VIP;
6、RS發送VIP+CIP給交換機;
因爲RS內,arp_announce=2,決定了出棧地址,在此指定出棧爲對應交換機;
7、交互機轉發VIP+CIP報文發送給路由器;
8、路由器再將VIP+CIP報文發送給客戶端;
客戶端接收到VIP+CIP報文,就像直接從VS發來的一樣,不會意識到有RS的存在。
lvs-dr:(注意)
1、通過對請求報文封裝一個數據鏈路層首部(MAC地址)。
2、重新封裝的源MAC地址,是DIP所在網絡的MAC地址。
目的MAC地址,是調度選出來的RS的RIP接口的MAC地址。
3、源IP地址和源PORT,目的IP地址和目的PORT,在整個報文轉發過程中保持不變
4、交換機 -------> VS:將目標地址爲VIP的報文發往VS,方法:在路由器上靜態綁定IP地址和MAC地址。
交換機 --------> RS:交換機到RS的方法,有兩種:在RS上使用arptables,RS的內核參數(arp_announce、arp_ignore)
5、不支持端口重定向
6、RS爲Linux
7、RS上必須配置RIP和VIP,並且VIP應該配置在lo接口的lable上
(3)、lvs-tun ----------只經過一次VS
tunnel:隧道封裝,VS和RS之間的數據傳輸。
不修改請求報文的ip首部(CIP/VIP),而是在之外再封裝一個IP首部(DIP/RIP)。
具體步驟:
client ----------> VS --------> RS ---------> client(只經過一次VS)
lvs-tun:(注意)
1、CIP,VIP,DIP,RIP都應該是公有IP地址
2、RS的網關無法指向DIP,因此響應報文不會經過Director轉發,而是直接發往CIP
3、不支持端口重定向
4、RS必須支持隧道協議
5、RS上必須配置RIP和VIP
(4)、lvs-fullnat -----------非標準類型(VS的開銷更大,但可增加一定的安全性)
同時修改請求報文的源IP地址、目的IP地址,實現報文轉發。
CIP --------->DIP
VIP --------->RIP
即:CIP/VIP -------> DIP/RIP
lvs-fullnat:(注意)
1、CIP、VIP爲公有地址,DIP、RIP爲私有地址。DIP、RIP可不在同一網段。
2、RS對收到的請求報文的響應報文的目的地址是DIP,所以請求報文和響應報文都必須經過Director
3、支持端口重定向
3、lvs的調度算法
根據是否與RS的負載狀態有關,分爲:靜態算法(無關)、動態算法(有關)。
(1)、靜態算法:與算法本身有關
RR:輪詢算法
WRR:加權輪詢算法
SH:源地址哈希算法(源地址綁定)
DH:目標地址哈希(正向代理服務器) ---------緩存方式實現
(2)、動態算法:與RS當前負載狀態有關,RS的負載:Overhead。
LC:最少連接數算法(選擇Overhead值小的)------------存在【起點問題】
*WLC(默認算法):加權最小連接算法 -------------存在【起點問題】
SED:最短期望延遲算法 -------------解決了起點問題,存在【連續請求問題】
NQ:無序列排隊算法 ------------開始據RS權重依次分配一個,保證一個活動連接,然後再SED
LBLC:基於本地的最少連接數算法 ----------------動態DH(正向代理)
LBLCR:帶有複製功能的LBLC算法 ------------帶複製的動態DH(正向代理)
4、ipvsadm -------------編寫ipvs規則
ipvs規則:作用於內核空間的TCP/IP協議棧上 -------------INPUT鏈上
ipvsadm命令:
(1)、集羣相關
【添加】集羣相關格式:
ipvsadm -A -t|u|f service-address [-s scheduler] [-p [timeout]]
常用選項:
-t:基於TCP的集羣,其後地址爲VIP地址
-u:基於UDP的集羣,其後地址爲VIP地址
-f:基於防火牆標記的集羣,其後地址爲mangle表中的標記
-s:集羣調度算法
-p:持久連接
【修改】集羣格式:ipvsadm -E -t|u|f service-address [-s scheduler] [-p [timeout]]
常用選項:
-E:刪除集羣
【刪除】集羣格式:ipvsadm -D -t|u|f service-address
常用選項:
-D:刪除指定集羣
【清除】集羣:ipvsadm -C
常用選型:
-C:清空集羣,所有清空
(2)、集羣中的RS相關:
【添加】RS:ipvsadm -a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
常用選項:
-r:添加的RS的,IP地址和端口
-w:權重
-g:dr集羣 ----------默認
-i:tunnel集羣
-m:nat集羣
【修改】其中的RS:ipvsadm -e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
常用選項:
-e:修改集羣中RS
【刪除】其中的RS:ipvsadm -d -t|u|f service-address -r server-address
常用選項:
-d:刪除集羣中的RS
(3)、查看集羣信息
格式:ipvsadm -L|l [options]:
常用選項:
-c:集羣中各連接狀態
--stats:集羣的統計數據信息
--rate:傳輸速率相關
--timeout:超時時長
(4)、保存、重載ipvs的規則
保存格式:ipvsadm -S [-n]
# ipvsadm -S [-n] > /PATH/TO/IPVS_RULE_FILE
# ipvsadm-save > /PATH/TO/IPVS_RULE_FILE
重載格式:
# ipvsadm -R < /PATH/FROM/IPVS_RULE_FILE
# ipvsadm-restore < /PATH/FROM/IPVS_RULE_FILE
5、lvs-nat集羣實現過程:
調度器配置:----------------支持端口重定向
# ipvsadm -A -t 172.16.72.1:80 -s rr
# ipvsadm -a -t 172.16.72.1:80 -r 192.168.100.8:8080 -m -w 1
# ipvsadm -a -t 172.16.72.1:80 -r 192.168.100.9 -m -w 2
RS服務器配置:
正常配置ip地址,注意網關指向調度器的DIP。
6、lvs-dr集羣的實現過程:
調度器配置:------------兩塊網卡
一塊網卡:作爲主接口,配置DIP
另一塊網卡:作爲網絡標籤,配置VIP,用於接收報文。-----------注意配置廣播地址,即只是自己使用。
# ifconfig eno16777736:0 172.16.72.101 netmask 255.255.255.255 broadcast 172.16.72.101 up
RS服務器配置:
網卡主接口:配置RIP
調整內核參數:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore --------入棧接口
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce -------出棧接口
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
設置VIP:
# ifconfig lo:0 172.16.72.101 netmask 255.255.255.255 broadcast 172.16.72.101 up
設置直接路由:
# route add -host 172.16.72.101 dev lo:0
7、防火牆標記集羣的實現過程:
打標記:iptables -t mangle -A PREROUTING -d VIP -p tcp --dport PORT -j MARK --set-mark 6
建防火牆標記集羣:ipvsadm -A -f FWM -s rr
8、LVS持久連接:
常做的端口持久端口爲:443、80
# iptables -t mangle -A PREROUTING -d VIP -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6