update stale media ownership language across all docs
arr_sync.sh bidirectional union replaced the old split-ownership model. Old: HOST1 owns Movies/TV/Music, HOST2 owns Anime — each arr manages different shares to avoid conflicts. New: arr_sync.sh keeps all arr databases in union. Either server can download to any share at any time. The union is the source of truth. Auth stack references left intact — HOST1 still owns auth config (one-way sync to HOST2). Only media library ownership language updated. Files changed: README.md — server block + share annotations Fallback/README-Fallback.md — role line + Split Source of Truth section Orchestrators/README-Orchestrators — daily sync share comments Rsync/Manual-Rsync.md — DEFAULT_RSYNC_OPTS comment block Media/README-Media.md — HOST AWARENESS section
This commit is contained in:
+11
-10
@@ -59,7 +59,7 @@ HOST1 — unRAID-Gmer4Lfe
|
|||||||
Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools
|
Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools
|
||||||
Location: Primary site
|
Location: Primary site
|
||||||
DDNS: Gmer4Lfe.com
|
DDNS: Gmer4Lfe.com
|
||||||
Role: Primary — full service stack + source of truth for Movies/Shows/Music
|
Role: Primary — full service stack, arr_sync union for all media shares
|
||||||
|
|
||||||
HOST2 — unRAID-Jayred365
|
HOST2 — unRAID-Jayred365
|
||||||
Hardware: Intel i5 10th gen, 64GB RAM
|
Hardware: Intel i5 10th gen, 64GB RAM
|
||||||
@@ -81,21 +81,22 @@ Container names "Emby" on HOST2 must be the container HOST2 starts for HOST1
|
|||||||
Network names Docker custom networks must match for NPM routing to work
|
Network names Docker custom networks must match for NPM routing to work
|
||||||
```
|
```
|
||||||
|
|
||||||
### Split Source of Truth — No Conflicts
|
### Union Library — arr_sync.sh Is the Source of Truth
|
||||||
|
|
||||||
Both servers run arr instances simultaneously with zero conflict — they manage completely
|
Both servers run arr instances simultaneously. arr_sync.sh keeps all databases in
|
||||||
different shares:
|
bidirectional union before every rsync cycle — either server can download anything
|
||||||
|
and it propagates to the other:
|
||||||
|
|
||||||
```
|
```
|
||||||
HOST1 owns: Movies (Radarr), Tv_Shows (Sonarr), Music (Lidarr)
|
HOST1 runs: Radarr (Movies), Sonarr (Tv_Shows), Lidarr (Music)
|
||||||
HOST2 owns: Anime_Movies (his Radarr), Anime_Shows (his Sonarr)
|
HOST2 runs: Radarr (Anime_Movies), Sonarr (Anime_Shows)
|
||||||
|
|
||||||
Each server mirrors the other's shares continuously via rsync.
|
All arr databases merged via arr_sync. rsync spreads files additively.
|
||||||
|
Either server downloads to any share — the other catches up on the next cycle.
|
||||||
```
|
```
|
||||||
|
|
||||||
The rule: never run two arr instances against the same share simultaneously. Different arrs
|
When HOST2 runs HOST1's arr containers during a Tier 4 fallback, those arrs already
|
||||||
managing different shares is fine. When HOST2 runs HOST1's arrs during a Tier 4 fallback,
|
know the full library — arr_sync kept them in union while both servers were online.
|
||||||
HOST1's Tdarr is not running (HOST1 is down) — no conflict.
|
|
||||||
|
|
||||||
### Auth Stack — Warm on Both Servers
|
### Auth Stack — Warm on Both Servers
|
||||||
|
|
||||||
|
|||||||
+8
-11
@@ -162,19 +162,16 @@ cleaned by arr_cleanup on all nodes after the next sync cycle.
|
|||||||
|
|
||||||
## ━━━ HOST AWARENESS ━━━
|
## ━━━ HOST AWARENESS ━━━
|
||||||
|
|
||||||
Scripts run on both servers but only operate on the shares and arrs that belong to that
|
Scripts run on both servers via `detect_hosts()`, which aliases all `HOST*_` prefixed vars
|
||||||
server. `detect_hosts()` aliases all `HOST*_` prefixed vars to their unprefixed names.
|
to their unprefixed names at runtime. No manual `HOST1`/`HOST2` comparisons exist in any script.
|
||||||
|
|
||||||
```
|
arr_sync.sh keeps all arr databases in bidirectional union — either server can download
|
||||||
HOST1 — source of truth for: HOST2 — source of truth for:
|
to any share. Arr cleanup uses the union model: a file is only an orphan if neither arr
|
||||||
Movies (Radarr) Anime_Movies (his Radarr)
|
on either server has it indexed. Arr scripts check the aliased URL — if empty (arr not
|
||||||
Tv_Shows (Sonarr) Anime_Shows (his Sonarr)
|
configured on this host), they exit cleanly with no action.
|
||||||
Music (Lidarr)
|
|
||||||
```
|
|
||||||
|
|
||||||
Permissions and cleaner scripts run on both servers against their own shares. Arr cleanup
|
Permissions and cleaner scripts run locally against each server's own shares, defined
|
||||||
scripts check the aliased URL — if empty (arr not configured on this host), they exit
|
in `HOST*_MEDIA_PERMISSION_SHARES` and `HOST*_MEDIA_CLEAN_FOLDERS` in host*.conf.
|
||||||
cleanly with no action. No manual `HOST1`/`HOST2` comparisons exist in any script.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -582,9 +582,9 @@ DAILY_MAINTENANCE_SCRIPTS=(
|
|||||||
|
|
||||||
# host1.conf
|
# host1.conf
|
||||||
HOST1_DAILY_SYNC_SHARES=(
|
HOST1_DAILY_SYNC_SHARES=(
|
||||||
"/mnt/user/Movies" # HOST1 source of truth — push to HOST2
|
"/mnt/user/Movies" # both servers — arr_sync union, rsync spreads files
|
||||||
"/mnt/user/Tv_Shows" # HOST1 source of truth
|
"/mnt/user/Tv_Shows" # both servers
|
||||||
"/mnt/user/Music" # HOST1 source of truth
|
"/mnt/user/Music" # both servers
|
||||||
"/mnt/user/Kids_Movies"
|
"/mnt/user/Kids_Movies"
|
||||||
"/mnt/user/Kids_Tv_Shows"
|
"/mnt/user/Kids_Tv_Shows"
|
||||||
"/mnt/user/Sports"
|
"/mnt/user/Sports"
|
||||||
@@ -597,8 +597,8 @@ HOST1_PERSONAL_SHARES=(
|
|||||||
|
|
||||||
# host2.conf
|
# host2.conf
|
||||||
HOST2_DAILY_SYNC_SHARES=(
|
HOST2_DAILY_SYNC_SHARES=(
|
||||||
"/mnt/user/Anime_Shows" # HOST2 source of truth — push to HOST1
|
"/mnt/user/Anime_Shows" # both servers — arr_sync union, rsync spreads files
|
||||||
"/mnt/user/Anime_Movies" # HOST2 source of truth
|
"/mnt/user/Anime_Movies" # both servers
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -24,15 +24,15 @@ HOST1 — unRAID-Gmer4Lfe
|
|||||||
Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools
|
Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools
|
||||||
Location: Primary site
|
Location: Primary site
|
||||||
Domain: Gmer4Lfe.com
|
Domain: Gmer4Lfe.com
|
||||||
Owns: Movies, Tv_Shows, Music — source of truth
|
Arrs: Movies, Tv_Shows, Music — union with HOST2 via arr_sync
|
||||||
Auth stack — source of truth
|
Auth stack — source of truth (HOST1 owned, syncs to HOST2)
|
||||||
Emby — primary media server
|
Emby — primary media server
|
||||||
|
|
||||||
HOST2 — unRAID-Jayred365
|
HOST2 — unRAID-Jayred365
|
||||||
Hardware: Intel i5 10th gen, 64GB RAM
|
Hardware: Intel i5 10th gen, 64GB RAM
|
||||||
Location: Remote — different building, different power utility
|
Location: Remote — different building, different power utility
|
||||||
Domain: Gmer4Lfe.us
|
Domain: Gmer4Lfe.us
|
||||||
Owns: Anime_Shows, Anime_Movies — source of truth
|
Arrs: Anime_Shows, Anime_Movies — union with HOST1 via arr_sync
|
||||||
His own Emby — for his household
|
His own Emby — for his household
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -637,9 +637,9 @@ bash rsync.sh /mnt/user/appdata-Failover/Arrs_Stack --status
|
|||||||
# Rsync engine
|
# Rsync engine
|
||||||
RSYNC_ENABLED=true
|
RSYNC_ENABLED=true
|
||||||
DEFAULT_RSYNC_OPTS="-az --no-perms --no-owner --no-group --inplace"
|
DEFAULT_RSYNC_OPTS="-az --no-perms --no-owner --no-group --inplace"
|
||||||
# No --delete in DEFAULT_RSYNC_OPTS — bidirectional media shares spread files only.
|
# No --delete in DEFAULT_RSYNC_OPTS — media share rsync is additive only.
|
||||||
# Each server's arrs are source of truth for their content; arr cleanup scripts
|
# arr_sync.sh keeps all arr databases in union — either server can download anything.
|
||||||
# handle deletions. Profiles set PROFILE_RSYNC_OPTS with --delete explicitly.
|
# arr cleanup handles deletions (orphans only). Profiles use --delete explicitly.
|
||||||
BW_LIMIT=0 # KB/s, 0 = unlimited
|
BW_LIMIT=0 # KB/s, 0 = unlimited
|
||||||
RETRY_COUNT=3
|
RETRY_COUNT=3
|
||||||
SLEEP=60 # seconds between retries
|
SLEEP=60 # seconds between retries
|
||||||
|
|||||||
Reference in New Issue
Block a user