集群、安全与运维
主从复制、Cluster、监控与 Docker 部署。
集群、安全与运维:从单机走向生产
这一课你将能做到
- 说清楚主从复制、哨兵、Cluster 三种高可用/扩展方案的分工
- 完成密码与 ACL 配置、内存淘汰策略选择、慢查询排查
- 看懂
INFO、SLOWLOG等运维输出,建立日常巡检清单
为什么要学
学习阶段一个 redis-server 裸跑足够,但生产环境有两道绕不过去的坎:
- 可用性:Redis 宕了,判题限流、排行榜、验证码全挂,网站半残。一台机器不够,需要有「备胎」自动接管。
- 容量与安全:数据多到单机内存装不下要能横向扩展;实例裸奔在网络上会被扫到并勒索;内存写满后服务直接拒绝写入。
本课不要求你亲手搭一套完整集群(那需要 6+ 个节点),但你必须理解每种方案解决什么问题、客户端会遇到什么现象,否则进公司第一天就会懵。
先建立图像
主从复制(Replication)
主节点(读写) ──同步──> 从节点(只读副本) 主挂了?要人工/哨兵介入
哨兵(Sentinel)
主 + 从 + 若干哨兵进程:哨兵监控并投票,主挂自动提升一个从为主
集群(Cluster)
多个主节点各管一部分槽(0-16383),每个主再有自己的从
解决:容量分片 + 分片内自动故障转移
跟着做
步骤 1:理解并(可选)演示主从复制
一个节点成为另一个节点的从库:
127.0.0.1:6380> REPLICAOF 127.0.0.1 6379
OK
127.0.0.1:6380> INFO replication
role:slave
master_link_status:up
在主节点写入,从节点立刻能读到;默认从节点只读。断开复制用 REPLICAOF NO ONE。Redis 7 的复制用 psync 增量同步,断线重连只补缺失部分。
步骤 2:哨兵做了什么
哨兵是独立进程(至少 3 个一起部署才可靠),它做三件事:监控(持续 PING 主从)、通知、自动故障转移——主节点失联达到阈值,哨兵投票达成多数后,选一个从节点提升为主,并通知客户端新地址。你不需要记全部配置,但要记住两个数字现象:down-after-milliseconds(主观下线时间)和「多数哨兵同意」(客观下线)。
步骤 3:Cluster 的槽与重定向
Cluster 把 16384 个哈希槽分给各主节点,键用 CRC16(key) mod 16384 决定落在哪个槽:
127.0.0.1:7000> SET rank:alltime 100
(error) MOVED 3999 127.0.0.1:7001
MOVED 不是错误,是「这个键归另一个节点管,以后也归它」,成熟客户端会自动跟随;ASK 表示迁移中的临时重定向,只本次跟随。查看分片信息(Redis 7 推荐 CLUSTER SHARDS):
127.0.0.1:7000> CLUSTER SHARDS
127.0.0.1:7000> CLUSTER INFO
多键事务/ Lua 在集群里要求相关键同槽,用 hash tag 强制:rank:{course:7}:weekly、rank:{course:7}:monthly 中只有花括号内部分参与槽计算,两键必同槽。
步骤 4:设置密码与 ACL
最简单的密码方式:
127.0.0.1:6379> CONFIG SET requirepass "S3cret-2026"
OK
之后客户端先 AUTH S3cret-2026 才能操作。Redis 7 更推荐 ACL 多账号,按最小权限授权:
127.0.0.1:6379> ACL SETUSER judgeapp on >app-pass ~ratelimit:* ~rank:* +get +set +incr +zadd +zrange
OK
127.0.0.1:6379> ACL WHOAMI
"default"
127.0.0.1:6379> ACL LIST