设计思路
- 两台 MikroTik 路由器,各自有 6 条 PPPoE 线路(pppoe-out1~6)。
- 要求:只有当本端 6 条 PPPoE 全部断开时,本机才放弃 VRRP Master 角色;当线路恢复后,本机恢复优先级,但 不自动抢回 Master(避免网络波动)。
实现方法:
- VRRP 设置为
preemption-mode=no(非抢占)。 - 通过脚本定期检测所有 6 条 PPPoE 接口的
running状态。 - 如果全部断开 → 将本机 VRRP
priority设为0(立即放弃 Master)。 - 如果至少一条恢复 → 将本机 VRRP
priority恢复为正常值(如 150 或 140),但不抢回 Master。
- VRRP 设置为
脚本配置
ROS1(正常优先级 150)
:local pppoeList {"pppoe-out1";"pppoe-out2";"pppoe-out3";"pppoe-out4";"pppoe-out5";"pppoe-out6"}
:local allDown true
:foreach i in=$pppoeList do={ :if ([/interface get $i running]) do={ :set allDown false } }
:if ($allDown) do={
/interface vrrp set [find name="vrrp1"] priority=0
} else={
:delay 10
/interface vrrp set [find name="vrrp1"] priority=150
}ROS2(正常优先级 140)
:local pppoeList {"pppoe-out1";"pppoe-out2";"pppoe-out3";"pppoe-out4";"pppoe-out5";"pppoe-out6"}
:local allDown true
:foreach i in=$pppoeList do={ :if ([/interface get $i running]) do={ :set allDown false } }
:if ($allDown) do={
/interface vrrp set [find name="vrrp1"] priority=0
} else={
:delay 10
/interface vrrp set [find name="vrrp1"] priority=140
}
VRRP 基础配置
ROS1(正常优先级 150)
/interface vrrp add name=vrrp1 vrid=1 interface=bridge priority=150 preemption-mode=noROS2(正常优先级 140)
/interface vrrp add name=vrrp1 vrid=1 interface=bridge priority=140 preemption-mode=no
最终效果:任意一台检测到自己的 6 条 PPPoE 全断 → priority=0 → 立即让出 Master。恢复后 priority 回到正常值,但因 preemption-mode=no 不会抢回。