diff --git a/CHANGELOG.md b/CHANGELOG.md index ba10274..d7f44c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # Changelog +## 0.1.1 + - Add notify script + ## 0.1.0 - Initial release diff --git a/Makefile b/Makefile index e6b8112..e43ec87 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ NAME = osixia/keepalived -VERSION = 0.1.0 +VERSION = 0.1.1 .PHONY: all build test tag_latest release diff --git a/README.md b/README.md index 08206ae..11b8cfe 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,6 @@ A docker image to run Keepalived. ## Quick start -This image need to be run with : --privileged --net=host +This image require the kernel module ip_vs loaded on the host and need to be run with : --privileged --net=host docker run --privileged --net=host -d osixia/keepalived diff --git a/image/env.yml b/image/env.yml index 3121883..ac615c3 100644 --- a/image/env.yml +++ b/image/env.yml @@ -1,4 +1,4 @@ -KEEPALIVED_INTERFACE: p4p1 +KEEPALIVED_INTERFACE: eth0 KEEPALIVED_PASSWORD: d0cker # for electing MASTER, highest priority wins. @@ -7,6 +7,10 @@ KEEPALIVED_PRIORITY: 150 KEEPALIVED_UNICAST_PEERS: - 192.168.1.10 + - 192.168.1.11 KEEPALIVED_VIRTUAL_IPS: - 192.168.1.231 + - 192.168.1.232 + +KEEPALIVED_NOTIFY: /osixia/keepalived/notify.sh diff --git a/image/service/keepalived/assets/keepalived.conf b/image/service/keepalived/assets/keepalived.conf index e92f9d7..91fc682 100644 --- a/image/service/keepalived/assets/keepalived.conf +++ b/image/service/keepalived/assets/keepalived.conf @@ -1,4 +1,12 @@ -vrrp_instance vip-1 { +vrrp_sync_group VG_1 { + group { + VI_1 + } + + {{ keepalived_notify }} +} + +vrrp_instance VI_1 { interface {{ keepalived_interface }} track_interface { diff --git a/image/service/keepalived/assets/notify.sh b/image/service/keepalived/assets/notify.sh new file mode 100755 index 0000000..348de0f --- /dev/null +++ b/image/service/keepalived/assets/notify.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# for ANY state transition. +# "notify" script is called AFTER the +# notify_* script(s) and is executed +# with 3 arguments provided by keepalived +# (ie don't include parameters in the notify line). +# arguments +# $1 = "GROUP"|"INSTANCE" +# $2 = name of group or instance +# $3 = target state of transition +# ("MASTER"|"BACKUP"|"FAULT") + +TYPE=$1 +NAME=$2 +STATE=$3 + +case $STATE in + "MASTER") logger "I'm the MASTER! Whup whup." + exit 0 + ;; + "BACKUP") logger "Ok, i'm just a backup, great." + exit 0 + ;; + "FAULT") logger "Fault, what ?" + exit 0 + ;; + *) logger "Unknown state" + exit 1 + ;; +esac diff --git a/image/service/keepalived/container-start.sh b/image/service/keepalived/container-start.sh index 9b58ce9..e84d7de 100755 --- a/image/service/keepalived/container-start.sh +++ b/image/service/keepalived/container-start.sh @@ -22,6 +22,12 @@ if [ ! -e "$FIRST_START_DONE" ]; then sed -i "s|{{ keepalived_priority }}|$KEEPALIVED_PRIORITY|g" /etc/keepalived/keepalived.conf sed -i "s|{{ keepalived_password }}|$KEEPALIVED_PASSWORD|g" /etc/keepalived/keepalived.conf + if [ -n "$KEEPALIVED_NOTIFY" ]; then + sed -i "s|{{ keepalived_notify }}|notify \"$KEEPALIVED_NOTIFY\"|g" /etc/keepalived/keepalived.conf + else + sed -i "/{{ keepalived_notify }}/d" /etc/keepalived/keepalived.conf + fi + # unicast peers KEEPALIVED_UNICAST_PEERS=($KEEPALIVED_UNICAST_PEERS) for peer in "${KEEPALIVED_UNICAST_PEERS[@]}"