ctdb-scripts: New eventscript 10.external
authorMartin Schwenke <martin@meltin.net>
Mon, 11 May 2015 05:29:34 +0000 (15:29 +1000)
committerAmitay Isaacs <amitay@samba.org>
Wed, 13 May 2015 04:42:13 +0000 (06:42 +0200)
This is an alternative to 10.interface and is installed as disabled by
default.  It should only be used with DisableIPFailover=yes and when
IP failover is being handled externally.  In this mode CTDB can be
informed of public IP address movements using "ctdb moveip".

During the "startup" event, this eventscript currently finds any
public IP addresses configured in $CTDB_PUBLIC_ADDRESSES and tells
CTDB which node they are on using "ctdb moveip".  This allows CTDB to
send ARPs and tickle-ACKs.

Pair-programmed-with: Amitay Isaacs <amitay@gmail.com>
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/config/events.d/10.external [new file with mode: 0644]
ctdb/packaging/RPM/ctdb.spec.in

diff --git a/ctdb/config/events.d/10.external b/ctdb/config/events.d/10.external
new file mode 100644 (file)
index 0000000..3fcb0e1
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+# Eventscript for CTDB to cope with externally managed public IP addresses
+
+# If DisableIPFailover is set:
+#
+# * 10.interface must be disabled.
+# * For connection tracking/killing to work this script must be enabled.
+
+[ -n "$CTDB_BASE" ] || \
+    export CTDB_BASE=$(cd -P $(dirname "$0") ; dirname "$PWD")
+
+. $CTDB_BASE/functions
+loadconfig
+
+if [ -z "$CTDB_PUBLIC_ADDRESSES" ] ; then
+    exit 0
+fi
+
+if [ ! -f "$CTDB_PUBLIC_ADDRESSES" ] ; then
+    if [ "$1" = "init" ]; then
+       echo "No public addresses file found. Nothing to do for 10.interfaces.external"
+    fi
+    exit 0
+fi
+
+takeover_assigned_ips ()
+{
+    ctdb_get_pnn
+
+    ctdb -X ip |
+    awk -F'|' '{print $2}' |
+    while read ip ; do
+       if [ -n "$(ip_maskbits_iface $ip)" ] ; then
+           echo "Assigning $ip to this node ($pnn)"
+           ctdb moveip "$ip" "$pnn"
+       fi
+    done
+}
+
+ctdb_check_args "$@"
+
+case "$1" in
+    startup)
+       takeover_assigned_ips
+       ;;
+esac
+
+exit 0
index f6f5d8965d860f9307c7d130cd08e1dac668c17a..98dd3027c127dc879bcdad11732e5e655ca98c49 100644 (file)
@@ -166,6 +166,7 @@ rm -rf $RPM_BUILD_ROOT
 %{_sysconfdir}/ctdb/events.d/00.ctdb
 %{_sysconfdir}/ctdb/events.d/01.reclock
 %{_sysconfdir}/ctdb/events.d/10.interface
+%{_sysconfdir}/ctdb/events.d/10.external
 %{_sysconfdir}/ctdb/events.d/13.per_ip_routing
 %{_sysconfdir}/ctdb/events.d/11.natgw
 %{_sysconfdir}/ctdb/events.d/11.routing