I think there may be a small terminology mismatch here.
When you say “one Redis per Discourse server”, I agree if by server we mean one logical Discourse site.
In my case:
- HAProxy is only being used for failover / fronting
- There is no multisite configuration
- There is only one Discourse site (single hostname, single Postgres DB)
- There just happen to be two app containers capable of serving that same site
So this is closer to a multi-web / HA layout, not two independent Discourse installs.
In that setup, sharing Redis is expected and required - otherwise you lose:
- shared sessions
- MessageBus delivery
- rate limiting
- background job coordination
This is the same pattern as running multiple web_only containers or horizontally scaling web workers:
multiple app containers → one Postgres + one Redis.
Where Redis must not be shared is when there are two separate Discourse sites (different hostnames / databases). In that case, each site needs its own Redis DB (or instance) to avoid key collisions.
So I think we’re aligned conceptually - it’s just:
one Redis per Discourse site
not one Redis per individual app container
Happy to clarify further if I’ve misunderstood anything - just wanted to explain the topology more clearly