*Redis 生产环境安装指南
原文:https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/ 翻译整理:Kimi
本文介绍如何在生产环境中正确安装和配置 Redis,确保服务稳定、安全、可维护。
*生产环境安装方式选择
| 场景 | 推荐方式 | 说明 |
|---|---|---|
| Ubuntu/Debian 服务器 | APT 包管理 | 官方仓库,自动更新,systemd 集成 |
| Rocky/AlmaLinux 服务器 | RPM 包管理 | 官方仓库,自动更新,systemd 集成 |
| 需要最新功能或自定义编译 | 源码编译 | 最大灵活性,需手动维护 |
| 容器化部署 | Docker | 隔离性好,适合微服务架构 |
| 快速测试/开发 | Docker 或包管理 | 快速启动,易于清理 |
*生产环境安装步骤(以 Ubuntu 为例)
*1. 系统准备
# 更新系统
sudo apt-get update && sudo apt-get upgrade -y
# 安装必要工具
sudo apt-get install -y curl gnupg lsb-release
# 配置时区
sudo timedatectl set-timezone Asia/Shanghai
# 配置 NTP
sudo apt-get install -y chrony
sudo systemctl enable chrony
sudo systemctl start chrony
*2. 安装 Redis
# 添加官方仓库
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-get update
sudo apt-get install -y redis
*3. 创建专用用户
sudo useradd -r -s /bin/false -M redis
sudo usermod -aG redis redis
*4. 创建目录结构
sudo mkdir -p /var/lib/redis
sudo mkdir -p /var/log/redis
sudo mkdir -p /var/run/redis
sudo mkdir -p /etc/redis
sudo chown -R redis:redis /var/lib/redis
sudo chown -R redis:redis /var/log/redis
sudo chown -R redis:redis /var/run/redis
sudo chmod 750 /var/lib/redis
sudo chmod 750 /var/log/redis
*5. 配置 Redis
编辑 /etc/redis/redis.conf:
# 基础配置
bind 127.0.0.1 ::1 # 仅监听本地(如需远程访问,改为内网IP)
port 6379
protected-mode yes
# 进程管理
daemonize no # systemd 管理时设为 no
supervised systemd
pidfile /var/run/redis/redis-server.pid
# 日志
loglevel notice
logfile /var/log/redis/redis-server.log
# 数据目录
dir /var/lib/redis
# 持久化 - RDB
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
# 持久化 - AOF(推荐生产环境启用)
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 内存管理
maxmemory 2gb
maxmemory-policy allkeys-lru
# 安全
requirepass YourStrongPassword123!
# 或使用 ACL(Redis 6+)
# aclfile /etc/redis/users.acl
# 客户端连接
maxclients 10000
timeout 300
tcp-keepalive 300
# 慢查询日志
slowlog-log-slower-than 10000
slowlog-max-len 128
# 内核优化提示(需手动配置系统)
# vm.overcommit_memory = 1
# transparent_hugepage = never
*6. 配置 systemd 服务
创建 /etc/systemd/system/redis.service:
[Unit]
Description=Redis In-Memory Data Store
After=network.target
Documentation=http://redis.io/documentation, man:redis-server(1)
[Service]
Type=notify
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf --supervised systemd --daemonize no
ExecStop=/usr/bin/redis-cli -a YourStrongPassword123! shutdown
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always
RestartSec=5
User=redis
Group=redis
# 资源限制
LimitNOFILE=65536
LimitNPROC=4096
# 安全加固
NoNewPrivileges=true
ProtectSystem=true
ProtectHome=true
ReadWritePaths=/var/lib/redis /var/log/redis /var/run/redis
[Install]
WantedBy=multi-user.target
*7. 系统内核优化
# 编辑 /etc/sysctl.conf
sudo tee -a /etc/sysctl.conf <<EOF
# Redis 优化
vm.overcommit_memory = 1
vm.swappiness = 1
net.core.somaxconn = 65535
EOF
sudo sysctl -p
# 禁用透明大页
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# 持久化透明大页设置
cat <<EOF | sudo tee /etc/rc.local
#!/bin/bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
sudo chmod +x /etc/rc.local
*8. 防火墙配置
# UFW (Ubuntu)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow from 10.0.0.0/8 to any port 6379 # 仅允许内网访问
sudo ufw enable
# firewalld (Rocky/AlmaLinux)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="6379" accept'
sudo firewall-cmd --reload
*9. 启动服务
sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis
sudo systemctl status redis
*10. 验证安装
# 测试连接
redis-cli -a YourStrongPassword123! ping
# 应返回 PONG
# 查看服务器信息
redis-cli -a YourStrongPassword123! info server
# 检查持久化
redis-cli -a YourStrongPassword123! info persistence
# 检查内存
redis-cli -a YourStrongPassword123! info memory
# 测试保存
redis-cli -a YourStrongPassword123! save
ls -lh /var/lib/redis/dump.rdb
*安全配置清单
- 设置强密码(
requirepass或 ACL) - 限制绑定地址(
bind) - 启用保护模式(
protected-mode yes) - 配置防火墙,仅允许可信 IP 访问
- 禁用危险命令或重命名(
rename-command) - 启用 TLS(如需加密传输)
- 配置日志审计
- 定期更换密码
*监控配置
*启用 Redis 监控
# 延迟监控
redis-cli -a YourStrongPassword123! config set latency-monitor-threshold 100
# 启用统计
redis-cli -a YourStrongPassword123! config set activedefrag yes
*集成外部监控
- Prometheus + Grafana:使用 redis_exporter
- Zabbix:使用 Zabbix Redis 模板
- Datadog/NewRelic:使用官方集成
- 自建脚本:定期执行
redis-cli info并上报
*备份策略
*自动备份脚本
创建 /usr/local/bin/redis-backup.sh:
#!/bin/bash
BACKUP_DIR="/backup/redis"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# 触发 RDB 保存
redis-cli -a YourStrongPassword123! SAVE
# 复制 RDB 文件
cp /var/lib/redis/dump.rdb $BACKUP_DIR/dump.rdb.$DATE
# 压缩
gzip $BACKUP_DIR/dump.rdb.$DATE
# 保留最近 7 天的备份
find $BACKUP_DIR -name "dump.rdb.*" -mtime +7 -delete
# 可选:上传到远程存储
# aws s3 cp $BACKUP_DIR/dump.rdb.$DATE.gz s3://your-bucket/redis-backups/
sudo chmod +x /usr/local/bin/redis-backup.sh
*配置 cron 定时任务
# 每小时备份
0 * * * * /usr/local/bin/redis-backup.sh >> /var/log/redis-backup.log 2>&1
# 每天全量备份到远程
0 2 * * * /usr/local/bin/redis-backup-remote.sh
*高可用部署
生产环境建议部署 Redis Sentinel 或 Redis Cluster:
- Sentinel:适合读写分离、故障自动转移场景(1 主 + N 从 + 3 Sentinel)
- Cluster:适合数据分片、水平扩展场景(至少 3 主 + 3 从)
详细配置请参考 Redis Sentinel 高可用指南 和 Redis 集群指南。
*日志轮转
创建 /etc/logrotate.d/redis:
/var/log/redis/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 redis redis
sharedscripts
postrotate
/bin/kill -SIGUSR1 $(cat /var/run/redis/redis-server.pid 2>/dev/null) 2>/dev/null || true
endscript
}
*性能基线
部署完成后,建立性能基线:
# 基准测试
redis-benchmark -h 127.0.0.1 -a YourStrongPassword123! -t set,get -n 100000 -q
# 记录基线数据
redis-cli -a YourStrongPassword123! info stats > /var/log/redis/baseline-$(date +%Y%m%d).txt