Chinaunix

标题: lvs dr 模式奇怪的问题 [打印本页]

作者: netwant    时间: 2012-02-16 22:29
标题: lvs dr 模式奇怪的问题
环境:虚拟机环境,两个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



作者: netwant    时间: 2012-02-17 13:12
顶一下。自己顶下。
作者: chenwenming_zj    时间: 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,不会形成广播风暴





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2