From 08d19c815844be1ddfa7566390a988de075c4dff Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 18 Jun 2026 22:44:41 -0700 Subject: [PATCH] Add MTU migration Phase 2 script --- scripts/network/mtu_phase2.sh | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 scripts/network/mtu_phase2.sh diff --git a/scripts/network/mtu_phase2.sh b/scripts/network/mtu_phase2.sh new file mode 100644 index 0000000..345b4b6 --- /dev/null +++ b/scripts/network/mtu_phase2.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# Phase 2 — Recreate overlay networks + redeploy stacks +# Only runs on whichever node holds swarm leadership +# Must wait for all 3 nodes to complete phase1 first +LOG=/volume1/docker/mtu_migration/phase2.log +exec >> "$LOG" 2>&1 +echo "[$(date)] Phase2 starting — waiting for all nodes phase1.done" +TIMEOUT=600 +ELAPSED=0 +while true; do + ALL_DONE=true + for node in docker-2 docker-3; do + [ ! -f "/volume1/docker/mtu_migration/${node}_phase1.done" ] && ALL_DONE=false + done + $ALL_DONE && break + sleep 5; ELAPSED=$((ELAPSED+5)) + if [ "$ELAPSED" -ge "$TIMEOUT" ]; then + echo "[$(date)] TIMEOUT waiting for phase1 — aborting phase2" + exit 1 + fi +done +echo "[$(date)] All phase1 done files present — checking swarm quorum" +SWARM_READY=false +for i in $(seq 1 24); do + STATUS=$(docker node ls 2>/dev/null | grep -c "Ready") + echo "[$(date)] Swarm ready nodes: $STATUS" + [ "$STATUS" -ge 2 ] && SWARM_READY=true && break + sleep 10 +done +if ! $SWARM_READY; then + echo "[$(date)] Swarm not ready after 4min — aborting phase2" + exit 1 +fi +echo "[$(date)] Swarm healthy — redeploying stacks" +CD=/volume1/docker/compose-files +for stack in traefik auth postgresql; do + f="$CD/${stack}.yaml" + [ -f "$f" ] || { echo "[$(date)] WARN: $f not found, skipping"; continue; } + echo "[$(date)] Redeploying stack: $stack" + docker stack deploy -c "$f" "$stack" 2>&1 + echo "[$(date)] $stack deploy exit: $?" + sleep 5 +done +echo "[$(date)] Verifying overlay MTUs:" +docker network ls --filter driver=overlay -q | \ + xargs docker network inspect --format '{{.Name}} {{json .Options}}' 2>/dev/null +echo "[$(date)] Phase2 COMPLETE" +touch /volume1/docker/mtu_migration/phase2.done