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.7S2 192.168.3.123
[root@localhost ~]# curl 172.16.0.8LCL 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
- 上一篇
解决配置IaaS中Endpoint系统日志报错:ignoring exception:Error executin gquery usp
为vRA Infrastructure配置Endpoint之后,系统提示下图所示的故障:1. DataBaseStatsService: ignoring exception: Error execu
- 下一篇
无公网ip且服务器无法上网该如何实现外网访问
今天就跟大家聊聊有关无公网ip且服务器无法上网该如何实现外网访问,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。双网卡电脑上添加路由命令外网访问