lvs
1.優勢:核心裡面的功能。而不是一個應用程式。核心可以動用各種資源。LVS:Linux Virtual Server,負載排程器,核心內建
阿裡的四層SLB(Server Load Balance)是基于LVS+keepalived實作 LVS 官網:http://www.linuxvirtualserver.org/
阿裡SLB和LVS:https://yq.aliyun.com/articles/1803 https://github.com/alibaba/LVS
2.LVS是叢集 mysql裡面的主從複制都是叢集
- Cluster分為三種類型
#LB:Load Balancing,負載均衡叢集,多個主機組成,每個主機隻承擔一部分通路請求
#HA:High Availiablity,高可用,避免SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均無故障時間,正常時間
MTTR:Mean Time To Restoration( repair)平均恢複前時間,故障時間
A = MTBF /(MTBF+MTTR) (0,1):99%,99.5%,99.9%,99.99%,99.999%
SLA:服務等級協定(簡稱:SLA,全稱:service level agreement)。是在一定開銷下為保障服
務的性能和可用性,服務提供商與使用者間定義的一種雙方認可的協定。通常這個開銷是驅動提供服
務品質的主要因素。在正常的領域中,總是設定所謂的三個9,四個9來進行表示,當沒有達到這
種水準的時候,就會有一些列的懲罰措施,而運維,最主要的目标就是達成這種服務水準。
分布式存儲
分布式存儲: Ceph,GlusterFS,FastDFS,MogileFS
分布式計算:hadoop,Spark
分布式常見應用
分布式應用-服務按照功能拆分,使用微服務
分布式靜态資源--靜态資源放在不同的存儲叢集上
分布式資料和存儲--使用key-value緩存系統
分布式計算--對特殊業務使用分布式計算,比如Hadoop叢集
叢集和分布式
叢集:同一個業務系統,部署在多台伺服器上。叢集中,每一台伺服器實作的功能沒有差别,資料和代
碼都是一樣的
分布式:一個業務被拆成多個子業務,或者本身就是不同的業務,部署在多台伺服器上。分布式中,每
一台伺服器實作的功能是有差别的,資料和代碼也是不一樣的,分布式每台伺服器功能加起來,才是完
整的業務
分布式是以縮短單個任務的執行時間來提升效率的,而叢集則是通過提高機關時間内執行的任務數來提
升效率。
對于大型網站,通路使用者很多,實作一個群集,在前面部署一個負載均衡伺服器,後面幾台伺服器完成
同一業務。如果有使用者進行相應業務通路時,負載均衡器根據後端哪台伺服器的負載情況,決定由給哪
一台去完成響應,并且一台伺服器垮了,其它的伺服器可以頂上來。分布式的每一個節點,都完成不同
的業務,如果一個節點垮了,那這個業務可能就會失敗
叢集設計原則
可擴充性—叢集的橫向擴充能力
可用性—無故障時間 (SLA service level agreement)
性能—通路響應時間
容量—機關時間内的最大并發吞吐量(C10K 并發問題)
LVS工作原理
VS根據請求封包的目标IP和目标協定及端口将其排程轉發至某RS,根據排程算法來挑選RS。LVS是核心
級功能,工作在INPUT鍊的位置,将發往INPUT的流量進行“處理”
LVS叢集類型中的術語
VS:Virtual Server,Director Server(DS), Dispatcher(排程器),Load Balancer #虛拟伺服器
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy) #真正提供服務的
CIP:Client IP #客服端的IP
VIP:Virtual serve IP #VS外網的IP
DIP:Director IP #VS内網的IP
RIP:Real server IP #RS1 RS2的IP
通路流程:CIP <--> VIP == DIP <--> RIP
NAT 模型 (多端口的DNAT)
隻是替換目标位址。多目标的DNAT 應答包要原路傳回
LVS的工作模式:
LVS 和 DNAT的差別就是 DNAT隻能是一對一的轉發 ,但是LVS 可以是一對多了模式。将目标位址替換
LVS伺服器和後端的伺服器能否是路由器: 也可以,但是路由器的吞吐量沒有交換機的吞吐量大
後端的伺服器可以是Windows伺服器,也可以是Linux伺服器 ,但是LVS伺服器卻隻能是Linux伺服器
瓶頸:LVS伺服器一個抗下了所有的。LVS核心裡面性能好
DR (直接路由)模型
客服端的發送被調到後端的伺服器,後端的伺服器直接的傳回到客服端,而不經過LVS伺服器
DR模型相當于NAT模型就是傳回的時候是直接原路傳回的,而不經過LVS伺服器
免費ARP :發送ARP廣播擷取IP位址
ARP解決MAC和IP之間的關系
為了避免免費的ARP 。不向外公布自己有這個IP 發來的封包不回複
1. 保證發送的資料包隻到LVS而不是到 RS1 和RS2
優點:不是原路傳回的,減少了LVS伺服器的壓力
核心參數
[root@localhost ~]# cat /proc/sys/net/ipv4/conf/eth0/arp_announce #不公告
0
[root@localhost ~]# cat /proc/sys/net/ipv4/conf/eth0/arp_ignore #不應當
0
TUN 模式(LVS伺服器和後端伺服器可以跨網段)
優點就是LVS伺服器和後端的 伺服器可能會隔得很遠都可以,也是傳回無需經過LVS伺服器
FULL NAT 模式 (完全NAT)
NAT模型就隻是将目标的位址替換 FULL NAT 将目标和源位址都替換了
阿裡内部用,要編譯核心再用
LVS工作模式的總結和比較
vs-nat與lvs-fullnat:
請求和響應封包都經由Director
lvs-nat:RIP的網關要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信
lvs-dr與lvs-tun:
請求封包要經由Director,但響應封包由RS直接發往Client
lvs-dr:通過封裝新的MAC首部實作,通過MAC網絡轉發
lvs-tun:通過在原IP封包外封裝新IP頭實作轉發,支援遠距離通信
LVS排程算法
分為兩種:靜态方法和動态方法
靜态方法
僅根據算法本身進行排程
1、RR:roundrobin,輪詢,平均的配置設定
2、WRR:Weighted RR,權重輪詢
3、SH(源位址hash):Source Hashing,實作session sticky,源IP位址hash;将來自于同一個IP位址的請求始終發
往第一次挑中的RS,進而實作會話綁定
4、DH(目标位址hash):Destination Hashing;目标位址哈希,第一次輪詢排程至RS,後續将發往同一個目标位址的
請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡,如:寬帶營運商
動态方法
主要根據每RS目前的負載狀态及排程算法進行排程Overhead=value 較小的RS将被排程
1、LC:least connections 适用于長連接配接應用
負擔輕的就多給一對
Overhead=activeconns*256+inactiveconns
2、WLC:Weighted LC,預設排程方法
Overhead=(activeconns*256+inactiveconns)/weight
3、SED:Shortest Expection Delay,初始連接配接高權重優先
Overhead=(activeconns+1)*256/weight
4、NQ:Never Queue,第一輪均勻配置設定,後續SED
5、LBLC:Locality-Based LC,動态的DH(目标位址hash)算法,使用場景:根據負載狀态實作正向代理
6、LBLCR:LBLC with Replication,帶複制功能的LBLC,解決LBLC負載不均衡問題,從負載重的複制
到負載輕的RS
核心版本 4.15 版本後新增排程算法:FO和OVF
FO(Weighted Fail Over)排程算法,在此FO算法中,周遊虛拟服務所關聯的真實伺服器連結清單,找到還
未過載(未設定IP_VS_DEST_F_OVERLOAD标志)的且權重最高的真實伺服器,進行排程
OVF(Overflow-connection)排程算法,基于真實伺服器的活動連接配接數量和權重值實作。将新連接配接調
度到權重值最高的真實伺服器,直到其活動連接配接數量超過權重值,之後排程到下一個權重值最高的真實
伺服器,在此OVF算法中,周遊虛拟服務相關聯的真實伺服器連結清單,找到權重值最高的可用真實伺服器。
一個可用的真實伺服器需要同時滿足以下條件:
未過載(未設定IP_VS_DEST_F_OVERLOAD标志)
真實伺服器目前的活動連接配接數量小于其權重值
其權重值不為零
ipvsadm
[root@C8-108]#yum install ipvsadm -y
[root@C8-108]#rpm -ql ipvsadm
/etc/sysconfig/ipvsadm-config
/usr/lib/.build-id
/usr/lib/.build-id/e9
/usr/lib/.build-id/e9/2e0bac9713532c12e56e8290b695eafc6ffb50
/usr/lib/systemd/system/ipvsadm.service
/usr/sbin/ipvsadm
/usr/sbin/ipvsadm-restore
/usr/sbin/ipvsadm-save
/usr/share/doc/ipvsadm
/usr/share/doc/ipvsadm/MAINTAINERS
/usr/share/doc/ipvsadm/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz
程式包:ipvsadm
Unit File: ipvsadm.service
主程式:/usr/sbin/ipvsadm
規則儲存工具:/usr/sbin/ipvsadm-save
規則重載工具:/usr/sbin/ipvsadm-restore
配置檔案:/etc/sysconfig/ipvsadm-config
ipvs排程規則檔案:/etc/sysconfig/ipvsadm
ipvsadm 指令
ipvsadm核心功能:
叢集服務管理:增、删、改
Overhead=activeconns*256+inactiveconns
Overhead=(activeconns*256+inactiveconns)/weight
Overhead=(activeconns+1)*256/weight叢集服務的RS管理:增、删、改
ipvsadm 工具用法:
#管理叢集服務
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-restore
ipvsadm -S [-n] #儲存,相當于ipvsadm-save
#管理叢集中的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
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
選項:
lvs類型:
-g: gateway, dr類型,預設
-i: ipip, tun類型
-m: masquerade, nat類型
-w weight:權重
#安裝包
[root@C8-108]#yum install ipvsadm -y
#lvs 伺服器檢視
[root@C8-108]#ipvsadm -Ln # n 寫在後面
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
#lvs 伺服器設定輪詢
[root@C8-108]#ipvsadm -A -t 192.168.200.129:80 -s rr #rr表示輪詢
[root@C8-108]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.129:80 rr
#lvs 伺服器管理後端的RS
[root@C8-108]#ipvsadm -a -t 192.168.200.129:80 -r 10.0.0.37 -m
[root@C8-108]#ipvsadm -a -t 192.168.200.129:80 -r 10.0.0.107 -m -w 3
[root@C8-108]#
#測試輪詢
[root@c7-17 ~]# while true;do curl http://192.168.200.129;sleep 1;done
10.0.0.37
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.37
#修改排程算法為 wrr
[root@C8-108]#ipvsadm -E -t 192.168.200.129:80 -s wrr
[root@C8-108]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.129:80 wrr
-> 10.0.0.37:80 Masq 1 0 0
-> 10.0.0.107:80 Masq 3 0 0 #帶權重了
#測試 帶權重以後是3比1
[root@c7-17 ~]# while true;do curl http://192.168.200.129;sleep 1;done
10.0.0.107
10.0.0.107
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.107
10.0.0.107
10.0.0.37
#源位址雜湊演算法
[root@C8-108]#ipvsadm -E -t 192.168.200.129:80 -s sh
[root@C8-108]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.129:80 sh
-> 10.0.0.37:80 Masq 1 0 0
-> 10.0.0.107:80 Masq 3 0 3
[root@c7-17 ~]# while true;do curl http://192.168.200.129;sleep 1;done
10.0.0.107
10.0.0.107
10.0.0.107
10.0.0.107
10.0.0.107
10.0.0.107
10.0.0.107
10.0.0.107
10.0.0.107
10.0.0.107
儲存
[root@C8-108]#cat /usr/lib/systemd/system/ipvsadm.service
[Unit]
Description=Initialise the Linux Virtual Server
After=syslog.target network.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm"
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm"
ExecStop=/sbin/ipvsadm -C
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
[root@C8-108]#systemctl status ipvsadm
● ipvsadm.service - Initialise the Linux Virtual Server
Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@C8-108]#systemctl start ipvsadm #無法啟動服務
Job for ipvsadm.service failed because the control process exited with error code.
See "systemctl status ipvsadm.service" and "journalctl -xe" for details.
[root@C8-108]#systemctl status ipvsadm
● ipvsadm.service - Initialise the Linux Virtual Server
Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2021-07-05 21:19:08 CST; 32s ago
Process: 1719 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited,>
Main PID: 1719 (code=exited, status=1/FAILURE)
Jul 05 21:19:08 C8-108 systemd[1]: Starting Initialise the Linux Virtual Server...
Jul 05 21:19:08 C8-108 bash[1719]: /bin/bash: /etc/sysconfig/ipvsadm: No such file or directory #報錯缺少檔案
Jul 05 21:19:08 C8-108 systemd[1]: ipvsadm.service: Main process exited, code=exited, status=1/FAILURE
Jul 05 21:19:08 C8-108 systemd[1]: ipvsadm.service: Failed with result 'exit-code'.
Jul 05 21:19:08 C8-108 systemd[1]: Failed to start Initialise the Linux Virtual Server.
#将規則重定向到該檔案重新開機成功
[root@C8-108]#ipvsadm-save -n > /etc/sysconfig/ipvsadm
#重新開機服務儲存了
[root@C8-108]#systemctl restart ipvsadm
[root@C8-108]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.129:80 sh
-> 10.0.0.37:80 Masq 1 0 0
-> 10.0.0.107:80 Masq 3 0 0
lvs 無法做到後端伺服器的健康檢查
[root@C8-108]#ipvsadm -E -t 192.168.200.129:80 -s rr #修改為輪詢以後關閉服務服務配置檔案自動修改
[root@C8-108]#systemctl stop ipvsadm
[root@C8-108]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@C8-108]#cat /etc/sysconfig/ipvsadm
-A -t 192.168.200.129:80 -s rr #自動修改了
-a -t 192.168.200.129:80 -r 10.0.0.37:80 -m -w 1
-a -t 192.168.200.129:80 -r 10.0.0.107:80 -m -w 3
[root@C8-108]#systemctl restart ipvsadm
[root@C8-108]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.129:80 rr
-> 10.0.0.37:80 Masq 1 0 1
-> 10.0.0.107:80 Masq 3 0 1
[root@C8-108]#
端口号
#修改配置檔案的端口号
[root@C8-108]#vim /etc/sysconfig/ipvsadm
-A -t 192.168.200.129:80 -s rr
-a -t 192.168.200.129:80 -r 10.0.0.37:8080 -m -w 1 #後端服務端端口号發生變化
-a -t 192.168.200.129:80 -r 10.0.0.107:80 -m -w 3
[root@C8-108]#ipvsadm-restore </etc/sysconfig/ipvsadm
[root@C8-108]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.129:80 rr
-> 10.0.0.37:8080 Masq 1 0 5
-> 10.0.0.107:80 Masq 3 0 5
DR 模型
#lvs伺服器
[root@c7-47]#ifconfig lo:1 10.0.0.100/32
[root@c7-47]#ipvsadm -A -t 10.0.0.100:80 -s rr # -rr 輪詢
[root@c7-47]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.37:80 -g
[root@c7-47]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.107:80 -g
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.100:80 rr
-> 10.0.0.37:80 Route 1 0 0
-> 10.0.0.107:80 Route 1 0 0
[root@c7-47]#
#兩台 RS伺服器的設定
[root@c7-107 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略IP
[root@c7-107 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #不開自己有IP
[root@c7-107 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@c7-107 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@c7-107 ~]# ifconfig lo:1 10.0.0.100/32
或者永久修改配置檔案
[root@c7-107 ~]# vim /etc/sysctl.conf
[root@c7-107 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@c7-37 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@c7-37 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@c7-37 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@c7-37 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@c7-37 ~]#ifconfig lo:1 10.0.0.100/32
或者永久修改配置檔案
[root@c7-37 ~]#vim /etc/sysctl.conf
[root@c7-37 ~]#sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@c7-37 ~]#ifconfig lo:1 10.0.0.100/32
#測試
[root@c7-17 ~]# while true;do curl 10.0.0.100;sleep 1;done
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.37
#日志
[root@c7-107 ~]# tailf /var/log/httpd/access_log -n0
192.168.200.17 - - [06/Jul/2021:16:07:13 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.200.17 - - [06/Jul/2021:16:07:14 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.200.17 - - [06/Jul/2021:16:07:15 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.200.17 - - [06/Jul/2021:16:07:16 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.200.17 - - [06/Jul/2021:16:07:17 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"
跨網段的DR模型
#路由器添加IP
[root@C8-108]#nmcli connection modify eth0 +ipv4.addresses 172.16.0.200/24 #添加IP
[root@C8-108]#nmcli conn reload
[root@C8-108]#nmcli conn up eth0
[root@C8-108]#hostname -I
10.0.0.108 172.16.0.200 192.168.200.129
[root@c7-37 ~]#ifconfig lo:1 down
#清除規則:-C
[root@c7-47]#ipvsadm -C
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
#後端伺服器的配置
[root@c7-107 ~]# cat RS_DR.sh
#!/bin/bash
vip=172.16.0.100
mask='255.255.255.255'
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
service httpd start &> /dev/null && echo "The httpd Server is Ready!"
echo "`hostname -I`" > /var/www/html/index.html
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask #broadcast $vip up
echo "The RS Server is Ready!"
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "The RS Server is Canceled!"
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
#lvs 伺服器的配置
[root@c7-47]#cat lvs.sh
vip='172.16.0.100'
iface='lo:1'
mask='255.255.255.255'
port='80'
rs1='10.0.0.107'
rs2='10.0.0.37'
scheduler='wrr'
type='-g'
rpm -q ipvsadm &> /dev/null || yum -y install ipvsadm &> /dev/null
case $1 in
start)
ifconfig $iface $vip netmask $mask #broadcast $vip up
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
echo "The VS Server is Ready!"
;;
stop)
ipvsadm -C
ifconfig $iface down
echo "The VS Server is Canceled!"
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
#測試
[root@c7-17 ~]# while true;do curl 172.16.0.100;sleep 1;done
10.0.0.37
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.37
10.0.0.107
10.0.0.37
[root@c7-17 ~]# curl http://172.16.0.100
10.0.0.107
[root@c7-17 ~]# curl http://172.16.0.100
10.0.0.37
[root@c7-17 ~]# curl -k https://172.16.0.100
10.0.0.107
[root@c7-17 ~]# curl -k https://172.16.0.100
10.0.0.37
防火牆标簽
[root@c7-47]#iptables -t mangle -A PREROUTING -d 172.16.0.100 -p tcp -m multiport --dport 80,443 -j MARK
--set-mark 10
[root@c7-47]#ipvsadm -C
[root@c7-47]#ipvsadm -A -f 10 -s rr
[root@c7-47]#ipvsadm -a -f 10 -r 10.0.0.37 -g
[root@c7-47]#ipvsadm -a -f 10 -r 10.0.0.107 -g
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 10 rr
-> 10.0.0.37:0 Route 1 0 0
-> 10.0.0.107:0 Route 1 0 0
[root@c7-17 ~]# curl -k https://172.16.0.100;curl http://172.16.0.100
10.0.0.37
10.0.0.107
[root@c7-17 ~]# curl -k https://172.16.0.100;curl http://172.16.0.100
10.0.0.37
10.0.0.107
[root@c7-47]#ipvsadm -E -f 10 -p 預設是360秒
[root@c7-47]#ipvsadm -E -f 10 -p 1000 #設定為1000
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 10 wlc persistent 1000
-> 10.0.0.37:0 Route 1 0 0
-> 10.0.0.107:0 Route 1 0 0
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 10 wlc persistent 360
-> 10.0.0.37:0 Route 1 0 0
-> 10.0.0.107:0 Route 1 0 4
[root@c7-17 ~]# curl -k https://172.16.0.100;curl http://172.16.0.100
10.0.0.107
10.0.0.107
[root@c7-47]#ipvsadm -Lnc
IPVS connection entries
pro expire state source virtual destination
IP 01:15 NONE 192.168.200.17:0 0.0.0.10:0 10.0.0.107:0