Server Migration & Relocation Runbook
Generate coordinated, zero-downtime cutover runbooks when moving live servers between hardware nodes or datacenters. Automates DNS TTL reduction, rsync delta transfers, maintenance window freezing, and contingency rollback triggers.
Relocation Plan Overview
Migration Parameters
Phase 1: Pre-Migration Staging & Planning
T-48h to T-2hPrepare target host, lower DNS TTL, pre-sync static assets, and notify users.
Reduce DNS A record Time-to-Live (TTL) to 300 seconds (5 minutes) so that DNS cache records expire quickly during the final cutover.
dig +nocmd dayz.dustbowl.games any +multiline +noall +answer
Verify SSH connectivity to 203.0.113.50:22 and ensure the target directory structure and DustBowl Warden port allocations are ready.
ssh -p 22 [email protected] 'mkdir -p /home/container'
Transfer static assets, mods, maps, and binaries while the source server remains live. Excludes active saves and logs to minimize final maintenance downtime.
rsync -avzP -e 'ssh -p 22' --exclude 'save*' --exclude '*.log' --exclude '*.sqlite-journal' /opt/dayz/server/ [email protected]:/home/container/
Publish an announcement to Discord, forums, or Steam groups scheduled for T-0 (45 minute expected downtime).
✓ Verification: Community is notified of maintenance start time.Phase 2: Freeze & Delta Synchronization
T-0 (Maintenance Start)Gracefully stop source server, lock data state, and transfer differential saves.
Send broadcast notices at 15m, 5m, and 1m warning active players that server maintenance is beginning.
✓ Verification: Broadcast acknowledged in game chat/logs.Issue save-all / flush command via RCON, then gracefully terminate the server daemon to freeze game world state.
ssh -p 22 [email protected] 'systemctl stop game-server || true'
Run exact delta synchronization with --delete flag to copy dynamic world saves, databases, player inventories, and state.
rsync -avzP --delete -e 'ssh -p 22' /opt/dayz/server/ [email protected]:/home/container/
Generate SHA-256 checksums of the primary world save on both source and target to guarantee zero corruption during transfer.
sha256sum /home/container/$(ls -t /home/container | head -n 1)
Phase 3: Target Boot & Smoke Testing
T+15mApply permissions, start daemon on target node, and perform operator verification.
Fix UID/GID ownership (1000:1000) and ensure folders have 755 and files have 644 permissions.
ssh -p 22 [email protected] 'chown -R 1000:1000 /home/container && find /home/container -type d -exec chmod 755 {} + && find /home/container -type f -exec chmod 644 {} +'
Start the game server process on the target host. Verify logs for successful world loading, chunk parsing, and database initialization.
ssh -p 22 [email protected] 'cd /home/container && ./start.sh || systemctl start game-server'
An operator connects directly via target IP to verify inventory, base structures, permissions, and entity data.
✓ Verification: Admin character spawns with intact inventory and base structures.Phase 4: DNS Cutover & Public Launch
T+30mShift DNS resolution to target node and open public player traffic.
Point dayz.dustbowl.games to target IP 203.0.113.50. Because TTL was lowered to 300s, resolution shifts rapidly.
✓ Verification: dig +short dayz.dustbowl.games returns 203.0.113.50.Disable password/whitelist restriction on target server to welcome public players.
✓ Verification: Target server accepts incoming player connections.Notify community that migration is complete with updated connection IP/port info.
✓ Verification: Community announcement posted.Phase 5: Post-Cutover Monitoring & Rollback Plan
T+60m to T+72hObservation period and emergency rollback safeguards.
Watch CPU, RAM, tick rate / FPS, and query response for 60 minutes post-cutover.
✓ Verification: Resource usage and tick rates remain stable.Keep the source host intact and stopped for 72 hours as an immutable fallback snapshot.
✓ Verification: Source host remains powered down with original data preserved.If catastrophic data failure occurs on target: (1) Revert DNS dayz.dustbowl.games to 198.51.100.10, (2) Start source server daemon, (3) Post incident update.
ssh -p 22 [email protected] 'systemctl start game-server'
