keepalived nopreempt 选项不起作用

keepalived nopreempt 选项不起作用

我想使用 nopreempt 选项和 keepalived vrrp 设置,当主节点发生故障时将备份节点作为主节点运行,然后再次返回网络。

我在两台服务器中都设置了 nopreempt 选项,并将状态设置为备份,但由于优先级高,nopreempt 不起作用。

请指导解决吗?

  Master Machine: 
  ! Configuration File for keepalived
   vrrp_instance VI_1 {
   state BACKUP
   nopreempt
   interface eth0
   virtual_router_id 1
   priority 250
   advert_int 1
   virtual_ipaddress {
    192.168.1.2/24
    } 
  }

  Backup Machine :
  ! Configuration File for keepalived
   vrrp_instance VI_1 {
   state BACKUP
   nopreempt
   interface eth0
   virtual_router_id 1
   priority 200
   advert_int 1
   virtual_ipaddress {
     192.168.1.2/24
   }

}

问候,本

答案1

将两个服务器的状态都更改为备份。主服务器具有更高的优先级,并且不具有抢占功能,两个服务器都具有相同的路由器 ID。这对我来说很有效。

答案2

我尝试了很多配置来实现这一点,唯一有效的方法是将两个服务器都设置为状态备份,一台服务器优先级 51,另一个50和设置不抢占。以下是示例配置:

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 51
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass XXXXXXXX
    }
    virtual_ipaddress {
        192.168.69.100/28
    }
}

只需在第二台服务器上将优先级设置为 50,一切就可以正常工作。

答案3

首先:我使用的是 CentOS 6 和 keepalived 1.2.7 (02/21,2013)

我也尝试了 nopreempt,经过一些测试后,它按预期工作。

使用相同的 vrrp 优先级运行主服务器和备份服务器不是一个好主意,因为有一个错误(AFAICT)会导致两个 keepalived 服务器都启动 VIP。根据https://www.rfc-editor.org/rfc/rfc5798#page-26具有最高 IP 的 keepalived 应保持/成为主服务器。我无法观察到这种行为!

(再次说明 AFAICT)如果您想让 nopreempt 正常工作,则必须从配置文件中删除语句“state”。如果配置文件中带有“state MASTER”的 keepalived 启动时,它会以 master 身份启动并宣传自己 = 不好。如果配置文件中没有“state”语句,keepalived 会以 BACKUP 状态启动并监听 vrrp。由于“nopreempt”,即使它以最高优先级运行,也不会成为 MASTER。这与 man 5 keepalived.conf 页面相反,此时状态并不重要。

优先级为 255 的 keepalived 始终成为主服务器 - 无论 nopreempt 选项是否打开。

如果您测试keepalived,请仔细查看防火墙/ nat规则。运行类似tcpdump的程序来检查vrrp广告是否通过并具有正确的发送方IP(来自其他keepalived的IP,而不是标准gw!)总是一个好主意。如果您使用kvm / qemu客户机,尤其如此,因为存在更改vrrp广告的默认nat规则。

nopreempt 仅适用于处于 BACKUP 状态的 keepalived。(RTFM)如果 keepalived(1.2.7)正在运行并且网络链接断开,keepalived 将更改为 FAULT 状态。当网络链接恢复时,如果 prio 足够高,keepalived 将变为 MASTER。我不知道这是否是一个错误,但它使 nopreempt 变得毫无用处。我会向邮件列表发送一个问题。

答案4

您必须在 vrrp 脚本中设置“fall”和“rise”选项。示例运行配置:

vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 1
    fall 2
    rise 2
}

vrrp_instance VI_1 {
    interface eth0

    track_interface {
        eth0
        eth1
    }

    state BACKUP # same as other node
    priority 101 # your choice
    virtual_router_id 53
    advert_int 1
    nopreempt

    authentication {
        auth_type PASS
        auth_pass 8CHARPASS
    }

    unicast_src_ip 172.31.10.11 # other node: 172.31.10.12
    unicast_peer {
        172.31.10.12 # other node: 172.31.10.11
    }

    virtual_ipaddress {
        172.31.20.20 dev eth1
    }

    track_script {
        chk_haproxy
    }
}

相关内容