LVS持久连接PPC模式、PCC模式、防火墙标记

持久连接 PPC模式、PCC模式、防火墙标记

专注于为中小企业提供做网站、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业湘乡免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

【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

  S2 192.168.3.123 

 [root@localhost ~]# curl 172.16.0.8

 LCL 192.168.3.87 

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


当前标题:LVS持久连接PPC模式、PCC模式、防火墙标记
标题链接:http://csdahua.cn/article/ijgjid.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流