diff --git a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/lb/VirtualRouterLoadBalancerBackend.java b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/lb/VirtualRouterLoadBalancerBackend.java index 3ee3d33449f..157ce8e71e6 100755 --- a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/lb/VirtualRouterLoadBalancerBackend.java +++ b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/lb/VirtualRouterLoadBalancerBackend.java @@ -661,7 +661,7 @@ private List makeLbTOs(final LoadBalancerStruct struct, VirtualRouterVmInv VipInventory vipInUsed = vip == null ? vip6 : vip; VmNicInventory publicNic = null; - if (vr != null) { + if (vr != null && vipInUsed != null) { List nics = vr.getVmNics().stream() .filter(n -> StringUtils.equals(n.getL3NetworkUuid(), vipInUsed.getL3NetworkUuid())) .collect(Collectors.toList()); @@ -2763,6 +2763,10 @@ public void callBack(String vrUuid, VirtualRouterHaTask task, Completion complet } LoadBalancerStruct s = JSONObjectUtil.toObject(task.getJsonData(), LoadBalancerStruct.class); + logger.debug(String.format("Refreshing LB[uuid:%s] on backup VR[uuid:%s], clearing VIP to avoid dual-master", + s.getLb().getUuid(), vrUuid)); + s.setVip(null); + s.setIpv6Vip(null); refreshLbToVirtualRouter(VirtualRouterVmInventory.valueOf(vrVO), s, completion); } };