您好,登錄后才能下訂單哦!
持久連接 PPC模式、PCC模式、防火墻標(biāo)記
【LVS】我的是X86的系統(tǒng)
ipvsadm 功能類似Iptables
管理集群服務(wù) 增刪改
管理RS增刪改
查看 –L
【磨刀不誤砍柴工】看清楚,不要配置錯(cuò)了
兩臺(tái)RS都安裝 192.168.3.123 192.168.3.87
網(wǎng)關(guān)都一樣
route add default gw 192.168.3.77
【做不同端口持久連接測(cè)試用】
yum -y install telnet-server yum -y install httpd setenforce 0 service iptables stop
測(cè)試網(wǎng)頁
務(wù)必保證時(shí)間的統(tǒng)一性
看網(wǎng)頁
curl localhost
看頭部
curl -I localhost
DR -LVS主機(jī)雙網(wǎng)卡172.16.0.43192.168.3.77
yum -y install ipvsadm
必須關(guān)閉iptables
iptables service iptables stop
打開網(wǎng)卡轉(zhuǎn)發(fā)功能
echo 1 > /proc/sys/net/ipv4/ip_forward
****************改為wr規(guī)則 **********************
添加-本機(jī)-rr規(guī)則
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 測(cè)試成功,成功調(diào)度兩個(gè)主機(jī)】
查看狀態(tài)
ipvsadm -l -n --stats
**************改為wr規(guī)則 權(quán)重**************
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
=======本機(jī)壓力測(cè)試
yum -y install httpd*
打開 web服務(wù)
service httpd start
靜態(tài)壓力測(cè)試
ab -c 100 -n 10000 http://172.16.0.43/index.html
能看出每個(gè)主機(jī)的次數(shù)
ipvsadm -l -n –stats
保存寫的規(guī)則
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
【這三個(gè)連接在一個(gè)交換機(jī)】
【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
【刪除添加錯(cuò)誤的路由】
route del -net 0.0.0.0/32 gw 192.168.3.4
關(guān)閉RS1的ARP 請(qǐng)求
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測(cè)試
ifconfig lo:0 172.16.0.1/16【與Derectory的主機(jī)同IP】
win7 來ping 172.16.0.1
顯示可以ping 的通,
在win7 查這個(gè)IP是哪個(gè)MAC來響應(yīng)的
arp –a
接口: 172.16.0.100 --- 0xb
Internet 地址 物理地址 類型
172.16.0.1 00-0c-29-01-2a-5e 動(dòng)態(tài)
00-0c-29-01-2a-5e對(duì)應(yīng)的是Derectory的MAC 而不是RS1的
測(cè)試成功!
關(guān)閉RS2的ARP 請(qǐng)求
#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的網(wǎng)卡
【繼續(xù)配置RS1】
全是網(wǎng)絡(luò)地址,只有自己一個(gè)在內(nèi)網(wǎng) 廣播也是自己
#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
【繼續(xù)配置RS2】
全是網(wǎng)絡(luò)地址,只有自己一個(gè)在內(nèi)網(wǎng) 廣播也是自己
#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 【目標(biāo)是172.16.0.1的lo:0作為出口設(shè)備】
【Direc主機(jī)】
ipvsadm -L –n 查看
#route add -host 172.16.0.1 dev eth2:0
【Directory測(cè)試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規(guī)則 ******************
【Directory DIP的設(shè)置】
添加-本機(jī)-wlc規(guī)則
# 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 成功調(diào)度RS1 和RS2
【shell數(shù)組練習(xí)】
[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 ************
【缺點(diǎn)】隨便宕掉一臺(tái)RS機(jī),當(dāng)DIP指向這臺(tái)機(jī)器時(shí),瀏覽器就無響應(yīng),不支持健康狀態(tài)檢查
【拓展】刪除的使用方法例如
ipvsadm -d -t 172.16.0.1:80 -r 127.0.0.1
把本機(jī)的 DIP 172.16.0.2 也加入 VIP 172.16.0.1
果斷開啟本機(jī)web服務(wù)測(cè)試
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 執(zhí)行
RS 是后面的服務(wù)器VIP
可以根據(jù)RS的健康狀況,自動(dòng)增加,剔除機(jī)器
前提是,自己初始化好兩個(gè)正在執(zhí)行的服務(wù),不然就自動(dòng)加不上去
[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健康狀態(tài)檢查腳本示例第一版:------------------------------------------------
#!/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健康狀態(tài)檢查腳本示例第二版:
檢查次數(shù)CHKLOOP=3再踢你出去
tail -f /var/log/ipvsmonitor.log
什么時(shí)候消失,什么時(shí)候回來的 都有記錄
#!/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模式】
默認(rèn) 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
修改調(diào)度算法為輪詢
ipvsadm -E -t 172.16.0.1:80 -s rr
修改調(diào)度算法為輪詢,默認(rèn)-p 300秒可以不寫,改為600秒
ipvsadm -E -t 172.16.0.1:80 -s rr -p 600
現(xiàn)在無論我怎么刷新頁面http://172.16.0.1/ 都一直是一個(gè)不變的網(wǎng)頁
查看持久連接狀況
ipvsadm -L -n --persistent-conn
配置RS服務(wù)機(jī),兩臺(tái)都要配置一下
chkconfig telnet on service xinetd restart netstat -tnlp 看23端口啟動(dòng)了沒有,默認(rèn)不允許root登錄,添加一個(gè)普通用戶hadoop useradd hadoop passwd hadoop
兩臺(tái)都做連接測(cè)試
連接測(cè)試 Xshell:\> telnet 172.16.0.8
查看網(wǎng)卡信息 $ /sbin/ifconfig
把telnet服務(wù)做進(jìn)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
登錄測(cè)試 Xshell:\> telnet 172.16.0.1 多測(cè)試幾次 /sbin/ifconfig可以看到哪個(gè)RS提供服務(wù)
tletnet持久連接 ipvsadm -E -t 172.16.0.1:23 -s rr -p 4000
Xshell:\> telnet 172.16.0.1第一次就會(huì)持久
4000秒內(nèi)不管再登錄多少次,依然是這個(gè)RS為你提供服務(wù)
此時(shí)是PPC 模式,只對(duì)一個(gè)端口持久,同IP訪問不同服務(wù)端口,不是持久的
-----------------------------------------------------------------
看持久連接信息
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端口把所有端口定義為集群服務(wù),一律向RS轉(zhuǎn)發(fā)
# 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 ~]#
現(xiàn)在不管你是打開web,telnet,ssh,服務(wù),對(duì)于你的IP都是一個(gè)固定的RS為你服務(wù)
看持久連接信息
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
防火墻標(biāo)記
清空規(guī)則
標(biāo)記號(hào)0-99,只要不重復(fù)就可以
網(wǎng)卡看清楚再寫!-w 2 權(quán)重也可以不寫,暫時(shí)沒有持久連接
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
此時(shí)我的IP訪問telnet和web都將會(huì)是同一個(gè)RS來提供
此時(shí)才是持久連接的
ipvsadm -A -f 8 -s rr -p 600
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。