Redis 生产环境部署与持久化配置:从安装到哨兵模式


阿里云特惠 - 新用户专享

Redis 生产环境部署与持久化配置:从安装到哨兵模式

Redis 是互联网应用最常用的缓存和数据结构服务。然而很多开发者用 Redis 只会 GET/SET,对其持久化机制、内存管理、高可用方案了解甚少。本文从原理到实战,帮你在生产环境中正确部署和配置 Redis。

一、Redis 安装(最新稳定版)

# Ubuntu/Debian(推荐使用官方仓库)
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt update && sudo apt install redis

# CentOS / Rocky Linux
sudo yum install redis

# 验证
redis-cli ping  # 返回 PONG 说明安装成功
redis-cli INFO server | grep redis_version

二、生产环境核心配置(redis.conf)

# 1. 绑定地址(生产环境切勿绑定 0.0.0.0!)
bind 127.0.0.1 192.168.1.10  # 只监听本机和内网 IP

# 2. 设置密码(必须!)
requirepass YourStrongPassword@2026

# 3. 内存限制与淘汰策略
maxmemory 2gb
# 淘汰策略选择(缓存场景推荐 allkeys-lru):
# noeviction:内存满了返回错误(适合数据库场景)
# allkeys-lru:LRU 淘汰所有 key(适合缓存场景)
# volatile-lru:只 LRU 淘汰有过期时间的 key
maxmemory-policy allkeys-lru

# 4. 慢查询日志(排查性能问题)
slowlog-log-slower-than 10000  # 超过 10ms 的命令记录到慢日志
slowlog-max-len 128

# 5. 关闭危险命令(防止误操作或攻击)
rename-command FLUSHALL ""      # 禁用 FLUSHALL
rename-command DEBUG ""         # 禁用 DEBUG
rename-command CONFIG "CONFIG_SECRET_NAME"  # 重命名 CONFIG

三、持久化机制对比

RDB(快照持久化)

在指定条件下,将内存数据 fork 子进程写入 .rdb 文件:

# redis.conf 中的 RDB 触发条件
save 900 1     # 900 秒内至少 1 次写操作 → 触发保存
save 300 10    # 300 秒内至少 10 次写操作
save 60 10000  # 60 秒内至少 10000 次写操作
save ""        # 禁用 RDB

dbfilename dump.rdb
dir /var/lib/redis

优点:文件小、启动快、适合定期备份;缺点:两次快照之间的数据可能丢失(最多丢失几分钟数据)。

AOF(追加日志持久化)

将每条写命令追加到 .aof 文件,宕机后重放日志恢复数据:

appendonly yes
appendfilename "appendonly.aof"
# 刷盘策略:
# always:每次写命令都刷盘 → 最安全,性能最差
# everysec(推荐):每秒刷盘,最多丢1秒数据
# no:由 OS 决定何时刷盘 → 性能最好,可能丢更多数据
appendfsync everysec

# AOF 重写:定期压缩 AOF 文件
auto-aof-rewrite-percentage 100  # 文件增长 100% 时触发重写
auto-aof-rewrite-min-size 64mb  # 文件至少 64MB 才触发重写

混合持久化(Redis 4.0+,推荐)

aof-use-rdb-preamble yes  # AOF 文件头包含 RDB 快照,后面跟增量 AOF
# 兼顾 RDB 的快速加载 + AOF 的数据完整性

四、Redis 哨兵模式(Sentinel)高可用

哨兵模式用于单主节点的高可用:

# 架构:1主 + 2从 + 3哨兵(哨兵至少3个,奇数,保证投票决策)
Master(192.168.1.10:6379)
 ├── Slave1(192.168.1.11:6379)
 └── Slave2(192.168.1.12:6379)
Sentinel1(192.168.1.10:26379)
Sentinel2(192.168.1.11:26379)
Sentinel3(192.168.1.12:26379)
# sentinel.conf(三台机器配置相同)
port 26379
sentinel monitor mymaster 192.168.1.10 6379 2  # 需要 2 个哨兵同意才故障转移
sentinel auth-pass mymaster YourStrongPassword@2026
sentinel down-after-milliseconds mymaster 5000   # 5秒无响应判为下线
sentinel failover-timeout mymaster 60000          # 60秒内完成故障转移

# 启动哨兵
redis-sentinel /etc/redis/sentinel.conf

五、Redis 内存分析与优化

# 查看内存使用详情
redis-cli INFO memory

# 分析大 key(危险操作,生产环境用 --bigkeys 替代)
redis-cli --bigkeys   # 扫描各数据类型最大 key,不阻塞

# 查看 key 数量和过期情况
redis-cli INFO keyspace

# 慢查询日志
redis-cli SLOWLOG GET 10  # 查看最近10条慢查询
redis-cli SLOWLOG RESET   # 清空慢查询日志

六、Redis 安全加固

  • 绑定内网 IP,不对公网暴露 6379 端口
  • 设置强密码(requirepass)
  • 禁用/重命名危险命令(FLUSHALL、CONFIG、DEBUG)
  • 防火墙只允许应用服务器 IP 访问 Redis
  • Redis 6.0+ 支持 ACL 多用户权限控制,生产环境推荐启用

总结

生产环境部署 Redis,安全配置(绑定 IP + 密码 + 命令限制)是基础,混合持久化是数据安全的最佳选择,哨兵模式是单机→高可用的第一步。了解内存淘汰策略,根据业务选择缓存还是数据库模式,是用好 Redis 的关键。

发表评论