Я пытаюсь настроить настройку высокой доступности с использованием HAProxy, Keepalived и AWS Lightsail. Я настроил все до такой степени, что если я вручную переключу местоположение IP, все будет работать, как ожидалось, но автоматическое назначение IP - нет. Будем очень признательны за любые рекомендации о том, как это сделать.
Я следил за этим руководством для HAProxy и Keepalived на EC2. Я думал, что это все равно будет работать из-за того, что ресурсы в основном те же, но мне не удалось заставить его работать.
У меня есть три узла балансировки нагрузки, по одному в каждом регионе высокой доступности во Франкфурте. Внутреннее соединение между ними подтверждено и проверено на отметке 0,9 мс. Статический IP-адрес указывается вручную на lb1. Если lb1 отключается, ничего не происходит и обслуживание прекращается.
Конфигурация Keepalived lb1:
vrrp_script check_haproxy
{
script "pidof haproxy"
interval 5
fall 2
rise 2
}
vrrp_instance VI_1
{
debug 2
interface eth0
state MASTER
virtual_router_id 1
priority 101
unicast_src_ip PRIVATE_IP_LB1
unicast_peer
{
PRIVATE_IP_LB2
PRIVATE_IP_LB3
}
track_script
{
check_haproxy
}
notify_master /etc/keepalived/failover.sh
}
Конфигурация Keepalived lb2:
vrrp_script check_haproxy
{
script "pidof haproxy"
interval 5
fall 2
rise 2
}
vrrp_instance VI_1
{
debug 2
interface eth0
state BACKUP
virtual_router_id 1
priority 100
unicast_src_ip PRIVATE_IP_LB2
unicast_peer
{
PRIVATE_IP_LB1
PRIVATE_IP_LB3
}
track_script
{
check_haproxy
}
notify_master /etc/keepalived/failover.sh
}
Конфигурация Keepalived lb3:
vrrp_script check_haproxy
{
script "pidof haproxy"
interval 5
fall 2
rise 2
}
vrrp_instance VI_1
{
debug 2
interface eth0
state BACKUP
virtual_router_id 1
priority 99
unicast_src_ip PRIVATE_IP_LB3
unicast_peer
{
PRIVATE_IP_LB1
PRIVATE_IP_LB2
}
track_script
{
check_haproxy
}
notify_master /etc/keepalived/failover.sh
}
failover.sh
#!/bin/bash
EIP=AWS_LIGHTSAIL_STATIC_IP
INSTANCE_ID=INSTANCE_ID_OF_NODE
/usr/bin/aws ec2 disassociate-address --public-ip $EIP
/usr/bin/aws ec2 associate-address --public-ip $EIP --instance-id $INSTANCE_ID