redis-cli INFO replication
redis-cli INFO replication
redis-cli INFO replication
role:master
connected_slaves:0
master_failover_state:no-failover
role:master
connected_slaves:0
master_failover_state:no-failover
role:master
connected_slaves:0
master_failover_state:no-failover
redis-cli INFO memory
redis-cli INFO memory
redis-cli INFO memory
maxmemory:0
maxmemory_policy:noeviction
maxmemory:0
maxmemory_policy:noeviction
maxmemory:0
maxmemory_policy:noeviction
maxmemory 2gb
maxmemory-policy allkeys-lru
maxmemory 2gb
maxmemory-policy allkeys-lru
maxmemory 2gb
maxmemory-policy allkeys-lru
rename-command REPLICAOF ""
rename-command SLAVEOF ""
rename-command REPLICAOF ""
rename-command SLAVEOF ""
rename-command REPLICAOF ""
rename-command SLAVEOF ""
redis-cli INFO replication
redis-cli INFO stats
redis-cli CONFIG GET replica-read-only
docker logs <redis-container-name> --tail 200
redis-cli INFO replication
redis-cli INFO stats
redis-cli CONFIG GET replica-read-only
docker logs <redis-container-name> --tail 200
redis-cli INFO replication
redis-cli INFO stats
redis-cli CONFIG GET replica-read-only
docker logs <redis-container-name> --tail 200 - Hosting: A single Google Cloud Platform (GCP) VM (t2d-standard-1 with Debian 12, 1 vCPU, 4 GB RAM).
- Deployment: Redis running inside a Docker container.
- Topology: A single Redis node. No Redis Cluster. No Sentinel. No intentional replicas. - Redis Cluster & Sentinel Failovers: I wondered if an automated failover had demoted our primary node. However, since we weren't running Cluster or Sentinel mode, there was no orchestration tool present to trigger a failover or slot migration.
- Redlock / Distributed Lock Split-Brain: While distributed locks can cause chaos, they don't change a server's replication role.
- The "Read" Clue: If Redis had truly become a standard replica, reads should still have worked. The fact that reads and writes both failed suggested this wasn't just a simple case of a node functioning as a healthy replica. - used_memory_human: 1.60M
- used_memory_rss_human: 15.85M
- total_system_memory_human: 3.83G - Accidental REPLICAOF Execution: A rogue script, automation, or network blip might have accidentally sent a REPLICAOF host port command, temporarily turning the node into a replica.
- Stale Node.js Client Connections: Our Node.js backend and Hocuspocus websocket server maintain long-lived TCP connections. If the network dropped or the Docker container glitched, the client connection pool might have ended up in a stale state, misinterpreting the connection status.
- Docker/Network Instability: Temporary network partitions or disk IO blocks (during AOF/RDB saves) might have forced Redis into a protective mode that the application clients misinterpreted.