I've deployed a fairly simple VPC (one tier, one VM) with a private gateway, but keep getting both VRs in MASTER state. Upon investigating, I can see that the reason is that keepalived is being configured to use the private gateway interface (eth2). Since private gateway interface shares a virtual IP, both VRs send advertisements from the VIP and therefore both think they're Master. The resolution is to make keepalived use an actual guest interface rather than a private gateway.
I'm quite happy digging into the VR code to sort this out, but since this is a problem on 4.11.2 and I would've thought this is a fairly common scenario, I thought I'd bring it up here in case someone had already seen it and it wasn't as obvious as I first thought! >From the VR logs it seems that it does initially get configured on eth3 and then again on eth2. This happens any time update_config.py is called. 2019-06-11 17:58:31,671 CsRedundant.py _redundant_on:99 Wait for devices to be configured so we can start keepalived 2019-06-11 17:58:31,672 CsHelper.py execute:193 Executing: ip link show eth3 | grep 'state UP' 2019-06-11 17:58:31,675 CsRedundant.py _redundant_on:105 Device eth3 is present, let's start keepalive now. 2019-06-11 17:58:31,675 CsRedundant.py _redundant_on:99 Wait for devices to be configured so we can start keepalived 2019-06-11 17:58:31,675 CsHelper.py execute:193 Executing: ip link show eth2 | grep 'state UP' 2019-06-11 17:58:31,678 CsRedundant.py _redundant_on:105 Device eth2 is present, let's start keepalive now. Regards, Richard