CentOS 7.5源码编译安装Redis 6.0.1完整指南
2026/9/16 9:06:23 网站建设 项目流程

1. 项目概述

Redis作为当前最流行的内存数据库之一,在缓存、消息队列、会话存储等场景中发挥着重要作用。虽然大多数Linux发行版都提供了Redis的预编译包,但在生产环境中,编译安装仍然是更推荐的方式。通过源码编译,我们可以获得以下优势:

  • 获得最新版本特性(官方仓库的Redis版本往往较旧)
  • 针对特定硬件进行优化编译
  • 灵活定制安装路径和配置
  • 避免系统包管理器的依赖冲突

本教程将详细演示在CentOS 7.5/RHEL 7.x系统上从源码编译安装Redis 6.0.1的全过程。这个版本发布于2019年,引入了诸多重要特性如ACL访问控制、客户端缓存、线程I/O等,至今仍被广泛使用。

2. 环境准备

2.1 系统要求确认

在开始前,请确保您的系统满足以下要求:

  • CentOS 7.5/RHEL 7.x(内核版本3.10.0-862及以上)
  • 至少1GB可用内存(编译过程需要约600MB)
  • 2GB以上磁盘空间
  • GCC 4.9或更高版本

可以通过以下命令检查系统信息:

cat /etc/redhat-release # 查看系统版本 uname -r # 查看内核版本 free -h # 查看内存 df -h # 查看磁盘空间 gcc --version # 查看GCC版本

2.2 安装编译依赖

Redis是使用ANSI C编写的,因此需要安装GCC编译器及相关工具链:

yum install -y gcc gcc-c++ make tcl

注意:如果是从最小化安装的系统开始,可能还需要安装基本开发工具组:

yum groupinstall -y "Development Tools"

tcl包是用于运行Redis测试套件的,虽然不是必须的,但强烈建议安装以便后续验证编译结果。

3. 源码获取与编译

3.1 下载Redis源码

建议从Redis官方或国内镜像站下载源码包:

wget http://download.redis.io/releases/redis-6.0.1.tar.gz

或者使用清华大学镜像站:

wget https://mirrors.tuna.tsinghua.edu.cn/redis/redis-6.0.1.tar.gz

下载完成后验证文件完整性:

sha1sum redis-6.0.1.tar.gz # 官方SHA1校验值:b8756e430479edc8dfb7d6d6cd3a402323eb437a

3.2 解压与编译

解压源码包并进入目录:

tar xzf redis-6.0.1.tar.gz cd redis-6.0.1

开始编译:

make

编译过程通常需要5-15分钟,取决于系统性能。如果遇到编译错误,常见原因和解决方法包括:

  1. GCC版本过低

    # 安装devtoolset-7(包含GCC 7.x) yum install -y centos-release-scl yum install -y devtoolset-7 # 临时启用新版本GCC scl enable devtoolset-7 bash
  2. 内存不足

    • 添加swap空间
    • 使用make MALLOC=libc禁用jemalloc
  3. 依赖缺失

    • 确保安装了所有必需的开发包

3.3 验证编译结果

编译完成后,建议运行测试套件:

make test

测试过程可能需要30分钟以上。如果看到\o/ All tests passed without errors!则表示一切正常。

4. 安装与配置

4.1 安装Redis

指定安装目录(建议使用/usr/local/redis):

make PREFIX=/usr/local/redis install

这会将Redis可执行文件安装到/usr/local/redis/bin目录下。

4.2 创建配置文件目录

mkdir /usr/local/redis/etc cp redis.conf /usr/local/redis/etc/

4.3 基本配置调整

编辑配置文件:

vim /usr/local/redis/etc/redis.conf

建议修改以下关键参数:

daemonize yes # 以守护进程方式运行 bind 0.0.0.0 # 监听所有网络接口(生产环境应限制) protected-mode no # 关闭保护模式(如有防火墙可不关) requirepass yourpassword # 设置访问密码 maxmemory 2gb # 根据系统内存调整 maxmemory-policy allkeys-lru # 内存满时的淘汰策略 dir /var/lib/redis # 持久化文件存储目录

重要安全提示:如果Redis需要暴露在公网,必须设置强密码并考虑启用ACL!

4.4 创建数据目录

mkdir -p /var/lib/redis chown -R redis:redis /var/lib/redis

5. 系统集成

5.1 创建Redis用户

为安全起见,应使用专用用户运行Redis:

groupadd redis useradd -r -g redis -s /bin/false redis chown -R redis:redis /usr/local/redis

5.2 配置环境变量

将Redis添加到系统PATH:

echo 'export PATH=$PATH:/usr/local/redis/bin' > /etc/profile.d/redis.sh source /etc/profile.d/redis.sh

5.3 创建Systemd服务

创建服务文件/etc/systemd/system/redis.service

[Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf ExecStop=/usr/local/redis/bin/redis-cli shutdown Restart=always Type=notify [Install] WantedBy=multi-user.target

启用并启动服务:

systemctl daemon-reload systemctl enable redis systemctl start redis

检查服务状态:

systemctl status redis

6. 验证与测试

6.1 基本功能测试

redis-cli 127.0.0.1:6379> AUTH yourpassword OK 127.0.0.1:6379> SET test "Hello Redis" OK 127.0.0.1:6379> GET test "Hello Redis" 127.0.0.1:6379> INFO Server # 查看服务器信息

6.2 性能测试

redis-benchmark -h 127.0.0.1 -a yourpassword -q -n 100000

7. 高级配置与优化

7.1 内存优化

redis.conf中调整以下参数:

maxmemory 4gb # 根据可用内存设置 maxmemory-policy volatile-lru # 只淘汰有过期时间的key hash-max-ziplist-entries 512 # 小哈希使用更少内存

7.2 持久化配置

根据需求选择RDB或AOF:

# RDB快照 save 900 1 # 15分钟内至少1个key变化 save 300 10 # 5分钟内至少10个key变化 # AOF日志 appendonly yes # 启用AOF appendfsync everysec # 每秒同步

7.3 安全加固

  1. 启用ACL(Redis 6+):

    redis-cli 127.0.0.1:6379> ACL SETUSER admin on >adminpassword ~* +@all
  2. 限制危险命令:

    rename-command FLUSHDB "" rename-command CONFIG ""

8. 常见问题解决

8.1 启动失败排查

  1. 检查日志

    journalctl -u redis -n 50 --no-pager
  2. 常见错误

    • 地址已在使用:检查是否有其他Redis实例运行
    • 权限问题:确保redis用户有访问权限
    • 配置错误:使用redis-server --test-memory 256测试内存

8.2 性能问题

  1. 延迟高

    • 检查redis-cli --latency监控延迟
    • 避免使用KEYS *等阻塞命令
  2. 内存不足

    • 调整maxmemory和淘汰策略
    • 考虑使用Redis集群

8.3 升级注意事项

  1. 小版本升级:

    # 停止旧实例 systemctl stop redis # 编译安装新版本 make && make install # 重启服务 systemctl start redis
  2. 大版本升级:

    • 先测试数据兼容性
    • 考虑使用复制方式迁移

9. 维护与管理

9.1 日常监控

  1. 使用INFO命令:

    redis-cli -a yourpassword INFO
  2. 关键指标监控:

    • 内存使用率
    • 连接数
    • 命中率

9.2 备份策略

  1. RDB快照备份:

    cp /var/lib/redis/dump.rdb /backup/redis-$(date +%F).rdb
  2. AOF备份:

    redis-cli -a yourpassword BGREWRITEAOF

9.3 日志轮转

配置logrotate:

cat > /etc/logrotate.d/redis <<EOF /var/log/redis.log { daily rotate 30 compress delaycompress missingok notifempty create 644 redis redis } EOF

10. 扩展与进阶

10.1 启用TLS加密

  1. 生成证书:

    openssl genrsa -out redis.key 2048 openssl req -new -key redis.key -out redis.csr openssl x509 -req -days 365 -in redis.csr -signkey redis.key -out redis.crt
  2. 配置Redis:

    tls-port 6379 tls-cert-file /path/to/redis.crt tls-key-file /path/to/redis.key

10.2 构建Redis集群

  1. 准备多个节点
  2. 使用redis-cli创建集群:
    redis-cli --cluster create \ 192.168.1.1:6379 \ 192.168.1.2:6379 \ 192.168.1.3:6379 \ --cluster-replicas 1

10.3 使用Redis模块

  1. 下载编译模块:

    git clone https://github.com/RedisJSON/RedisJSON.git cd RedisJSON make
  2. 加载模块:

    loadmodule /path/to/rejson.so

11. 性能调优实战

11.1 内核参数优化

编辑/etc/sysctl.conf

vm.overcommit_memory = 1 net.core.somaxconn = 65535

应用设置:

sysctl -p

11.2 Redis专用优化

  1. 透明大页禁用:

    echo never > /sys/kernel/mm/transparent_hugepage/enabled
  2. 内存分配策略:

    # 在redis.conf中 maxmemory-policy allkeys-lru

11.3 网络优化

  1. 调整TCP参数:

    # 在redis.conf中 tcp-backlog 65535 timeout 0
  2. 使用Unix域套接字:

    unixsocket /tmp/redis.sock unixsocketperm 770

12. 监控与告警

12.1 Prometheus监控

  1. 安装redis_exporter:

    wget https://github.com/oliver006/redis_exporter/releases/download/v1.45.0/redis_exporter-v1.45.0.linux-amd64.tar.gz tar xzf redis_exporter*.tar.gz ./redis_exporter &
  2. Prometheus配置:

    scrape_configs: - job_name: 'redis' static_configs: - targets: ['localhost:9121']

12.2 关键告警规则

示例告警规则:

groups: - name: redis rules: - alert: RedisDown expr: up{job="redis"} == 0 for: 1m - alert: RedisOutOfMemory expr: redis_memory_used_bytes / redis_memory_max_bytes > 0.9 for: 5m

13. 安全加固进阶

13.1 网络层防护

  1. 防火墙规则:

    firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="6379" protocol="tcp" accept' firewall-cmd --reload
  2. 绑定特定IP:

    bind 192.168.1.100

13.2 命令过滤

禁用危险命令:

rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command CONFIG ""

13.3 定期审计

  1. 检查异常连接:

    redis-cli -a yourpassword CLIENT LIST
  2. 监控慢查询:

    slowlog-log-slower-than 10000 # 10毫秒 slowlog-max-len 128

14. 备份与恢复策略

14.1 自动化备份方案

创建备份脚本/usr/local/bin/redis-backup.sh

#!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR="/backup/redis" mkdir -p $BACKUP_DIR redis-cli -a yourpassword SAVE cp /var/lib/redis/dump.rdb $BACKUP_DIR/dump-$DATE.rdb find $BACKUP_DIR -name "*.rdb" -mtime +30 -delete

添加到cron:

0 2 * * * /usr/local/bin/redis-backup.sh

14.2 灾难恢复演练

  1. 模拟故障:

    systemctl stop redis rm /var/lib/redis/dump.rdb
  2. 恢复过程:

    cp /backup/redis/dump-latest.rdb /var/lib/redis/dump.rdb chown redis:redis /var/lib/redis/dump.rdb systemctl start redis

15. 性能基准测试

15.1 定制化测试

  1. 模拟生产负载:

    redis-benchmark -h 127.0.0.1 -a yourpassword \ -t set,get -n 1000000 -c 100 -d 256
  2. 管道测试:

    redis-benchmark -h 127.0.0.1 -a yourpassword \ -t set,get -n 1000000 -P 16

15.2 结果分析

关键指标解读:

  • QPS:每秒查询数,反映吞吐量
  • 延迟分布:P50/P95/P99延迟值
  • 错误率:请求失败比例

16. 容器化部署方案

16.1 Docker部署

创建Dockerfile:

FROM centos:7 RUN yum install -y gcc make tcl COPY redis-6.0.1.tar.gz . RUN tar xzf redis-6.0.1.tar.gz && \ cd redis-6.0.1 && \ make && \ make PREFIX=/usr/local/redis install COPY redis.conf /usr/local/redis/etc/ EXPOSE 6379 CMD ["/usr/local/redis/bin/redis-server", "/usr/local/redis/etc/redis.conf"]

构建并运行:

docker build -t redis-6.0.1 . docker run -d -p 6379:6379 --name myredis redis-6.0.1

16.2 Kubernetes部署

示例StatefulSet配置:

apiVersion: apps/v1 kind: StatefulSet metadata: name: redis spec: serviceName: redis replicas: 3 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - name: redis image: redis:6.0.1 ports: - containerPort: 6379 volumeMounts: - name: redis-data mountPath: /data volumeClaimTemplates: - metadata: name: redis-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi

17. 多实例部署模式

17.1 主从复制

配置从节点:

# 在从节点的redis.conf中 replicaof 192.168.1.100 6379 masterauth yourpassword

验证复制状态:

redis-cli -a yourpassword INFO replication

17.2 哨兵模式

哨兵配置示例sentinel.conf

sentinel monitor mymaster 192.168.1.100 6379 2 sentinel auth-pass mymaster yourpassword sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000

启动哨兵:

redis-sentinel /path/to/sentinel.conf

18. 客户端连接管理

18.1 连接池配置

Java客户端示例(Jedis):

JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(128); poolConfig.setMaxIdle(32); poolConfig.setMinIdle(8); JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379, 2000, "yourpassword");

18.2 连接限制

Redis服务端配置:

maxclients 10000 timeout 300

19. 数据迁移策略

19.1 RDB文件迁移

  1. 在源Redis执行:

    redis-cli -a yourpassword SAVE
  2. 复制RDB文件到目标服务器:

    scp /var/lib/redis/dump.rdb user@newserver:/var/lib/redis/
  3. 确保文件权限正确后启动目标Redis

19.2 在线迁移工具

使用redis-cli:

redis-cli -h source_host -a source_password --rdb dump.rdb redis-cli -h target_host -a target_password --pipe < dump.rdb

20. 版本升级指南

20.1 滚动升级步骤

  1. 升级从节点
  2. 故障转移
  3. 升级原主节点
  4. 恢复原主节点

20.2 兼容性检查

  1. 检查版本变更日志
  2. 测试关键命令
  3. 验证持久化文件兼容性

21. 生产环境检查清单

21.1 部署前检查

  • [ ] 内存配置是否合理
  • [ ] 持久化策略是否配置
  • [ ] 监控系统是否就绪
  • [ ] 备份方案是否测试

21.2 运行时检查

  • [ ] 内存使用是否正常
  • [ ] 是否有慢查询
  • [ ] 连接数是否合理
  • [ ] 复制延迟是否监控

22. 性能调优案例

22.1 高并发场景优化

  1. 现象:QPS达到瓶颈
  2. 解决方案:
    • 启用管道
    • 增加连接池大小
    • 优化数据结构

22.2 大key问题处理

  1. 识别大key:

    redis-cli -a yourpassword --bigkeys
  2. 解决方案:

    • 拆分大key
    • 使用SCAN代替KEYS
    • 调整数据结构

23. 故障处理手册

23.1 常见故障场景

  1. 内存溢出

    • 检查maxmemory配置
    • 调整淘汰策略
  2. 主从不同步

    • 检查网络连接
    • 验证密码配置

23.2 故障恢复流程

  1. 收集日志和指标
  2. 确定影响范围
  3. 实施恢复方案
  4. 验证数据完整性

24. 资源规划建议

24.1 硬件选型

  1. 内存:数据集大小的1.5倍
  2. CPU:4核以上
  3. 磁盘:SSD优先

24.2 容量规划

  1. 监控内存增长趋势
  2. 预留30%缓冲空间
  3. 考虑分片方案

25. 最佳实践总结

  1. 始终使用密码认证
  2. 定期备份持久化文件
  3. 监控关键性能指标
  4. 保持版本更新
  5. 遵循最小权限原则

在实际生产环境中,我发现以下几个经验特别有价值:

  • 编译时使用make MALLOC=libc可以避免jemalloc在某些环境下的问题
  • 设置vm.overcommit_memory=1能防止Redis在内存不足时被OOM killer终止
  • 定期执行redis-cli --bigkeys分析有助于发现潜在的性能瓶颈

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询