千家信息网

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

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,持久连接 PPC模式、PCC模式、防火墙标记【LVS】我的是X86的系统ipvsadm 功能类似Iptables管理集群服务 增删改管理RS增删改查看 -L【磨刀不误砍柴工】看清楚,不要配置错了两台R
千家信息网最后更新 2024年11月19日LVS 持久连接 PPC模式、PCC模式、防火墙标记

持久连接 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-serveryum -y install httpdsetenforce 0service 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 rripvsadm -a -t 172.16.0.43:80 -r 192.168.3.87 -mipvsadm -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 wrripvsadm -e -t 172.16.0.43:80 -r 192.168.3.87 -m -w 6ipvsadm -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 saveipvsadm: 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 -nIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  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 0win7 访问 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 5ipvsadm -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 -nIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  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/bashVIP=172.16.0.1CPORT=80FAIL_BACK=127.0.0.1RS=("172.16.0.7" "172.16.0.8")RSTATUS=("1" "1")RW=("2" "1")RPORT=80TYPE=gadd() {        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 5done******************************************************************

RS健康状态检查脚本示例第二版

检查次数CHKLOOP=3再踢你出去

tail -f /var/log/ipvsmonitor.log

什么时候消失,什么时候回来的 都有记录

#!/bin/bash#VIP=192.168.10.3CPORT=80FAIL_BACK=127.0.0.1RS=("192.168.10.7" "192.168.10.8")declare -a RSSTATUSRW=("2" "1")RPORT=80TYPE=gCHKLOOP=3LOG=/var/log/ipvsmonitor.logaddrs() {  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}initstatuswhile :; 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 5done************************************************************





【持久连接 PPC模式】

默认 300秒

[root@localhost ~]# ipvsadm -L -cIPVS connection entriespro expire state       source             virtual            destinationTCP 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 onservice xinetd restartnetstat -tnlp看23端口启动了没有,默认不允许root登录,添加一个普通用户hadoopuseradd hadooppasswd 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 -cIPVS connection entriespro expire state       source             virtual            destinationTCP 14:19  ESTABLISHED 172.16.0.100:59564 172.16.0.1:23      172.16.0.8:23TCP 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 -nIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  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 -cIPVS connection entriespro expire state       source             virtual            destinationTCP 14:19  ESTABLISHED 172.16.0.100:59564 172.16.0.1:23      172.16.0.8:23TCP 00:47  ESTABLISHED 172.16.0.100:59441 172.16.0.1:23      172.16.0.8:23




防火墙标记

清空规则

标记号0-99,只要不重复就可以

网卡看清楚再写!-w 2 权重也可以不写,暂时没有持久连接

ipvsadm -Ciptables -F -t mangleiptables -t mangle -A PREROUTING -d 172.16.0.1 -i eth2 -p tcp --dport 80 -j MARK --set-mark 8iptables -t mangle -A PREROUTING -d 172.16.0.1 -i eth2 -p tcp --dport 23 -j MARK --set-mark 8ipvsadm -A -f 8 -s rripvsadm -a -f 8 -r 172.16.0.7 -g -w 2ipvsadm -a -f 8 -r 172.16.0.8 -g -w 2

此时我的IP访问telnet和web都将会是同一个RS来提供


此时才是持久连接的

ipvsadm -A -f 8 -s rr -p 600




0