Re: send garp to unicast peer when leaving fault state?
Olivier Matz <[email protected]> Fri, 24 May 2019 12:14:22 +0200
| Newsgroups | gmane.linux.keepalived.devel |
|---|---|
| Message-ID | <20190524101422.2imysq37pajzsx5m@platinum> |
Hi,
On Wed, May 22, 2019 at 08:59:14AM +0100, Quentin Armitage wrote:
> On Mon, 2019-05-20 at 08:59 +0200, Olivier Matz wrote:
> > Hi,
> >
> > I have an issue in the following VRRP scenario:
> > - unicast peering
> > - fast advertisements (100ms)
> >
> > Machine A
> > version 3
> > state BACKUP
> > interface eth0
> > garp_master_delay 1
> > virtual_router_id 1
> > priority 200
> > advert_int 100
> > unicast_peer {
> > 192.168.0.1
> > }
> > virtual_ipaddress {
> > 10.200.0.2/24
> > }
> > preempt_delay 30
> >
> > Machine B
> > version 3
> > state BACKUP
> > interface eth0
> > garp_master_delay 1
> > virtual_router_id 1
> > priority 100
> > advert_int 100
> > unicast_peer {
> > 192.168.0.2
> > }
> > virtual_ipaddress {
> > 10.200.0.1/24
> > }
> > preempt_delay 30
> >
> >
> > 1/ initial state: A is master
> >
> > 2/ set eth0 down on machine A
> >
> > A switch to fault, B becomes master
> >
> > B sends advertisements to A, but after some time, the
> > ARP cache expires, so B regularly sends ARP requests that
> > have no answers.
> >
> > 4/ set eth0 up on machine A
> >
> > A changes to backup, and after ~300ms (down timer), it thinks there
> > is no other master so it changes to master, bypassing the preemt_delay.
> >
> > I workarounded the issue by using static ARP entries.
> >
> > Is there a feature in keepalived to solve this issue? Should keepalived
> > send gratuitous ARPs when leaving the fault state when using unicast
> > peers? Or is it something that should be done in a user script?
> >
> > Thanks,
> > Olivier
> >
> Olivier,
>
> This is clearly an issue, and keepalived currently has no direct mechanism to send gratuitous ARPs when leaving fault state.
> I think your suggestion that keepalived when using unicasting should send gratuitous ARP messages when transitioning out of
> fault state is the correct solution.
>
> Could you please raise an issue at https://github.com/acassen/keepalived/issues including the details above so that we can
> track the progress and anyone else experiencing the issue can add their own input.
>
> Many thanks,
> Quentin Armitage
Done: https://github.com/acassen/keepalived/issues/1283
Thanks!
Olivier