一步一步搭建LVS-DR模型LB集群(二)

LVS的持久连接:

持久连接即是不考虑LVS的转发方法,确保所有来自同一个用户的连接转发到同一个RealServer上

-p  //表示此连接为持久连接
 N  //表示维持此持久连接的时间。默认6分钟。


持久连接的类型:

1.PCC(persistent client connector,持久用户连接)同一个用户所有的请求在超时范围之内都被定位到同一个RealServer上,这个时候在指定端口的时候使用的是0端口,就是所有的请求都转发出去。
2.PPC(persistent port connector)用户的所有请求在超时范围内按照端口定位到不同的RS上。
3.防火墙标记:把相关联的端口在防火墙上打上同样的标记,用户在访问两个相关联的服务的时候,就会定位到同一个RealServer上。


PCC实例

ipvsadm -A -t 192.168.1.110:0 -s rr -p 600

PPC就是根据服务的不同,定向到不同的RealServer上,在Directory上多写几个ipvsadm指向,注意端口要区分开来就行了


防火墙标记的持久连接

iptables -t mangle -A PREROUTING -d 192.168.1.110 -p tcp --dport 80 -j MARK --set-mark 10  
把目的地为1982.168.1.110:80标记为10
ipvsadm -A -f 10 -s rr -p 60  //使用上面标记的10定义集群服务
ipvsadm -a -f 10 -r 192.168.1.116 -g //为集群定义RealServer
ipvsadm -a -f 10 -r 192.168.1.117 -g

简单的后台RS健康监测脚本

#!/bin/bash
#
VIP=192.168.1.110
CPORT=80
FAIL_BACK=127.0.0.1
FBSTATUS=0
RS=("192.168.1.116" "192.168.1.117")
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


你可能感兴趣的:(LVS,集群)