1. 离线安装Redis的必要性与场景分析
在企业的生产环境中,出于安全合规或网络隔离要求,经常需要在内网服务器上部署服务。Redis作为高性能的内存数据库,其离线安装需求尤为常见。上周我刚帮一家金融机构完成了Redis 7.4.0的离线部署,整个过程涉及多个技术要点值得分享。
离线安装与在线安装的核心差异在于依赖项的获取方式。在线安装时yum/apt会自动解决依赖关系,而离线环境需要手动准备所有依赖包。这对运维人员提出了更高要求——不仅要熟悉Redis本身,还要清楚其依赖树的结构。
2. 准备工作与依赖收集
2.1 基础环境确认
首先通过cat /etc/redhat-release确认系统版本(本例为CentOS 7.9)。不同Linux发行版的依赖包命名有差异,这一步至关重要。关键检查项包括:
- 系统架构:
uname -m(x86_64/aarch64) - GCC版本:
gcc --version(需≥4.9) - 系统内存:
free -h(建议≥2GB)
2.2 依赖包离线下载
在可联网的跳板机上执行:
bash复制# 创建依赖包目录
mkdir -p /opt/redis_deps
cd /opt/redis_deps
# 使用yumdownloader下载基础依赖
yum install -y yum-utils
yumdownloader --resolve \
gcc \
make \
tcl \
systemd-devel \
openssl-devel
这里特别说明几个关键依赖:
- tcl:Redis测试套件必需
- systemd-devel:系统服务集成
- openssl-devel:TLS加密支持
将下载的rpm包(约50MB)打包为redis_deps.tar.gz,通过U盘或内部文件服务器传输到目标机器。
3. 离线安装Redis 7.4.0
3.1 安装系统依赖
在目标服务器执行:
bash复制# 解压依赖包
tar -xzf redis_deps.tar.gz -C /tmp
cd /tmp
# 批量安装rpm包
rpm -Uvh --force --nodeps *.rpm
注意:
--nodeps参数仅在确定依赖完整时使用,否则可能导致安装失败
3.2 编译安装Redis
- 上传redis-7.4.0.tar.gz到/opt目录
- 执行编译安装:
bash复制tar -xzf redis-7.4.0.tar.gz
cd redis-7.4.0
# 关键编译参数说明
make BUILD_TLS=yes \
USE_SYSTEMD=yes \
CFLAGS="-O2 -march=native"
make install PREFIX=/usr/local/redis
编译参数详解:
BUILD_TLS=yes:启用SSL/TLS支持USE_SYSTEMD=yes:生成systemd服务文件CFLAGS优化:根据CPU架构优化性能
3.3 系统服务配置
创建systemd服务文件:
bash复制cat > /etc/systemd/system/redis.service <<EOF
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=notify
ExecStart=/usr/local/redis/bin/redis-server /etc/redis.conf
Restart=always
[Install]
WantedBy=multi-user.target
EOF
4. 配置优化与安全加固
4.1 关键配置调整
编辑/etc/redis.conf:
ini复制# 绑定内网IP
bind 10.0.0.100
# 内存限制
maxmemory 4gb
maxmemory-policy allkeys-lru
# 安全设置
requirepass YourStrongPassword
rename-command FLUSHDB ""
rename-command CONFIG ""
# 持久化配置
appendonly yes
appendfsync everysec
4.2 防火墙规则
bash复制firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --reload
5. 验证与测试
5.1 基础功能测试
bash复制# 启动服务
systemctl start redis
# 连接测试
/usr/local/redis/bin/redis-cli -a YourStrongPassword ping
5.2 基准性能测试
bash复制/usr/local/redis/bin/redis-benchmark \
-h 127.0.0.1 \
-p 6379 \
-a YourStrongPassword \
-t set,get \
-n 100000 \
-c 50
6. 常见问题解决方案
6.1 编译错误排查
问题1:jemalloc/jemalloc.h: No such file
bash复制make MALLOC=libc
问题2:TLS支持失败
bash复制yumdownloader --resolve openssl-devel
rpm -ivh openssl-devel-*.rpm
make distclean && make BUILD_TLS=yes
6.2 运行时报错处理
问题:Failed listening to port 6379 (bind)
bash复制# 检查端口占用
netstat -tulnp | grep 6379
# 或修改redis.conf端口
port 6380
7. 维护建议
- 日志轮转:配置logrotate防止日志膨胀
- 监控方案:
- 使用
redis-cli info获取运行状态 - 配置Prometheus Redis Exporter
- 使用
- 备份策略:
bash复制# RDB快照备份 cp /var/lib/redis/dump.rdb /backup/redis_$(date +%F).rdb # AOF日志备份 cp /var/lib/redis/appendonly.aof /backup/
在实际部署中,我发现Redis 7.4.0对TLS 1.3的支持有明显提升,但需要OpenSSL 1.1.1以上版本。如果遇到性能问题,可以尝试调整io-threads参数(需要CPU核心数支持)。