02-lvs

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功能,要禁用這個功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章