持久連接 PPC模式、PCC模式、防火墻標記
【LVS】我的是X86的系統
ipvsadm 功能類似Iptables
管理集群服務 增刪改
管理RS增刪改
查看 –L
【磨刀不誤砍柴工】看清楚,不要配置錯了
兩臺RS都安裝 192.168.3.123 192.168.3.87
網關都一樣
route add default gw 192.168.3.77
【做不同端口持久連接測試用】
yum -y install telnet-server yum -y install httpd setenforce 0 service iptables stop
測試網頁
務必保證時間的統一性
看網頁
curl localhost
看頭部
curl -I localhost
DR -LVS主機雙網卡172.16.0.43192.168.3.77
yum -y install ipvsadm
必須關閉iptables
iptables service iptables stop
打開網卡轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward
****************改為wr規則 **********************
添加-本機-rr規則
ipvsadm -A -t 172.16.0.43:80 -s rr ipvsadm -a -t 172.16.0.43:80 -r 192.168.3.87 -m ipvsadm -a -t 172.16.0.43:80 -r 192.168.3.123 -m
查看
ipvsadm -l –n
【Ok 測試成功,成功調度兩個主機】
查看狀態
ipvsadm -l -n --stats
**************改為wr規則 權重**************
E | e 為修改
ipvsadm -E -t 172.16.0.43:80 -s wrr ipvsadm -e -t 172.16.0.43:80 -r 192.168.3.87 -m -w 6 ipvsadm -e -t 172.16.0.43:80 -r 192.168.3.123 -m -w 1
=======本機壓力測試
yum -y install httpd*
打開 web服務
service httpd start
靜態壓力測試
ab -c 100 -n 10000 http://172.16.0.43/index.html
能看出每個主機的次數
ipvsadm -l -n –stats
保存寫的規則
service ipvsadm save ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
看看還在連接的
ipvsadm -L –c
********************DR 模型*****************
VIP 172.16.0.1
DIP 172.16.0.2
【這三個連接在一個交換機】
【DR:】
eth0: 172.16.0.2
eth0:0 172.16.0.1 別名
【RS 1:】
eth0: 172.16.0.7
default gw 172.16.0.111
【RS 2:】
eth0: 172.16.0.8
default gw 172.16.0.111
【刪除添加錯誤的路由】
route del -net 0.0.0.0/32 gw 192.168.3.4
關閉RS1的ARP 請求
cd /proc/sys/net/ipv4/conf/ #sysctl -w net.ipv4.conf.eth0.arp_announce=2 #sysctl -w net.ipv4.conf.all.arp_announce=2 #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 查看cat /proc/sys/net/ipv4/conf/eth0/arp_ignore 查看cat /proc/sys/net/ipv4/conf/all/arp_ignore
改VIP ARP測試
ifconfig lo:0 172.16.0.1/16【與Derectory的主機同IP】
win7 來ping 172.16.0.1
顯示可以ping 的通,
在win7 查這個IP是哪個MAC來響應的
arp –a
接口: 172.16.0.100 --- 0xb
Internet 地址 物理地址 類型
172.16.0.1 00-0c-29-01-2a-5e 動態
00-0c-29-01-2a-5e對應的是Derectory的MAC 而不是RS1的
測試成功!
關閉RS2的ARP 請求
#echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce # echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore # ifconfig lo:0 172.16.0.1/16 up
還是一樣,ping的不是RS的網卡
【繼續配置RS1】
全是網絡地址,只有自己一個在內網 廣播也是自己
#ifconfig lo:0 down # ifconfig lo:0 172.16.0.1 broadcast 172.16.0.1 netmask 255.255.255.255 up # route add -host 172.16.0.1 dev lo:0
【繼續配置RS2】
全是網絡地址,只有自己一個在內網 廣播也是自己
#ifconfig lo:0 down # ifconfig lo:0 172.16.0.1 broadcast 172.16.0.1 netmask 255.255.255.255 up # route add -host 172.16.0.1 dev lo:0 【目標是172.16.0.1的lo:0作為出口設備】
【Direc主機】
ipvsadm -L –n 查看
#route add -host 172.16.0.1 dev eth2:0
【Directory測試RS1和RS2】
[root@localhost ~]# curl 172.16.0.7 <h2> S2 192.168.3.123 </h2> [root@localhost ~]# curl 172.16.0.8 <h2> LCL 192.168.3.87 </h2> Ok!
****************** wlc規則 ******************
【Directory DIP的設置】
添加-本機-wlc規則
# ipvsadm -A -t 172.16.0.1:80 -s wlc # ipvsadm -a -t 172.16.0.1:80 -r 172.16.0.7:80 -g -w 5 # ipvsadm -a -t 172.16.0.1:80 -r 172.16.0.8:80 -g -w 2 # ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.0.1:80 wlc -> 172.16.0.7:80 Route 5 0 0 -> 172.16.0.8:80 Route 2 0 0 # service iptables stop # echo 1 > /proc/sys/net/ipv4/ip_forward # setenforce 0 win7 訪問 172.16.0.1 成功調度RS1 和RS2
【shell數組練習】
[root@localhost ~]# RS=("192.168.0.1" "172.168.0.4") [root@localhost ~]# echo ${RS} 192.168.0.1 [root@localhost ~]# echo ${#RS} 11 [root@localhost ~]# echo ${#RS[0]} 11 [root@localhost ~]# echo ${#RS[*]} 2 [root@localhost ~]# echo ${#RS[*]} [root@localhost ~]# echo ${RS[*]} 192.168.0.1 172.168.0.4
********** DR模型 LVS ************
【缺點】隨便宕掉一臺RS機,當DIP指向這臺機器時,瀏覽器就無響應,不支持健康狀態檢查
【拓展】刪除的使用方法例如
ipvsadm -d -t 172.16.0.1:80 -r 127.0.0.1
把本機的 DIP 172.16.0.2 也加入 VIP 172.16.0.1
果斷開啟本機web服務測試
ipvsadm -a -t 172.16.0.1:80 -r 172.16.0.2:80 -g -w 5 ipvsadm -a -t 172.16.0.1:80 -r 127.0.0.1 -g -w 5
這兩條效果是一樣的
ipvsadm -L –n 查看
*********LVS健康管理***********
ipvsadm -L –n 查看
bash -x health.sh 執行
RS 是后面的服務器VIP
可以根據RS的健康狀況,自動增加,剔除機器
前提是,自己初始化好兩個正在執行的服務,不然就自動加不上去
[root@localhost ~]# ipvsadm -l -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.0.1:80 wlc -> 172.16.0.7:80 Route 2 0 0 -> 172.16.0.8:80 Route 1 0 0
RS健康狀態檢查腳本示例第一版:------------------------------------------------
#!/bin/bash VIP=172.16.0.1 CPORT=80 FAIL_BACK=127.0.0.1 RS=("172.16.0.7" "172.16.0.8") RSTATUS=("1" "1") RW=("2" "1") RPORT=80 TYPE=g add() { ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2 [ $? -eq 0 ] && return 0 || return 1 } del() { ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT [ $? -eq 0 ] && return 0 || return 1 } while : ; do let COUNT=0 for I in ${RS[*]} ; do if curl --connect-timeout 1 http://$I &> /dev/null ;then if [ ${RSTATUS[$COUNT]} -eq 0 ] ;then add $I ${RW[$COUNT]} [ $? -eq 0] && RSTATUS[$COUNT]=1 fi else if [ ${RSTATUS[$COUNT]} -eq 1 ];then del $I [ $? -eq 0 ] && RSTATUS[$COUNT]=0 fi fi let COUNT++ done sleep 5 done ******************************************************************
RS健康狀態檢查腳本示例第二版:
檢查次數CHKLOOP=3再踢你出去
tail -f /var/log/ipvsmonitor.log
什么時候消失,什么時候回來的 都有記錄
#!/bin/bash # VIP=192.168.10.3 CPORT=80 FAIL_BACK=127.0.0.1 RS=("192.168.10.7" "192.168.10.8") declare -a RSSTATUS RW=("2" "1") RPORT=80 TYPE=g CHKLOOP=3 LOG=/var/log/ipvsmonitor.log addrs() { ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2 [ $? -eq 0 ] && return 0 || return 1 } delrs() { ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT [ $? -eq 0 ] && return 0 || return 1 } checkrs() { local I=1 while [ $I -le $CHKLOOP ]; do if curl --connect-timeout 1 http://$1 &> /dev/null; then return 0 fi let I++ done return 1 } initstatus() { local I local COUNT=0; for I in ${RS[*]}; do if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; then RSSTATUS[$COUNT]=1 else RSSTATUS[$COUNT]=0 fi let COUNT++ done } initstatus while :; do let COUNT=0 for I in ${RS[*]}; do if checkrs $I; then if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then addrs $I ${RW[$COUNT]} [ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG fi else if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then delrs $I [ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG fi fi let COUNT++ done sleep 5 done ************************************************************
【持久連接 PPC模式】
默認 300秒
[root@localhost ~]# ipvsadm -L -c IPVS connection entries pro expire state source virtual destination TCP 01:50 FIN_WAIT 172.16.0.100:58792 172.16.0.1:http 172.16.0.7:http
修改調度算法為輪詢
ipvsadm -E -t 172.16.0.1:80 -s rr
修改調度算法為輪詢,默認-p 300秒可以不寫,改為600秒
ipvsadm -E -t 172.16.0.1:80 -s rr -p 600
現在無論我怎么刷新頁面http://172.16.0.1/ 都一直是一個不變的網頁
查看持久連接狀況
ipvsadm -L -n --persistent-conn
配置RS服務機,兩臺都要配置一下
chkconfig telnet on service xinetd restart netstat -tnlp 看23端口啟動了沒有,默認不允許root登錄,添加一個普通用戶hadoop useradd hadoop passwd hadoop
兩臺都做連接測試
連接測試 Xshell:\> telnet 172.16.0.8
查看網卡信息 $ /sbin/ifconfig
把telnet服務做進LVS
# ipvsadm -A -t 172.16.0.1:23 -s rr # ipvsadm -a -t 172.16.0.1:23 -r 172.16.0.7 -g -w 3 # ipvsadm -a -t 172.16.0.1:23 -r 172.16.0.8 -g -w 1
登錄測試 Xshell:\> telnet 172.16.0.1 多測試幾次 /sbin/ifconfig可以看到哪個RS提供服務
tletnet持久連接 ipvsadm -E -t 172.16.0.1:23 -s rr -p 4000
Xshell:\> telnet 172.16.0.1第一次就會持久
4000秒內不管再登錄多少次,依然是這個RS為你提供服務
此時是PPC 模式,只對一個端口持久,同IP訪問不同服務端口,不是持久的
-----------------------------------------------------------------
看持久連接信息
ipvsadm -l -n -c IPVS connection entries pro expire state source virtual destination TCP 14:19 ESTABLISHED 172.16.0.100:59564 172.16.0.1:23 172.16.0.8:23 TCP 00:47 ESTABLISHED 172.16.0.100:59441 172.16.0.1:23 172.16.0.8:23
持久連接 PCC模式
清空 ipvsadm –C
ps -aux 看有沒有搗亂的bash腳本
0端口把所有端口定義為集群服務,一律向RS轉發
# ipvsadm -A -t 172.16.0.1:0 -s rr -p 600 # ipvsadm -a -t 172.16.0.1:0 -r 172.16.0.7 -g -w 2 # ipvsadm -a -t 172.16.0.1:0 -r 172.16.0.8 -g -w 2 # ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.0.1:0 rr persistent 600 -> 172.16.0.7:0 Route 2 0 0 -> 172.16.0.8:0 Route 2 0 0 [root@localhost ~]#
現在不管你是打開web,telnet,ssh,服務,對于你的IP都是一個固定的RS為你服務
看持久連接信息
ipvsadm -l -n -c IPVS connection entries pro expire state source virtual destination TCP 14:19 ESTABLISHED 172.16.0.100:59564 172.16.0.1:23 172.16.0.8:23 TCP 00:47 ESTABLISHED 172.16.0.100:59441 172.16.0.1:23 172.16.0.8:23
防火墻標記
清空規則
標記號0-99,只要不重復就可以
網卡看清楚再寫!-w 2 權重也可以不寫,暫時沒有持久連接
ipvsadm -C iptables -F -t mangle iptables -t mangle -A PREROUTING -d 172.16.0.1 -i eth2 -p tcp --dport 80 -j MARK --set-mark 8 iptables -t mangle -A PREROUTING -d 172.16.0.1 -i eth2 -p tcp --dport 23 -j MARK --set-mark 8 ipvsadm -A -f 8 -s rr ipvsadm -a -f 8 -r 172.16.0.7 -g -w 2 ipvsadm -a -f 8 -r 172.16.0.8 -g -w 2
此時我的IP訪問telnet和web都將會是同一個RS來提供
此時才是持久連接的
ipvsadm -A -f 8 -s rr -p 600
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。