ipvsadm ipvsadm命令是lvs集群在應用層的管理工具,我們可以通過此ipvsadm來管理lvs的配置,其實現了集群服務管理:增、刪、改,集群服務的RS管理:增、刪、改以及查看集群狀態。 管理集群服務:增、改、刪; 管理集群上的RS:增、改、刪; 查看集群的狀態信息: 規則的保存和重載: ...
ipvsadm
ipvsadm命令是lvs集群在應用層的管理工具,我們可以通過此ipvsadm來管理lvs的配置,其實現了集群服務管理:增、刪、改,集群服務的RS管理:增、刪、改以及查看集群狀態。
管理集群服務:增、改、刪;
增(A)、改(E):
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
刪:
ipvsadm -D -t|u|f service-address
-t|u|f service-address:
-t: TCP協議的埠,VIP:TCP_PORT,如 -t 172.16.10.6:80
-u: UDP協議的埠,VIP:UDP_PORT
-f:firewall MARK,是一個數字,通過iptables可以定義firewall MARK
[-s scheduler]:指定集群的調度演算法,預設為wlc
管理集群上的RS:增、改、刪;
增(a)、改(e):
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
-r server-address:rip[:port],指明RS的IP地址
lvs類型:
-g: gateway, dr類型
-i: ipip, tun類型
-m: masquerade, nat類型
-w weight:權重
查看集群的狀態信息:
ipvsadm -L|l [options] options: -c, --connection:顯示當前的LVS連接 --timeout:列出超時 --daemon: --stats:狀態信息 --rate:傳輸速率 --persistent-conn:堅持連接 --sor:把列表排序。 --nosort:不排序 -n, --numeric:輸出IP地址和埠的數字形式
規則的保存和重載:
保存和重載: ipvsadm -S = ipvsadm-save ipvsadm -R = ipvsadm-restore 清空定義的所有內容: ipvsadm -C 將所有數據相關的計數器清零: ipvsadm -Z [-t|u|f service-address]
lvs-nat集群的實現
簡易流程圖:
配置RS1:
[root@RS1 ~]# yum -y install httpd #安裝Apache [root@RS1 ~]# systemctl stop firewalld.service #關閉防火牆 [root@RS1 ~]# ifconfig eno16777736 172.16.0.10/24 up #配置網卡 [root@RS1 ~]# route add default gw 172.16.0.254 #配置路由 [root@RS1 ~]# vim /etc/httpd/conf/httpd.conf #設置httpd Listen 8080 ServerName localhost [root@RS1 ~]# vim /var/www/html/index.html <h1> RS1 172.16.0.10 <h1> [root@RS1 ~]# systemctl start httpd #啟用httpd [root@RS1 ~]# ss -tan LISTEN 0 128 :::8080 :::*
RS2的配置參考RS1。
配置DR:
[root@DR ~]# yum -y install ipvsadm #安裝ipvsadm工具 [root@DR ~]# ifconfig eno16777736 10.0.0.1/24 up #配置vip [root@DR ~]# ifconfig eno16777736:0 172.16.0.254/24 up #配置dip [root@DR ~]# sysctl -a | grep ip_forward #確保核心轉發功能已開啟 net.ipv4.ip_forward = 1 [root@DR ~]# ipvsadm -A -t 10.0.0.1:80 -s rr #配置lvs集群規則 [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 172.16.0.10:8080 -m [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 172.16.0.11:8080 -m [root@DR ~]# 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.1:80 rr -> 172.16.0.10:8080 Masq 1 0 0 -> 172.16.0.11:8080 Masq 1 0 0
客戶端測試:
# 調度演算法使用rr,輪詢方式,故調用RS時 比例為1:1 [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1> <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1> <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1> <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1> <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1> <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1> <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1> <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1> <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1> <h1> RS1 172.16.0.10 </h1> <h1> RS2 172.16.0.11 </h1>
lvs-dr集群的實現
簡易流程圖:
配置RS1:
[root@RS1 ~]# ifconfig eno16777736 10.0.0.11/24 up #配置網卡 [root@RS1 ~]# ifconfig lo:0 10.0.0.1 netmask 255.255.255.255 broadcast 10.0.0.1 up [root@RS1 ~]# route add -host 10.0.0.1 dev lo:0 #配置路由 [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #設置arp響應 [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@RS1 ~]# vim /etc/httpd/conf/httpd.conf #設置httpd Listen 80 [root@RS1 ~]# vim /var/www/html/index.html <h1> RS1 10.0.0.11<h1> [root@RS1 ~]# systemctl start httpd #啟用httpd [root@RS1 ~]# ss -tan LISTEN 0 128 :::8080 :::*
RS2的配置參考RS1。
配置DR:
[root@DR ~]# ifconfig eno16777736 10.0.0.2/24 up #配置dip [root@DR ~]# ifconfig eno16777736:0 10.0.0.1 netmask 255.255.255.255 broadcast 10.0.0.1 up #配置vip [root@DR ~]# ipvsadm -A -t 10.0.0.1:80 -s wrr #配置lvs集群規則 [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.11 -g -w 1 [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.12 -g -w 2 [root@DR ~]# 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.1:80 wrr -> 10.0.0.11:80 Route 1 0 0 -> 10.0.0.12:80 Route 2 0 0
客戶端測試:
# 調度演算法使用wrr,比重為1:2 [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done <h1> RS1 10.0.0.11 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS1 10.0.0.11 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS2 10.0.0.11 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS1 10.0.0.11 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS2 10.0.0.11 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS1 10.0.0.11 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS2 10.0.0.11 </h1> <h1> RS2 10.0.0.12 </h1> <h1> RS2 10.0.0.12 </h1>
RS1的配置腳本參考:
#!/bin/bash
#
vip=10.0.0.1
rip=10.0.0.11
mask1=255.255.255.255
mask2=255.255.255.0
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 eno16777736 $rip netmask $mask2 up
ifconfig lo:0 $vip netmask $mask1 broadcast $vip up
route add -host $vip dev lo:0
;;
stop)
ifconfig lo:0 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 "Usage $(basename $0) start|stop"
exit 1
;;
esac
DR的配置腳本參考:
#!/bin/bash
#
vip=10.0.0.1
mask1=255.255.255.255
dip=10.0.0.2
mask2=255.255.255.0
port=80
rs1=10.0.0.11
rs2=10.0.0.12
scheduler='wrr'
type='-g'
case $1 in
start)
ifconfig eno16777736 $dip netmask $mask2 up
ifconfig eno16777736:0 $vip netmask $mask1 broadcast $vip up
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 2
;;
stop)
ipvsadm -C
ifconfig eno16777736:0 down
;;
*)
echo "Usage $(basename $0) start|stop"
exit 1
;;
esac