Keepalived on ec2 for master/slave configuration
/etc/keepalived/keepalived.conf
vrrp_script check_httpd
{
script "pidof httpd"
interval 5
fall 2
rise 2
}
vrrp_instance VI_1
{
debug 2
interface eth0
state MASTER|BACKUP
virtual_router_id 1
priority 110|100
unicast_src_ip <MASTER_private_ip>|<SLAVE_private_ip>
unicast_peer
{
<SLAVE_private_ip>|<MASTER_private_ip>
}
track_script
{
check_httpd
}
# only on master
notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/fault.sh"
notify_fault "/etc/keepalived/fault.sh"
}
fault.sh
#!/bin/bash
EIP=EIP_PUBLIC_IP
ASSOCIATION_ID=$(/usr/bin/aws --region eu-west-1 ec2 describe-addresses --public-ips $EIP --query "Addresses[].AssociationId" --output text)
ALLOCATION_ID=$(/usr/bin/aws --region eu-west-1 ec2 describe-addresses --public-ips $EIP --query "Addresses[].AllocationId" --output text)
INSTANCE_ID=SLAVE_INSTANCE_ID
/usr/bin/aws --region eu-west-1 ec2 disassociate-address --association-id $ASSOCIATION_ID
/usr/bin/aws --region eu-west-1 ec2 associate-address --allocation-id $ALLOCATION_ID --instance-id $INSTANCE_ID
master.sh
#!/bin/bash
EIP=EIP_PUBLIC_IP
ASSOCIATION_ID=$(/usr/bin/aws --region eu-west-1 ec2 describe-addresses --public-ips $EIP --query "Addresses[].AssociationId" --output text)
ALLOCATION_ID=$(/usr/bin/aws --region eu-west-1 ec2 describe-addresses --public-ips $EIP --query "Addresses[].AllocationId" --output text)
INSTANCE_ID=MASTER_INSTANCE_ID
/usr/bin/aws --region eu-west-1 ec2 disassociate-address --association-id $ASSOCIATION_ID
/usr/bin/aws --region eu-west-1 ec2 associate-address --allocation-id $ALLOCATION_ID --instance-id $INSTANCE_ID