fix widespread naming errors across all docs — array_started, fallback, FALLBACK_

array_start.sh → array_started.sh (bulk rename — actual file has always been
array_started.sh; docs consistently used the wrong name across 9 files)

failover.sh → fallback.sh (bulk rename — script is Fallback/fallback.sh;
docs used the old name throughout)

FAILOVER_HOST2_RUNS_FOR_HOST1_TIER1 → FALLBACK_HOST2_COVERS_HOST1_TIER1
(README.md — wrong variable name, actual vars use FALLBACK_ prefix and
COVERS_ not RUNS_FOR_)

docker_watchdog.sh attribution: "started by array_started.sh" → "called every
minute by watchdog_orchestrator.sh" (docker_watchdog is not in ARRAY_START_SCRIPTS)

server_reboot.sh shutdown sequence: step 7 "rc.docker stop" → calls
array_stopping.sh (user_scripts, fallback, rsync, mover, docker_container_stop)

Rsync manual ARRAY_START_SCRIPTS list: removed stability_watchdog and
docker_watchdog (now in watchdog_orchestrator); failover → fallback
This commit is contained in:
Gmer4Lfe
2026-05-22 21:53:32 -04:00
parent 8d72fbf0e2
commit 070013cb4f
10 changed files with 46 additions and 40 deletions
+10 -10
View File
@@ -70,7 +70,7 @@ break silently.
Dispatcharr # shared Live TV scheduler
```
When `failover.sh` on HOST2 reads `FAILOVER_HOST2_RUNS_FOR_HOST1_TIER1=(..."Emby"...)`,
When `fallback.sh` on HOST2 reads `FALLBACK_HOST2_COVERS_HOST1_TIER1=(..."Emby"...)`,
it looks for a container called exactly `Emby` and starts it. HOST2 must have a
container called `Emby` — not `Emby-Gmer4Lfe`, not `Emby-HOST1`, just `Emby` — with
its volume mounts pointing at the mirrored share paths. This is what makes one
@@ -107,7 +107,7 @@ the suffix makes the owner unambiguous. Scripts targeting `Emby` and scripts tar
# The entire ecosystem uses container names as identifiers.
# docker_watchdog.sh: WATCHDOG_REQUIRED_CONTAINERS=("NginxProxyManager" "Authelia")
# → looks for exactly "NginxProxyManager" on the running server
# failover.sh: FAILOVER_HOST2_RUNS_FOR_HOST1_TIER1=("Emby" "VaultWarden")
# fallback.sh: FALLBACK_HOST2_COVERS_HOST1_TIER1=("Emby" "VaultWarden")
# → looks for exactly "Emby" and "VaultWarden" on HOST2
# docker_daily_restart.sh: DAILY_RESTART_CONTAINERS=("Dispatcharr" "Authelia")
# → looks for exactly those names in docker ps
@@ -365,7 +365,7 @@ This is not standby. This is mutual coverage between peers.
# Things conventional failover provides that this does NOT:
# Zero RPO (recovery point objective) — there is ~15min of potential staleness
# Synchronous state replication — changes don't reach HOST2 instantly
# Automatic failure detection in seconds — failover.sh checks every 2 minutes
# Automatic failure detection in seconds — fallback.sh checks every 2 minutes
# Transparent IP migration — DNS TTL means up to 1 minute of routing to old IP
#
# What you get instead:
@@ -380,7 +380,7 @@ This is not standby. This is mutual coverage between peers.
## ━━━ HOW FAILOVER ACTUALLY WORKS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
`failover.sh` runs on both servers as a continuous background process. Every 2 minutes
`fallback.sh` runs on both servers as a continuous background process. Every 2 minutes
it pings two things: the other server's Tailscale IP, and `8.8.8.8`. The combination
of those two answers determines the current state.
@@ -465,7 +465,7 @@ Failover coverage:
Monitoring:
Both servers resource/docker/system/ resource/docker/system/
stability_watchdog.sh stability_watchdog.sh
failover.sh failover.sh
fallback.sh fallback.sh
Sunday morning coffee report Sunday morning coffee report
```
@@ -558,13 +558,13 @@ Arbiter runs only orchestrators — never individual scripts directly.
```
At Startup of Array:
array_start.sh launches all startup scripts in order
array_started.sh launches all startup scripts in order
→ inotify_tuning.sh raise kernel limits before containers start
→ docker_syslog_filter.sh suppress veth noise before containers create interfaces
→ php_fpm_max_children.sh WebGUI tuning before first request
→ ramdisk_setup.sh create ramdisk before Emby starts
→ docker_network_connect.sh connect containers to extra networks
→ failover.sh continuous — mutual failover state machine
→ fallback.sh continuous — mutual failover state machine
Every minute:
watchdog_orchestrator.sh fires each watchdog in sequence
@@ -619,7 +619,7 @@ Throughout the day (every minute via watchdog_orchestrator.sh):
stability_watchdog.sh watching: RAM, CPU temp, rootfs, kernel, daemon
Throughout the day:
failover.sh watching: remote server, internet connectivity
fallback.sh watching: remote server, internet connectivity
transcode_management.sh managing: ramdisk ↔ SSD, session cleanup (every 3min)
critical_sync_maintenance.sh keeping: auth stack + Emby current (every 15min)
@@ -671,7 +671,7 @@ Problem: Docker daemon hung
→ If still hung: immediate reboot (no strikes needed — daemon can't be managed)
Problem: HOST1 loses power
→ failover.sh on HOST2 detects at next 2-minute check
→ fallback.sh on HOST2 detects at next 2-minute check
→ Tier 1 starts immediately: DDNS, Emby, VaultWarden, Live TV
→ Household barely notices. Live TV may buffer for < 2 minutes.
```
@@ -732,7 +732,7 @@ Things that are different from what you might expect:
# ─────────────────────────────────────────────────────────────────────────────
# 1. Arbiter has very few entries.
# Everything runs through orchestrators. Individual scripts are never
# scheduled directly. array_start.sh is the only "At Startup of Array" entry.
# scheduled directly. array_started.sh is the only "At Startup of Array" entry.
# 2. Scripts are silent when healthy.
# stability_watchdog.sh runs 288 times per day. It produces zero output on clean