免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3199 | 回复: 2
打印 上一主题 下一主题

lvs dr 模式奇怪的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-16 22:29 |只看该作者 |倒序浏览
环境:虚拟机环境,两个linux5.4 ,装了ipvs以及keepalived,即做dr又做realserver,跑的是apache服务。
问题:服务都启动后。访问vip。第一次a机器,第二次b机器。第三次a机器。第四次失败。第五次a,第六次b,第七次a,第八次失败。以后都是没4次中的最后一次失败。真是奇怪了。但是我关闭任何一个机器的keepalived,就可以正常轮询我的请求了。
配置如下:
global_defs {
  notification_email {
  netwant@163.com
   }
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    193.168.100.10
    }
}

virtual_server 193.168.100.10 80{
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP
    real_server 193.168.100.11 80{
        weight 1
     TCP_CHECK {
        connect_timeout 5
        nb_get_retry 2
        delay_before_retry 2
        connect_port 80
        }
        }
   real_server 193.168.100.12 80{
        weight 1
     TCP_CHECK {
        connect_timeout 5
        nb_get_retry 2
        delay_before_retry 2
        connect_port 80
        }
    }
}


[root@node1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddressort Scheduler Flags
  -> RemoteAddressort           Forward Weight ActiveConn InActConn
TCP  193.168.100.10:80 rr
  -> 193.168.100.12:80            Route   1      0          0         
  -> 193.168.100.11:80            Local   1      0          0   


[root@node1 ~]# more real.sh
#!/bin/bash
#description : start realserver
VIP=193.168.100.10
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac


论坛徽章:
0
2 [报告]
发表于 2012-02-17 13:12 |只看该作者
顶一下。自己顶下。

论坛徽章:
0
3 [报告]
发表于 2012-02-19 08:05 |只看该作者
回复 2# netwant


因为lvs是基于内核的服务,所以两台物理服务器上服务都是启动,当两边都启动keepalived的时候,两台服务器服务器上ipvs服务都启动了,而且都已经加载了ipvs-dr策略,

由于既当ld又当realserver在keepalived主备都开着情况下会引起广播风暴,你可以抓一下包分析一下。
建议vip与rip 最好别放一台上,如是一定要在一台上,那备keepalived不要启动。



主lvs上面起了vip,当数据包转发到备lvs时,由于备机lvs上面策略也启动了,所以备机接受到数据包以后也会转发到主lvs上面,所以就形成了广播风暴!!!!

在备机lvs抓包:
09:58:58.653532 IP 172.16.41.26.60490 > 172.16.41.30.http: . ack 1 win 365 <nop,nop,timestamp 157330636 157185220>
09:58:58.653754 IP 172.16.41.26.60490 > 172.16.41.30.http: R 1:1(0) ack 1 win 365 <nop,nop,timestamp 157330636 157185220>
09:59:03.790449 IP 172.16.41.30.44560 > 172.16.41.26.http: S 2756013189:2756013189(0) win 5840 <mss 1460,sackOK,timestamp 157190357 0,nop,wscale 7>
09:59:03.790519 IP 172.16.41.26.http > 172.16.41.30.44560: S 2773918069:2773918069(0) ack 2756013190 win 5792 <mss 1460,sackOK,timestamp 157335774 157190357,nop,wscale 4>


另外heartbeat+lvs再两台物理服务器上为什么不会出现这个情况,因为heartbeat服务启动的时候不会让备机lvs的服务加载策略,在备机lvs上执行ipvsadm命令可以确认到,所以当数据包转发到备机lvs的时候,备机不会转发到主lvs,不会形成广播风暴
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP