Keepalived через GRE туннель для отработки отказа в среде VPS
Я запускаю приложение на Linode. Их сеть не поддерживает многоадресную рассылку. Многие инструменты, используемые для аварийного переключения (keepalived, spread / wackamole, hearbeat), требуют многоадресной передачи для работы (насколько я знаю). Я прочитал документацию по всем из них, и даже в "одноадресном" режиме (если он есть) он все равно отправляет через многоадресную рассылку.
Я знаю, что с туннелем GRE я могу эффективно отправлять многоадресную рассылку без ведома маршрутизатора, что дало бы мне возможность использовать один из этих инструментов (сейчас я бы хотел использовать keepalived).
Я настроил свой туннель на устройстве "gretun" примерно так:
10.0.0.1 - точка подключения туннеля к www1
10.0.0.2 - точка подключения туннеля к www2
Я могу nc 10.0.0.2 80
с www1, и nc 10.0.0.1 80
с www2, так что, похоже, работает. Притворись публичным IP-адресом, которым я пытаюсь поделиться: 69.164.69.69.
У меня есть два вопроса:
После настройки keepalive для мониторинга туннеля (gretun) эти две машины все еще не могут видеть друг друга. Вот мой конфиг:
global_defs {
notification_email {
info@app.com
}
notification_email_from alerts@app.com
smtp_server localhost
smtp_connect_timeout 30
router_id www1.app.com
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface gretun
virtual_router_id 51
priority 100
advert_int 1
garp_master_delay 2
smtp_alert
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
69.164.69.69/24 dev eth0
}
track_script {
chk_haproxy
}
}
И www1, и www2 захватывают общий IP одновременно, я полагаю, потому что они не могут общаться друг с другом. Есть идеи, почему использование gretun не позволяет им общаться друг с другом?
Второй вопрос: можно ли настроить туннель таким образом, чтобы я мог подключить 3+ машины друг к другу и использовать многоадресную рассылку? Другими словами, вместо того, чтобы устанавливать разные туннели между различными комбинациями узлов, можно просто заставить узлы "присоединяться" к туннелю, так сказать, чтобы они могли автоматически обнаруживать друг друга?
Вопросы могут быть глупыми, но я не сетевой гуру, это мой первый опыт использования туннелей за пределами ssh. Я также открыт для совета, который решит мою проблему вне того, что я делаю.
Спасибо!
2 ответа
Если вам интересно, у меня есть патч для keepalived, который позволяет использовать одноадресную передачу между локальным и удаленным VIP. Я успешно использовал его на vps.net между виртуальными машинами. Это намного проще, чем пытаться настроить туннель! Я загрузил его туда:
Затем вам просто нужно указать "vrrp_unicast_bind " и "vrrp_unicast_peer ". Он по-прежнему будет использовать протокол VRRP, но только между этими IP-адресами.
Надеюсь, это поможет!
В AWS он может работать в среде VPS, но не будет работать в обычной среде EC2, поскольку вы не можете открыть необработанное правило протокола (112 для VRRP) в группе безопасности.