簡介前端
[root@salt-node01 ~]# lsmod | grep ip_vs ip_vs_rr 12600 0 ip_vs 141092 2 ip_vs_rr nf_conntrack 111302 7 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_conntrack_ipv4,nf_conntrack_ipv6 libcrc32c 12644 2 xfs,ip_vs You have new mail in /var/spool/mail/root
管理工具(都可經過yum來安裝):node
ipvsadm、keepalived、 Piranha(RedHat提供的)python
術語:算法
CIP、VIP、DIP、RIP後端
集羣組成:緩存
利用LVS搭建的集羣系統由3部分組成:最前端的是負載均衡層,中間層是服務器集羣層,最後層是共享存儲層。共字存儲層是爲全部Real Server提供共亨存儲空問和內容一致性的存儲區域,通常由磁盤陣列設備組成。爲了提俱內容的一致性,通常能夠經過NFS網絡義件系統共 亨數據,可是NFS在繁忙的業務系統中,性能並非很好,此時能夠採用集羣文件 系統,例如Red Hat的GFS文件系統,Oracle提供的OS2文件系統等。此文章不對共享存儲層作詳細介紹,詳情可參照後邊的文章。以下圖所示
服務器
模式:網絡
A.NAT 做用於4層,傳輸層併發
流程:初始是CIP:VIP 通過LB時,LB根據調度算法選擇合適的後端RealServer,並將數據包的vip修改成realserver的ip地址,並寫到hash記錄表中;此時數據包變爲了CIP:RIP。將數據包發送給RIP,RIP進行處理後將數據包(RIP:CIP)發送給LB,LB根據hash記錄表,將RIP修改成VIP,而後將數據包發送給CIP。來訪問是DNAT的過程,返回是SNAT的過程。負載均衡
LB:須要在指定網卡綁定vip
RS:須要將網關設置爲LB的IP地址
優勢:可對指定後端rs的端口,便可以更改端口
缺點:進出數據包都會通過LB,LB的網卡流量會是瓶頸
適用場景:非高併發請求場景,10個RS之內;可隱藏內部的DIP和RIP地址;
B.DR 做用於二層,數據鏈路層
流程:初始數據包目標MAC地址是LB的MAC,通過LB時,LB根據調度算法選擇合適的後端RealServer,並將數據包的目標MAC地址修改成realserver的MAC地址,此時數據包的目標地址是RS的MAC,數據包在LB通過泛洪,發送到RS,RS處理時,發現數據IP是本身Lo的IP地址,因此能夠進行處理不會丟棄;RS處理數據包後,將數據包VIP:CIP直接發送給CIP
LB:須要在指定網卡綁定VIP
RS:須要抑制ARP,且LB和RS要在一個廣播域
缺點:不能更改端口,LB和RS必須在一個廣播域,須要關閉RS的arp解析,綁定vip
優勢:負載能力比NAT強,LB流量不會是瓶頸
場景:由於響應報文不通過Director,極大的減輕了Director的負載壓力,故Director能夠支持更大的併發訪問,通常RS在100臺之內;
C.IP TUN
D.FULLNAT
調度算法:
--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, the default scheduler is wlc.
rr:Round Robin # 即輪詢 wrr:Weighted RR # 即加權輪詢 sh:Source Hashing # 即來源IP地址hash dh:Destination Hashing # 即目標地址hash(不經常使用,僅用於前端多防火牆的場景,保證防火牆的鏈接追蹤功能有效)
動態算法:
lc:Least Connection # 評判標準:Overhead=Active*256+Inactive # Overhead最小者勝出 wlc:Weighted LC # 評判標準:Overhead=(Active*256+Inactive)/weight # Overhead最小者勝出 sed:Shortest Expect Delay # 評判標準:Overhead=(Active+1)*256/weight # Overhead最小者勝出 nq:Never Queue # 集羣開始時工做時,每臺服務器都至少分配一個鏈接請求,而後再根據sed算法調度; lblc:Locality-based Least Connection # 相似於dh+lc lblcr:Relicated and Locality-based Least Connection # 主要用於後端服務器是緩存服務器時
IPVSADM命令參數詳解:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask] ipvsadm -D -t|u|f virtual-service-address ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight] 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] ipvsadm --stop-daemon ipvsadm -h 命令選項解釋: 有兩種命令選項格式,長的和短的,具備相同的意思。在實際使用時,兩種均可以。 -A --add-service 在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。也就是增長一臺新的虛擬服務器。 -E --edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。 修改定義過的集羣服務 -D --delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。 -C --clear 清除內核虛擬服務器表中的全部記錄。 -R --restore 恢復虛擬服務器規則 -S --save 保存虛擬服務器規則,輸出爲-R 選項可讀的格式 -a --add-server 在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增長一臺新的真實服務器 -e --edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄 -d --delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄 -L|-l --list 顯示內核虛擬服務器表 userver 列表; -Z --zero 虛擬服務表計數器清零(清空當前的鏈接數量等) --set tcp tcpfin udp 設置鏈接超時值 --start-daemon 啓動同步守護進程。他後面能夠是master 或backup,用來講明LVS Router 是master 或是backup。在這個功能上也能夠採用keepalived 的VRRP 功能。 --stop-daemon 中止同步守護進程 -h --help 顯示幫助信息 其餘的選項: -t --tcp-service service-address 說明虛擬服務器提供的是tcp 的服務[vip:port] or [real-server-ip:port] -u --udp-service service-address 說明虛擬服務器提供的是udp 的服務[vip:port] or [real-server-ip:port] -f --fwmark-service fwmark 說明是通過iptables 標記過的服務類型。一般用於將兩個或兩個以上的服務綁定爲一個服務進行處理時使用; -s --scheduler scheduler 使用的調度算法,有這樣幾個選項 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默認的調度算法是:wlc. -p --persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客戶的屢次請求,將被同一臺真實的服務器處理。timeout 的默認值爲300 秒。 持久鏈接; -M --netmask netmask persistent granularity mask -r --real-server server-address 真實的服務器[Real-Server:port] -g --gatewaying 指定LVS 的工做模式爲直接路由模式(也是LVS 默認的模式) DR模型 -i --ipip 指定LVS 的工做模式爲隧道模式 -m --masquerading 指定LVS 的工做模式爲NAT 模式 -w --weight weight 真實服務器的權值 --mcast-interface interface 指定組播的同步接口 -c --connection 顯示LVS 目前的鏈接 如:ipvsadm -L -c --timeout 顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout --daemon 顯示同步守護進程狀態 --stats 顯示統計信息 ipvsadm –Ln --state 總共的數量 --rate 顯示速率信息 ipvsadm –Ln --rete 平均值 --sort 對虛擬服務器和真實服務器排序輸出 --numeric -n 輸出IP 地址和端口的數字形式
集羣相關參數:
-A --add-service 在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。也就是增長一臺新的虛擬服務器。 -t --tcp-service service-address 說明虛擬服務器提供的是tcp 的服務[vip:port] or [real-server-ip:port] -u --udp-service service-address 說明虛擬服務器提供的是udp 的服務[vip:port] or [real-server-ip:port] -s --scheduler scheduler 使用的調度算法,有這樣幾個選項 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默認的調度算法是:wlc. -p --persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客戶的屢次請求,將被同一臺真實的服務器處理。timeout 的默認值爲300 秒。 持久鏈接; -E --edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。 修改定義過的集羣服務 -D :刪除指定集羣服務
RS相關參數:
-a --add-server 在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增長一臺新的真實服務器 向指定的CS中添加RS -r --real-server server-address 真實的服務器[Real-Server:port],只有支持端口映射的LVS類型才容許此處使用跟集羣服務中不一樣的端口 LVS 類型: -g : gateway,DR # 指定集羣類型爲LVS/DR -i ipip,TUN # 指定集羣類型爲LVS/TUN -m:masquerade,NAT # 指定集羣類型爲 NAT -w:指定RS權重: -e:修改指定的RS屬性 -d :從指定的集羣服務中刪除某RS
DR模式配置實例:
LB:lvs服務端啓停腳本
[root@salt-node01 sbin]# cat ipvs ##CONSTANT VIP=192.168.142.140 INTERFACE=ens33 SUBINTERFACE=$INTERFACE:`echo ${VIP} | awk -F "." '{print $4}'` PORT=80 METHOD=rr RETVAR=0 RIPS=( 192.168.68.150 192.168.68.152 ) ##COMMAND OF ABS PATH IP=/usr/sbin/ip IPVSADM=/usr/sbin/ipvsadm . /etc/init.d/functions function Usage(){ echo "Usage: $0 {start|stop|status|restart}" return 1 } function ipvsStart(){ $IP addr add $VIP/24 dev ${INTERFACE} label $SUBINTERFACE $IPVSADM -C #add vip instance $IPVSADM -A -t $VIP:$PORT -s $METHOD #echo ${#RIPS[*]} for((i=0;i<`echo ${#RIPS[*]}`;i++)) do $IPVSADM -a -t $VIP:$PORT -r ${RIPS[$i]}:$PORT -g done RETVAR=$? if [ $RETVAR -eq 0 ] then action "Ipvsadm started sucessed" /bin/true else action "Ipvsadm started failed" /bin/false fi } function ipvsStop(){ #clear virtual server $IPVSADM -C #clear number of connection $IPVSADM -Z $IP addr del $VIP/24 dev ${INTERFACE} label $SUBINTERFACE &>/dev/null RETVAR=$? if [ $RETVAR -eq 0 ] then action "Ipvsadm stopped" /bin/true else action "Ipvsadm stopped" /bin/false fi return $RETVAR } main(){ #Judge argv num if [ $# -ne 1 ]; then Usage $0 fi echo $1 case "$1" in start) ipvsStart ;; restart) ipvsStop ipvsStart ;; *) Usage $0 ;; esac } main $*
健康檢查:
Q:lvs rr算法,可是請求不均,
調整會話保持時間:lvs會話保持時間和後端RS的會話保持時間Q: 更換防火牆IP,形成舊節點沒法訪問IDC機房刷新arp緩存表時間較長Q:LVS RS下架,用做其餘服務用;lo口綁定vip完善下線機制