一.介紹
ipvsadm是爲ipvs模塊添加規則的工具.本身不提供任何ipvs的功能,類似於iptables
二.算法
靜態
1.round-robin(RR) 輪流發送
2.weighted-round-robin(WRR)帶權重的輪流發送
3.destination-hash 建立請求中目標ip的hash表,根據此表和後端RS的狀態來分發請求
4.source-hash 建立請求中來源IP的hash表,根據此表爲後續請求分配RS,用於持久連接
動態
1.least-connection(LC) active*256+inactiv
2.weighted-least-connection (active*256+inactiv)/weight
3.shortest-expect-delay (active+1)*256/weight
4.no-queue sed的升級版,不排隊,有空閒的RS就直接分配
5.Locality-Based Least Connections (dh+lc),用於緩存服務器,維護一臺主機到1臺服務器的映射
6.Locality-Based Least Connections with Replication 優化的lblc,維護一臺主機到一組服務器的映射
三.ipvsadm使用
1.相關參數
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-O] [-M netmask]
-A 添加lvs服務
-E 編輯
-t :tcp
-u :udp
-f :firewall mark
service-address: VIP:PORT
-s :schedule 調度算法
-p :persistant 持久連接
-O :僅適用於udp協議,切客戶端端口固定
-M :netmask 爲客戶端保持持久連接的粒度
ipvsadm -D -t|u|f service-address
-D: 刪除
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
-a:添加
-e:編輯
-r: realserver-ip
-g:DR模型
-i:TUN模型
-m:NAT模型
-w:權重
-x:RS允許的最大連接數
-y:RS允許的最小連接數
ipvsadm -d -t|u|f service-address -r server-address
-d 刪除
# service ipvsadm save -->/etc/sysconfig/ipvsadm 保存規則至默認文件
# ipvsadm -S > /path/to/file
# ipvsadm -R < /path/to/file
# ipvsadm -C 清空規則
# ipvsadm -Z 計數器歸零
# ipvsadm -L|-l 查看 --rate --stats --timeout
# 開啓轉發echo 1> /proc/sys/net/ipv4/ip_forward
2.建立NAT
#ipvsadm -A -t 172.16.0.10:80 -s rr #ipvsadm -a -t 172.16.0.10:80 -r 192.168.0.1 -m #ipvsadm -a -t 172.16.0.10:80 -r 192.168.0.2 -m
3.建立DR
#ipvsadm -A -t 172.16.100.10:80 -s lc #ipvsadm -a -t 172.16.100.10:80 -r 192.168.0.1 -g -w 2 #ipvsadm -a -t 172.16.100.10:80 -r 192.168.0.2 -g -w 3
分別給RS添加內核參數
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore (忽略arp) # echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce(不通報arp) # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
給lo綁定VIP
#ifconfig lo:0 172.16.100.10 broadcast 172.16.100.10 netmask 255.255.255.255 up
添加一條路由
# route add -host 172.16.100.10 dev lo:0
4.建立基於防火牆的持久連接
port affinity
persistent port connection
persistent client connection
給所有請求443和80端口的連接打上相同的標記碼
#iptables -t mangle -A PREROUTING -p tcp -d $VIP --dport 80 -j MARK --set-mark 9 #iptables -t mangle -A PREROUTING -p tcp -d $VI --dport 443 -j MARK --set-mark 9
建立基於fwm的ipvs規則,並添加兩臺RS
# ipvsadm -A -f 9 -s rr -p # ipvsadm -a -f 9 -r 172.16.0.1 -g # ipvsadm -a -f 9 -r 172.16.0.2 -g