lvs基本概念、排程方法、ipvsadm命令及nat模型示例

鄭子明發表於2016-02-03

LVS型別:

NAT:-->(DNAT)
DR
TUN
FULLNAT


LVS的常見名詞解釋

CIP<-->VIP--DIP<-->RIP

Direct Routing:直接路由
負載均衡層(Loader Balancer),它就是我們所說的的Director

RS real server :真實提供服務的計算機


VIP:Virtual IP(VIP)address:Director用來向客戶端提供服務的IP地址


RIP:Real IP (RIP) address:叢集節點(後臺真正提供服務的伺服器)所使用的IP地址


DIP:Director's IP (DIP) address:Director用來和D/RIP 進行聯絡的地址


CIP:Client computer's IP (CIP) address:公網IP,客戶端使用的IP

LVS NAT的特性

1.RS應該使用私有地址
2.RS的閘道器必須指向DIP
3.RIP和DIP必須在同一網段內
4.請求和響應的報文都得經過Director,在高負載場景中,Director很可能成為效能瓶頸
5.支援埠對映
6.RS可以使用任意支援叢集服務的OS

LVS DR型別


1.讓前段路由將請求發往VIP時,只能是Dirctor上的VIP
解決方案
1.靜態地址繫結
未必有路由器的配置許可權
Director呼叫時靜態地址繫結將難以使用
   2.arptables
   3.修改linux核心引數,將RS上的VIP配置在lo介面的別名上,限制linux僅對對應介面的ARP請求做相應


LVS DR型別的特性

1.RS可以使用私有地址,還可以使用公網地址,此時可以直接通過網際網路連入RS,以實現配置、監控等
2.RS的閘道器一定不能指向DIP
3.RS跟Dirctory要在同一物理網路內(不能有路由器分隔)
4.請求報文經過Directory,但響應報文一定不經過Director
5.不支援埠對映
6.RS可以使用大多數的作業系統


LVS TUN型別:IP隧道
  1.RIP,DIP,VIP都得是公網地址
  2.RS的閘道器不會指向也不可能指向DIP
  3.請求報文經過Directory,但響應報文一定不經過Director
  4.不支援埠對映
  5.RS的OS必須得支援隧道功能


LVS的排程方法:10種

  靜態方法:僅根據演算法本身進行排程
     rr:Round Robin 輪詢
     wrr:Weighted RR 權重輪詢
     sh:source hashing源地址hash
     dh:destination hashing 目標地址hash
  動態方法:根據演算法及RS當前的複製狀態
  lc:Least Connection 最少連線
  計算當前的負載Overhead=Active*256+Inactive來實現
  wlc:Weighted LC
  Overhead=(Active*256+Inactive)/weight
  sed:Shortest Expect Delay  最短期望延遲
Overhead=(Active+1)*256/weight
    nq:Nerver Queus: 永不排隊


lblc:Locality-based least connection 基於本地的最少連線
相當於dh+lc


    Lblcr:基於複製的基於本地的最少連線 Replicated and Locality-based least connection




Session持久機制
1.Session繫結:始終將統一請求者的連線定向至統一RS(第一次請求時仍有排程選擇):沒有容錯能力,有損均衡效果
2.session複製:在RS之間同步session,因此,每個RS持叢集中所有的session;對於大規模叢集環境不適用
3.session伺服器:利用單獨部署的伺服器來統一管理session




LVS的叢集服務:
四層交換,四層路由
根據請求目標套接字(包括埠的協議型別tcp,udp)來實現轉發


ipvsadm

       ipvsadm -A|E -t|u|f service-address [-s scheduler]
               [-p [timeout]] [-M netmask]
       ipvsadm -D -t|u|f service-address
       ipvsadm -C
       ipvsadm -R
       ipvsadm -S [-n]
       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
       ipvsadm -L|l [options]
       ipvsadm -Z [-t|u|f service-address]
       ipvsadm --set tcp tcpfin udp
       ipvsadm --start-daemon state [--mcast-interface interface]
               [--syncid syncid]
       ipvsadm --stop-daemon state
       ipvsadm -h


叢集服務相關


-A:新增一個叢集服務
-t:tcp
-u:udp
-f: firewall make 通常應用於將兩個或以上的服務繫結為一個服務進行處理時使用
service-address
 -t IP:port
 -u ip:port
 -f firewall_mark
    -s 排程演算法,預設為wlc
    -p: timeout persistent connection 持久連線
-E:修改定義過的叢集服務


-D -t|u|f service-address:刪除指定的叢集服務


RS相關


-a:向指定的CS中新增RS
-t|-u|-f service-address:指明將RS新增至那個Cluster Service 中


   -r:指定RS,可以包含{IP[:port]},只有支援埠對映的LVS型別才允許此處使用跟叢集服務中不同的埠


   lvs型別:
    -g:Gateway,DR
    -i:ipip,TUN
    -m:masquerade(地址偽裝),NAT
    預設為DR


  指定RS權重
  -w
  上限下限:
  -x:下限
  -y:上限


-e:修改指定的RS屬性


-d  -t|u|f  service-address  -r  server-address:在指定的叢集服務中刪除一個指定的RS


情況所有的叢集服務:
-C


儲存規則(使用輸出重定向):
ipvsadm-save
ipvaadm -S


載入指定的規則:(使用輸入重定向)
ipvsadmin-restore
ipvasdm -R


檢視ipvs規則等
  -L [options]
  -n 使用數字格式顯示IP地址,不反解
  -c:檢視連線數相關資訊
  --stats:顯示統計資料
  --rate:資料傳輸速率
  --timeout:顯示tcp會話時長
  --daemon:守護程式的資訊
  --sort:對虛擬服務進行排序,預設為升序
  --exact:精確顯示,不做單位換算


-Z:計數器清零




LVS-DR模型
Director兩個地址:VIP,DIP
RS有兩個地址:VIP,RIP


禁止rs響應對BIP的ARP廣播請求
1.在前端路由上實現靜態MAC地址VIP的繫結
前提:得有路由器的配置許可權
缺點:Directory故障轉移時,無法更新此繫結
   2.arptables
    前提:在各RS在安裝arptables程式i,並編寫arptables規則
    缺點:依賴於獨特功能的應用程式
   3.修改Linux核心引數
    前提:RS必須是Linux
    缺點:適用性差
    兩個引數:
    arp_announce:定義通告模式
    arp_ignore:定義收到arp請求的響應模式
    配置專用路由,以使得響應報文首先通過VIP所篇日誌的lo上的別名介面


    Linux的工作特性:IP地址是屬於主機,而非特定網路卡
LVS-DR配置架構根據其VIP與RIP是否在同一個網路內有兩種情況


在Directory 和RS上配置VIP,要使用如下格式
ifconfig ALIAS VIP netmask 255.255.255.255 broadcast VIP


route add -host VIP dev 




LVS-DR的配置
 Director
  iptables -t filter -F
  ifconfig eth0:0 VIP netmask 255.255.255.255 broadcast VIP up
  route add -host VIP dev eth0:0


RS:
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce


ifconfig lo:0 VIP netmask 255.255.255.255 broadcast VIP up
  route add -host VIP dev eth0:0


Director:
ipvsadm -A -t ip:port -s scheduler
ipvsadm -a -t ip:port -r rs1 -g


nat模型示例(虛擬機器下):


dip和rip都在vmnet2上面


主伺服器配置:


ifconfig eth0:0 192.168.8.41/24

開啟路由間轉發功能
# vim /etc/sysctl.conf 
# sysctl -p



測試配置:
# ipconfig eth0 172.16.10.10/24 up
# route add default 172.16.10.1


在兩個dip伺服器上分別安裝web服務,並測試是否聯通


建立lvs nat模型
# ipvsadm -A -t 192.168.8.41:80 -s rr


新增排程伺服器
# ipvsadm -a -t 192.168.8.41:80 -r 172.16.10.10 -m
# ipvsadm -a -t 192.168.8.41:80 -r 172.16.10.20 -m


顯示列表
# ipvsadm -L -n


# ipvsadm -L -nc
# ipvsadm -L -n --rate


# ipvsadm -L -n --stats


清空計數器
# ipvsadm -Z


修改lvs伺服器的排程演算法為wrr(權重)
# ipvsadm -E -t 192.168.8.41:80 -s wrr
修改其中之一權重為3
# ipvsadm -e -t 192.168.8.41:80 -r 172.16.10.10 -m -w 3


通過
/var/log/httpd/access_log可以檢視訪問的客戶端IP地址


例項二:(真實的伺服器充當vip伺服器)


網路環境概述:
VIP伺服器有兩塊網路卡:
EM1(IP:192.168.8.68)
EM2(IP:192.168.8.70)
192.168.8.68的8888號埠通過路由對映到外網的183.239.143.212 8888 號埠


VIP:183.239.143.212:8888
DIP:192.168.8.70
RIP1:192.168.8.40
RIP1:192.168.8.20


主伺服器配置:
em1:192.168.8.68
em2:192.168.8.70


# vim /etc/sysctl.conf


# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# sysctl -p


rip1和rip2配置好web伺服器埠為8888,並且將閘道器指向192.168.8.70



# ipvsadm -A -t 183.239.143.212:8888 -s rr
# ipvsadm -a -t 183.239.143.212:8888 -r 192.168.8.40 -m
# ipvsadm -a -t 183.239.143.212:8888 -r 192.168.8.20 -m


該方案是失敗的,將183.239.143.212:8888更改為192.168.8.68:8888後可以成功

# ipvsadm -A -t 192.168.8.68:8888 -s rr
# ipvsadm -a -t 192.168.8.68:8888 -r 192.168.8.40 -m
# ipvsadm -a -t 192.168.8.68:8888 -r 192.168.8.20 -m


通過訪問

http://183.239.143.212:8888/

http://192.168.8.68:8888

都可以訪問網站


相關文章