ipvs和ipvsadm
ipvs:內核中的協議棧上實現
ipvs是LVS軟件核心,是運行在LB上的,這是個基於ip層的負載均衡。
ipvs的總體結構主要有ip包處理,負載均衡算法,系統配置和管理三個模塊以及虛擬服務器與真實服務器鏈表組成。
ipvs管理集群服務管理服務上的RS。
一個ipvs主機可以同時定義多個cluster server,但可能會影響調度性格。
一個ipvs服務至少應該有一個RS。
grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64
支持的協議:TCP,UDP,AH,ESP,AH_ESP,SCTP
ipvs 規則: /proc/net/ip_vs
ipvs 連接:/proc/net/ip_vs_conn
ipvsadm:用戶空間的集群服務管理工具
1)程序包:ipvsadm
rpm -ql ipvsadm
/etc/sysconfig/ipvsadm-config
/usr/lib/systemd/system/ipvsadm.service
/usr/sbin/ipvsadm
/usr/sbin/ipvsadm-restore
/usr/sbin/ipvsadm-save
/usr/share/doc/ipvsadm-1.27
/usr/share/doc/ipvsadm-1.27/README
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
規則保存工具:/usr/sbin/ipvsadm-save
規則重載工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
2)命令:ipvsadm
ipvsadm - Linux Virtual Server administration
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
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 [options]
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 sid]
ipvsadm --stop-daemon state
-A ,--add-service 添加一個集群服務
-E ,--edit-service 修改已添加的集群服務
-D ,--delete-service 刪除虛擬服務
-C ,--clear 清空整個表
-R ,--restore 從標准輸入重載
-S ,--save 保存值到標准輸出。
-a ,--add-server 向指定的Client Server中添加Real Server.
-e ,--edit-server 修改RS
-d ,--delete-server 刪除真實服務
-L|-l,--list 列出表
-Z ,--zero 清空計數器
--set tcp tcpfin udp 設置連接超時值
--start-daemon 開啟連接同步后台進程
--stop-daemon 停止連接同步后台進程
-t service-address,--tcp-service 服務地址是 host[:port],tcp協議
-u service-address,--udp-service 服務地址是host[:port],udp協議
-f fwmark,--fwmark-service 防火牆標記
-6 ,--ipv6 fwmark 項使用 IPv6
-s scheduler,--scheduler rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,調度方法其中之一,默認為wlc。
--pe engine 備用持久性引擎可能是 sip,默認情況下不設置
-p [timeout] ,--persistent 持續連接
-M netmask ,--netmask 持久粒度掩碼
-r server-address ,--real-server 服務地址主機和端口,只有支持端口映射的LVS類型才允許此處使用和集群服務中不同的端口
-g ,--gatewaying gatewaying (direct routing) (default),dr模式
-i ,--ipip ipip encapsulation (tunneling),tun模式
-m ,--masquerading masquerading (NAT),nat模式
-w weight ,--weight 實際服務器容量,指定權重
-x uthreshold ,--u-threshold 連接的高等門限
-y lthreshold ,--l-threshold 連接的低等門限
--mcast-interface interface 連接同步的多播接口
--syncid sid syncid 同步連接(default=255)
-c,--connection 顯示ipvs連接
--timeout 超時時間輸出(tcp tcpfin udp)
--daemon 后台進程信息輸出
--stats 統計數據
--rate 速率
--exact 精確值
--thresholds 線程信息輸出
--persistent-conn 當前連接信息輸出
--nosort 禁用對服務器/服務的排序輸出
--sort 不做任何事情,因為后台兼容性
-o ,--ops 單包調度
-n ,--numeric 數字格式顯示ip和port,注意-n只能寫在-L之后。
-b flags ,--sched-flags 調度標志(comma-separated)
3)核心功能:
集群服務管理:增、刪、改
集群服務的RS管理:增、刪、改
查看
4)管理集群服務:增、改、刪
增、改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
刪除:
ipvsadm -D -t|u|f service-address
service-address:
-t|u|f:
-t: TCP 協議的端口,VIP:TCP_PORT
-u: TCP 協議的端口,VIP:UDP_PORT
-f :firewall MARK ,標記,一個數字
[-s scheduler] :指定集群的調度算法,默認為wl
5)管理集群上的RS :增、改、刪
增、改:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
刪:
ipvsadm -d -t|u|f service-address -r server-address
server-address:
rip[:port] 如省略port ,不作端口映射
選項:
lvs類型:
-g: gateway, dr 類型,默認
-i: ipip, tun 類型
-m: masquerade, nat 類型
-w weight:指定權重
6)清空定義的所有內容:ipvsadm –C
7)清空計數器:ipvsadm -Z [-t|u|f service-address]
8)查看:
ipvsadm -L|l [options]
--numeric, -n :以數字形式輸出地址和端口號
--exact :擴展信息,精確值
--connection ,-c :當前IPVS 連接輸出
--stats :統計信息
--rate :輸出速率信息
9)保存:
建議保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
10)重載:
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
ipvsadm -R < /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service
FireWall Mark:FWM
1)MARK target 可用於給特定的報文打標記,在netfilter上給報文打標記,mangle表
--set-mark value
其中:value 為十六進制數字
2)借助於防火牆標記來分類報文,而后基於標記定義集群服務。
可將多個不同的應用使用同一個集群服務進行調度。
也就是將http和https統一調度,可以實現無論你訪問http和https都給你調度到后面的真實的服務器,不用每一個服務都單獨的創建一個集群服務。
打標記實現方法:
在Director 主機打標記:
iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER
在Director 主機基於標記定義集群服務:
ipvsadm -A -f NUMBER [options]++++
定義集群服務:
ipvsadm -A -f MARK -s rr -p
ipvsadm -a -f MARK -r ip -g -w 1
查看
ipvsadm -Ln
ipvsadm -Ln --rate
Forward:轉發方法
Weight:權重
ActiveConn:活動連接數
InActiveConn:非活動連接數
CPS:connections per seconds
InnPPS:Input packets per seconds
OutPPS:output packets per seconds
InBPS:input bytes per seconds
OutBPS:Output bytes per seconds
3)作用:
同一服務不同端口使用一個設置搞定
4)具體實現
在VS上進行如下設置
iptables -t mangle -A PREROUTING -d 192.168.74.88 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 12
##無論訪問VIP的80還是443端口統一打標簽為12
iptables -t mangle -vnL
ipvsadm -A -f 12 -s wrr -
##創建一個集群服務,只要標簽是12的調度算法都是wrr
ipvsadm -a -f 12 -r 192.168.74.129 -g -w 3
##將RS添加到集群服務里
ipvsadm -a -f 12 -r 192.168.74.133 -g
ipvsadm -Ln
在客戶端進行測試
curl 192.168.74.88
curl -k https://192.168.74.88/
##k表示忽略證書訪問