Назад | Перейти на главную страницу

Контрольные сообщения Keepalived не отправляются / не принимаются на EC2 VPC

Я пытаюсь настроить 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"

Проблема оказалась до боли очевидной, когда я поспал на ней и посмотрел еще раз (не всегда ли). Это было так же просто, как и опечатку в unicast_src_ip. Поскольку IP-адрес был неверным, сообщения не проходили ни на одном сервере. Я бы подумал, что для этого будет какое-то сообщение об ошибке, но все стало работать на 100%, как только это было исправлено.

Ваша команда netcat пытается использовать порт 112, а не протокол 112. Вот почему это не работает. Кроме того, использование netcat для тестирования связи в этом случае - неправильный путь. Используйте любую из этих команд, чтобы узнать, присутствует ли ваш трафик на любом из экземпляров:

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

Ваши конфигурации должны определять один из серверов как МАСТЕР, а другой как РЕЗЕРВНЫЙ. Приоритет должен быть 100 для BACKUP, 101 для MASTER.

Возможно, проблема в том, что для них обоих установлено РЕЗЕРВНОЕ КОПИРОВАНИЕ.