EC2 VPC 上未发送/接收 Keepalived 心跳

EC2 VPC 上未发送/接收 Keepalived 心跳

我正在尝试将 keepalived + HAProxy 设置为 EC2 VPC 上的冗余负载均衡器(是的,我知道 ELB 是一种选择)。我相信我们已正确配置,但关闭主服务器似乎无法进行故障转移。

服务器A配置:

vrrp_script chk_haproxy {
  script "pidof haproxy"
  interval 2
}

vrrp_instance VI_1 {
  interface eth0
  state BACKUP
  priority 100
  nopreempt

  virtual_router_id 33
  unicast_src_ip 172.30.1.100
  unicast_peer {
    172.30.1.101
  }

  authentication {
    auth_type PASS
    auth_pass PASSWORD
  }

  track_script {
    chk_haproxy
  }
  notify_master /etc/keepalived/master.sh
}

服务器B配置:

vrrp_script chk_haproxy {
  script "pidof haproxy"
  interval 2
}

vrrp_instance VI_1 {
  interface eth0
  state BACKUP
  priority 100
  nopreempt

  virtual_router_id 33
  unicast_src_ip 172.30.1.101
  unicast_peer {
    172.30.1.100
  }

  authentication {
    auth_type PASS
    auth_pass PASSWORD
  }

  track_script {
    chk_haproxy
  }
  notify_master /etc/keepalived/master.sh
}

我已经设置了安全组规则来:

HTTP              TCP           80   0.0.0.0/0
Custom ICMP Rule  Echo Reply    N/A  0.0.0.0/0
SSH               TCP           22   0.0.0.0/0
Custom Protocol   VRRP (112)    All  0.0.0.0/0
Custom ICMP Rule  Echo Request  N/A  0.0.0.0/0

但是,以下命令在备份中总是超时(主服务器上的反向命令也是如此):

nc -vz 172.30.1.100 112

此外,以下命令永远不会返回任何内容,这让我认为由于某种原因这些命令仍然没有通过:

sudo tshark -f "vrrp"

答案1

您的 netcat 命令尝试使用端口 112,而不是协议 112。这就是它不起作用的原因。此外,在这种情况下使用 netcat 测试通信并不是正确的方法。使用以下任一命令查看您的流量是否存在于任一实例上:

tcpdump "ip proto 112" 
tshark -f "vrrp"

您的配置应将其中一个服务器定义为 MASTER,另一个定义为 BACKUP。BACKUP 的优先级应为 100,MASTER 的优先级应为 101。

将它们都设置为 BACKUP 可能是您的问题。

答案2

当我睡了一觉并再次查看时,这个问题变得非常明显(他们不是一直都是这样吗)。这很简单,就像在 中输入了拼写错误一样unicast_src_ip。由于 IP 不正确,因此两个服务器上都没有消息通过。我本以为会有一些错误消息,但一旦修复了这个问题,一切都开始 100% 正常工作。

相关内容