02-lvs
參考文獻:http://www.linuxvirtualserver.org/zh/lvs1.html
l4
四層交換,四層路由
根據請求報文的目標IP和目標PORT將其轉發至後端主機集羣中的某臺服務器(根據調度算法)
lvs在INPUT鏈上強行把報文送給POSTROUTING鏈,因此在director中的INPUT的鏈上不可以使用iptables的filter規則
lvs cluster term
vs:virtual server
director,dispatcher,balancer
rs:real server
cip:client ip
director virtual ip:vip
director ip:dip
real server ip:rip
lvs:
ipvsadm/ipvs
ipvsadm:用戶空間的命令行工具,用於管理幾區服務及集羣服務器上的RS等
ipvs:工作於內核上的netfilter INPUT鉤子之上的程序
其集羣功能依賴於ipvsadm定義的集羣服務器規則
支持tcp、udp、ah、est、ah_est、sctp等協議的衆多服務
ipvs:內核
ipvsadm:用戶空間
lvs type
lvs-nat
通過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
多目標的DNAT:通過將請求報文的目標地址和目標端口修改爲挑選出某RS的RIP和PORT來實現
1、RS應該和DIP使用私網地址,各RS的網關應該指向DIP
2、請求和響應報文都要經由director轉發;極高負載的場景中,director可能會成爲系統瓶頸
3、支持端口映射
4、VS必須爲Linux系統,RS可以是任意OS,只要提供相應的服務就行
5、RS的RIP與Director的DIP必須在同一網絡
lvs-dr(direct routing)
VS/DR通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地 提高集羣系統的伸縮性。這種方法沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,但是要求調度器與真實服務器都有一塊網卡連 在同一物理網段上。
通過修改請求報文的MAC地址進行轉發:IP首部不會發生變化(源IP爲CIP,目標IP爲VIP)
1、確保前端路由器 將目標IP爲VIP的請求報文一定會發送給Director
解決方案:
靜態綁定:但是lvs就不能做HA,因爲前端路由器靜態綁定了lvs得MAC地址
禁止RS響應VIP的ARP請求
a、arptables
b、修改各RS的內核參數,並把VIP配置在特定的接口上實現禁止其相應
2、RS的RIP可以使用私網地址,也可以使用公網地址
因爲只要RS的報文可以路由到公網上
3、RS跟Director必須在同一物理網絡中(以太網就都是以太網)
4、請求報文必須由Director調度,但響應報文必須不能經由Director
5、不支持端口映射
6、各RS可以使用大多數的OS
lvs-tun(ip tunneling)
採用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報 文通過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網絡服務應答比請求報文大許多,採用 VS/TUN技術後,集羣系統的最大吞吐量可以提高10倍。
不修改請求報文的IP首部(源IP爲CIP,目標IP爲VIP),而是在原有的IP首部之外再次封裝一個IP首部(源IP爲DIP,目標IP爲RIP)
這種方式要求報文的封裝長度不要超過MTU
1、RIP,DIP、VIP全得是公網地址
2、RS的網關不能也不可能指向DIP
3、請求報文經由Director調度,而響應報文將直接發送給CIP
4、不支持端口映射
5、RS的OS必須支持隧道功能
lvs-fullnat(同時改變請求的源IP和目標IP)
通過同時修改請求報文的源IP地址(cip-->dip)和目標IP地址(vip-->rip)實現轉發
1、VIP是公網地址:RIP和DIP是私網地址,且可以不在同一IP網絡中,但需要通過路由互相通信
2、RS收到的請求報文的源IP爲DIP,因此其響應報文將發送給DIP
3、請求報文和響應報文都必須經由Director
4、支持端口映射
5、RS可使用任意類型的OS
lvs scheduler
靜態方法:僅根據算法本身進行輪調
RR:round robin輪詢
調度器通過”輪叫”調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統負載。
WRR:weighted rr圈圈加權輪詢
調度器通過”加權輪叫”調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。
SH:source ip hashing源地址哈希
“源地址散列”調度算法根據請求的源IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
負載均衡器位於server端。
DH:destination ip hashing目標地址哈希
“目標地址散列”調度算法根據請求的目標IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
負載均衡器位於client端。DH用戶記錄client的各個請求經過哪個路由發出
正向web代理,負載均衡內網用戶對互聯網的請求
client-director-web cache server
動態方法:根據算法及其各RS當前的負載狀態進行評估
LC:least connection最少鏈接
overhead=active*256+inactive
調度器通過”最少連接”調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集羣系統的真實服務器具有相近的系統性能,採用”最小連接”調度算法可以較好地均衡負載。
WLC:weighted LC
overhead=(active*256+inactive)/weight
在集羣系統中的服務器性能差異較大的情況下,調度器採用”加權最少鏈接”調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。
SED:Shortest Expectation Delay
overhead=(active+1)*256/weight
NQ:Never Queue
LBLC:locality-based LC
動態的DH算法
“基於局部性的最少鏈接” 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用”最少鏈接”的原則選出一個可用的服務 器,將請求發送到該服務器。
LBLCR:LBLC with replication
“帶複製的基於局部性最少鏈接”調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不同之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按”最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按”最小連接”原則從這個集羣中選出一 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的 程度。
ipvs的集羣服務
四層交換(四層路由)
tcp、udp、sctp、ad、esp、ah_esp
1、一個ipvs主機可以同時定義多個cluster service
端口綁定http、https
多種服務http、mysql
2、一個ipvs服務至少應該一個RS
查看內核是否支持
內核配置中如果有ipvs則支持lvs
[root@husa ~]# grep -i -C 3 "ipvs" /boot/config-3.10.0-229.el7.x86_64
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
--
CONFIG_IP_VS_TAB_BITS=12
#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
--
CONFIG_IP_VS_PROTO_SCTP=y
#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
--
CONFIG_IP_VS_NQ=m
#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8
#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
安裝ipvsadm
[root@husa ~]# yum install ipvsadm
---> 軟件包 ipvsadm.x86_64.0.1.27-7.el7 將被 安裝
--> 解決依賴關係完成
依賴關係解決
========================================================================================
Package 架構 版本 源 大小
========================================================================================
正在安裝:
ipvsadm x86_64 1.27-7.el7 classRoom 45 k
事務概要
========================================================================================
正在安裝 : ipvsadm-1.27-7.el7.x86_64 1/1
驗證中 : ipvsadm-1.27-7.el7.x86_64 1/1
已安裝:
ipvsadm.x86_64 0:1.27-7.el7
完畢!
ipvsadm使用方法
管理集羣服務
ipvsadm -A|E -t|u|f service-address [-s scheduler]
[-p [timeout]] [-M netmask] [-b sched-flags]
ipvsadm -D -t|u|f service-address
-A:添加
-E:修改
-D:刪除
service-address
-t:tcp,ip:port
-u:udp,ip:port
-f:fwm,MARK
-s scheduler:
調度方法默認爲wlc(weighted least connection)
管理集羣服務上的RS
ipvsadm -a|e -t|u|f service-address -r server-address
[-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
-a:添加一個RS
-e:修改一個RS
-d:刪除一個RS
service-address
-t:tcp,vip:port
-u:udp,vip:port
-f:fwm,MARK
server-address
rip[:port]
-g:GATWAY表示DR模型,默認類型
-i:IPIP模型,tunnel模型
-m:MASQUERADE模型,NAT模型
查看
ipvsadm -L|l [options]
-n:numeric,數字格式顯示地址和端口
-c:connection,顯示ipvs連接
--stats:統計數據
--rate:速率
--exact:精確值
[root@husa ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@husa ~]# ipvsadm -L -n --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
[root@husa ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
[root@husa ~]# ipvsadm -L -n --exact
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
保存
使用重定向
ipvsadm -S [-n] > /path/to/somefile
ipvsadm-save > /path/to/somefile
重載
使用重定向
ipvsadm -R < /path/to/somefile
iptables-restore > /path/to/somefile
計數器清零
ipvsadm -Z [-t|u|f service-address]
清空
ipvsadm -C
director上面不要使用iptables的filter功能,要禁用這個功能