Keepalived

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