├── README.md ├── install-keepalived.sh ├── check-node-swarm-status.sh └── keepalived.conf /README.md: -------------------------------------------------------------------------------- 1 | # docker-swarm-configure-keepalived 2 | Configure keepalived floating ip for docker swarm 3 | -------------------------------------------------------------------------------- /install-keepalived.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | apt-get update 4 | apt-get install -y keepalived 5 | -------------------------------------------------------------------------------- /check-node-swarm-status.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | dockerid="$(docker info | grep -i "nodeid:" | awk -F ':' '{print $2}' | sed -e 's/^[[:space:]]*//')" 3 | echo "Docker id: $dockerid" 4 | 5 | status="$(docker node list | grep -i $dockerid | awk -F ' ' '{print $5}')" 6 | echo "Status: $status" 7 | 8 | active="active" 9 | shopt -s nocasematch 10 | case "$status" in 11 | $active ) ecode=0 ;; 12 | *) ecode=1 ;; 13 | esac 14 | 15 | echo "exiting with $ecode" 16 | exit $ecode 17 | -------------------------------------------------------------------------------- /keepalived.conf: -------------------------------------------------------------------------------- 1 | vrrp_script chk_docker { 2 | script "/usr/bin/killall -0 dockerd" 3 | interval 2 4 | fall 2 5 | rise 2 6 | } 7 | 8 | vrrp_script chk_docker_swarm_status { 9 | script "/bin/bash /etc/keepalived/check-node-swarm-status.sh" 10 | interval 2 11 | fall 2 12 | rise 2 13 | } 14 | 15 | 16 | vrrp_instance VI_104 { 17 | state EQUAL 18 | 19 | interface {{ethernet_adapter_name_for_cluster}} 20 | virtual_router_id 104 21 | priority 100 22 | unicast_src_ip {{this_node_ip}} 23 | unicast_peer { 24 | {{node_3_ip}} 25 | {{node_3_ip} 26 | } 27 | 28 | authentication { 29 | auth_type PASS 30 | auth_pass {{password_8_chars_max}} 31 | } 32 | virtual_ipaddress { 33 | {{floating_ip}}/{{floating_ip_mask}} dev {{ethernet_adapter_for_floating_ip}} 34 | } 35 | track_script { 36 | chk_docker 37 | chk_docker_swarm_status 38 | } 39 | } 40 | --------------------------------------------------------------------------------