溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

LVS 持久連接 PPC模式、PCC模式、防火墻標(biāo)記

發(fā)布時(shí)間:2020-07-24 09:49:54 來源:網(wǎng)絡(luò) 閱讀:528 作者:990487026 欄目:網(wǎng)絡(luò)安全

持久連接 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




向AI問一下細(xì)節(jié)

免責(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)容。

AI