公司动态

CentOS 7/8 源码编译安装 Redis 7.2.4 与 Systemd 服务配置实战

📅 2026/8/5 10:59:06
CentOS 7/8 源码编译安装 Redis 7.2.4 与 Systemd 服务配置实战
1. 项目概述为什么要在CentOS上部署Redis如果你是一名后端开发者、运维工程师或者正在搭建自己的应用服务那么“数据缓存”和“会话存储”这两个词对你来说一定不陌生。在众多缓存解决方案中Redis以其惊人的性能、丰富的数据结构和出色的稳定性成为了事实上的标准选择。无论是电商秒杀场景下的库存扣减还是社交应用里的最新动态推送Redis都扮演着至关重要的角色。而CentOS作为企业级Linux发行版的常青树以其稳定和长生命周期支持是生产环境部署的可靠基石。将Redis部署在CentOS上是一个经典且高频的组合。这个项目标题“CentOS安装Redis及redis启动与关闭、配置详细”直指一个非常具体且刚需的场景在一台全新的或已有的CentOS服务器上从零开始完整地部署、配置并管理一个Redis服务。它解决的不仅仅是“安装”这个动作更涵盖了后续的日常运维操作启动、关闭和关键的个性化配置确保Redis服务能够安全、稳定、高效地运行起来真正为你的应用提供支撑。无论你是刚接触Linux的新手还是需要快速为项目搭建环境的资深工程师这篇内容都将提供一个清晰、可复现的路径。2. 核心思路与方案选型源码编译 vs 包管理器在CentOS上安装软件通常有两条主流路径通过系统自带的YUM包管理器安装或者下载源码手动编译安装。对于Redis这两种方式各有优劣选择哪一种取决于你的具体需求和对环境的控制程度。2.1 YUM安装追求快速与稳定YUM或它的新一代工具DNF是CentOS的默认包管理器。它的最大优点是便捷。一条命令就能解决依赖、下载、安装和配置非常适合需要快速搭建测试环境或对版本要求不苛刻的场景。然而YUM仓库中的Redis版本往往不是最新的。CentOS的官方仓库以稳定性优先其软件版本通常会落后于上游社区的最新发布。例如当Redis 7.0已经发布一段时间后YUM仓库里可能还只提供Redis 6.2。如果你的应用依赖某些新版本才有的特性比如Redis 7.0的ACL增强、多线程IO那么YUM安装就无法满足需求。此外YUM安装的Redis其配置文件、数据目录、日志文件等位置都遵循CentOS的打包规范如配置文件在/etc/redis.conf数据目录在/var/lib/redis虽然规范但定制化程度相对较低。2.2 源码编译安装追求灵活与控制手动下载Redis源码包在服务器上编译安装是另一种更主流、更推荐用于生产环境的方式。它的核心优势在于完全的控制权。版本自由你可以自由选择任何一个历史版本或最新版本轻松应对特定版本的依赖或升级需求。定制编译你可以通过编译参数如make时的OPTIMIZATION选项针对当前服务器的CPU架构进行优化理论上能获得更好的性能。目录清晰你可以自定义安装路径PREFIX将所有相关文件二进制文件、配置文件、数据文件集中管理便于维护和迁移。理解深入编译安装的过程本身能让你更清楚地了解Redis的组成对后续的问题排查有帮助。它的缺点也很明显步骤稍多需要手动处理依赖主要是GCC编译器并且后续的启停管理需要自己配置比如配置成systemd服务。结论与选型对于学习、测试或对版本无特殊要求的环境YUM安装足够快。但对于生产环境或需要特定版本的场景源码编译安装是更专业、更推荐的选择。本文将重点详解源码编译安装的全流程因为掌握了它YUM安装就变得轻而易举。同时我们会涵盖如何将编译安装的Redis配置成系统服务实现和YUM安装一样便捷的systemctl管理方式。3. 前期准备环境检查与依赖安装在开始编译安装之前我们需要为服务器做好准备。这就像盖房子前要平整土地、准备建材一样。3.1 系统更新与基础检查首先通过SSH连接到你的CentOS服务器。建议先更新系统已有的软件包这是一个好习惯sudo yum update -y接下来检查系统版本确认我们是CentOS 7或8本文以CentOS 7为例CentOS 8及Rocky Linux/AlmaLinux等衍生版操作类似cat /etc/redhat-release然后检查是否已经安装了旧版本的Redis避免冲突redis-cli --version # 如果未安装会提示命令未找到 rpm -qa | grep redis # 通过rpm检查是否通过包管理器安装过如果发现旧版本并且你确定要替换它需要先卸载。如果是YUM安装的使用sudo yum remove redis。3.2 安装编译工具与依赖编译Redis源码需要C语言编译器。CentOS 7默认可能没有安装完整的开发工具集。我们需要安装gcc、make等。sudo yum groupinstall “Development Tools” -y sudo yum install wget tcl -y这里解释一下“Development Tools”这是一个软件包组包含了gcc,make,autoconf等一整套编译工具。wget用于从网络下载Redis源码包。tcl一个脚本语言Redis的官方测试套件make test依赖于它。虽然不运行测试可以不装但建议安装以便在安装后能进行基本的功能验证。安装完成后验证gcc是否成功安装gcc --version3.3 规划安装目录在编译前规划好安装路径是个好习惯。我个人的习惯是将自行编译的软件安装在/usr/local/目录下因为这是Linux系统约定俗成的“本地软件”安装位置。我们将为Redis创建一个专属目录sudo mkdir -p /usr/local/redis这个/usr/local/redis目录将作为我们安装的“根目录”。后续的二进制文件、配置文件、数据文件、日志文件都可以规划在其子目录下结构清晰。例如/usr/local/redis/bin存放可执行文件redis-server,redis-cli等。/usr/local/redis/conf存放配置文件。/usr/local/redis/data存放持久化数据RDB/AOF文件。/usr/local/redis/logs存放日志文件。当然你也可以选择其他路径但保持一致性很重要。4. 核心安装与配置实战准备工作就绪现在进入核心环节下载、编译、安装和配置Redis。4.1 下载与解压源码首先访问Redis官网redis.io或其在GitHub的发布页面找到最新的稳定版Stable下载链接。本文以Redis 7.2.4为例请以官网最新稳定版为准。我们切换到/usr/local/src目录通常用于存放源码包cd /usr/local/src使用wget下载源码压缩包sudo wget https://download.redis.io/releases/redis-7.2.4.tar.gz注意下载链接中的版本号7.2.4请替换为你实际需要的版本。务必从官方源下载以确保代码安全。下载完成后解压源码包sudo tar -xzvf redis-7.2.4.tar.gz解压后会生成一个redis-7.2.4的目录进入它cd redis-7.2.44.2 编译与安装现在开始编译源码。这个过程就是将人类可读的C代码转换成机器可执行的二进制文件。编译在源码目录下直接运行make命令。这个过程会持续几分钟取决于服务器性能。sudo make如果一切顺利你会在最后看到类似“It‘s a good idea to run ‘make test’ ;)”的提示。make命令会调用我们之前安装的gcc等工具完成编译。实操心得如果编译过程中出现错误最常见的原因是gcc版本过低或依赖缺失。CentOS 7默认的gcc版本是4.8.5而编译Redis 6.0可能需要更高版本。如果报错可以尝试安装devtoolset-9或更高版本例如scl enable devtoolset-9 bash切换到高版本GCC环境或者考虑安装稍旧一点的Redis版本。运行测试可选但推荐编译完成后强烈建议运行内置测试以确保编译出的Redis在当前系统环境下基本功能正常。sudo make test测试过程会比较长可能超过10分钟。如果看到大量的[ok]和最终的\o/ All tests passed without errors!就说明测试通过了。如果有个别测试失败可以暂时忽略但大量失败则需要排查环境问题。安装测试通过后执行安装命令。这里我们需要指定安装前缀PREFIX也就是我们之前规划的目录。sudo make PREFIX/usr/local/redis install这个命令会将编译好的可执行文件主要是redis-server和redis-cli复制到/usr/local/redis/bin目录下。安装完成后可以验证一下ls /usr/local/redis/bin/你应该能看到redis-server、redis-cli、redis-benchmark等文件。4.3 核心配置文件详解与定制Redis的强大与灵活很大程度上体现在其配置文件上。默认的配置文件就在我们刚才解压的源码目录里名为redis.conf。我们需要将它复制到我们规划的配置目录并对其进行修改。创建目录并复制配置文件sudo mkdir -p /usr/local/redis/conf sudo cp /usr/local/src/redis-7.2.4/redis.conf /usr/local/redis/conf/ cd /usr/local/redis/conf备份原始配置在修改前先备份原始文件是个好习惯。sudo cp redis.conf redis.conf.bak编辑配置文件使用vi或nano编辑器修改redis.conf。下面是一些生产环境必须或建议修改的关键参数sudo vi redis.conf绑定IP与保护模式默认只监听本地回环地址127.0.0.1且保护模式开启。这意味着只有本机可以访问。如果你需要从其他服务器访问需要修改。# 找到 bind 127.0.0.1 -::1 # 如果你想允许所有IP访问生产环境慎用最好结合防火墙可以改为 # bind 0.0.0.0 # 或者指定允许的服务器IP例如 # bind 192.168.1.100 127.0.0.1 # 如果绑定了非127.0.0.1的IP但想保持一定安全可以设置密码并关闭保护模式不推荐优先用防火墙 # protected-mode no重要安全提示生产环境中绝不建议将Redis直接暴露在公网或使用bind 0.0.0.0且无密码。最佳实践是bind内网IP通过防火墙限制访问来源并务必启用密码认证。端口号默认端口是6379你可以根据需要修改。port 6379守护进程模式默认Redis不作为守护进程运行。我们需要让它后台运行。daemonize yes密码认证这是最重要的安全设置之一。找到# requirepass foobared这一行取消注释并将foobared改为一个强密码。requirepass YourStrongPassword123!数据持久化Redis默认使用RDB快照。根据你的数据重要性配置RDB和/或AOF。# RDB配置在900秒内至少有1个key变化则保存 save 900 1 save 300 10 save 60 10000 # AOF配置开启AOF持久化推荐使用每秒同步 appendonly yes appendfsync everysec数据目录指定RDB和AOF文件的存放位置。我们规划在/usr/local/redis/data。dir /usr/local/redis/data记得创建这个目录sudo mkdir -p /usr/local/redis/data日志文件指定日志输出文件便于排查问题。logfile /usr/local/redis/logs/redis.log同样创建日志目录sudo mkdir -p /usr/local/redis/redis/logs最大内存限制防止Redis占用过多内存导致系统崩溃。根据你的服务器内存设置例如设置为4GB。maxmemory 4gb maxmemory-policy allkeys-lru # 内存满时的淘汰策略修改完成后保存退出。4.4 配置Systemd服务实现便捷管理到目前为止我们已经可以通过/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf来启动Redis了。但这不够优雅也无法实现开机自启、方便的状态查看和停止。我们需要将其配置为systemd服务。创建服务单元文件sudo vi /etc/systemd/system/redis.service写入以下内容请根据你的实际路径修改ExecStart、ExecStop和配置文件的路径。[Unit] DescriptionRedis In-Memory Data Store Afternetwork.target [Service] Typeforking Userredis Groupredis # 创建redis用户和组如果不存在 # sudo groupadd -r redis sudo useradd -r -g redis redis # 将数据目录和日志目录的所有权给redis用户 # sudo chown -R redis:redis /usr/local/redis/data /usr/local/redis/logs ExecStart/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf ExecStop/usr/local/redis/bin/redis-cli -p 6379 -a YourStrongPassword123! shutdown # 注意上面的ExecStop使用了密码如果密码中有特殊字符可能需要转义或使用--pass选项。更安全的方式是使用redis-cli连接后发送shutdown命令但systemd配置稍复杂。也可以考虑不配置ExecStop直接使用systemctl stop redis发送SIGTERM信号。 Restartalways RestartSec10 LimitNOFILE65535 [Install] WantedBymulti-user.target关键点解析Userredis和Groupredis为了安全建议使用非root用户运行Redis。你需要先创建这个用户/组并授权相关目录。ExecStop这里演示了使用redis-cli带密码关闭的方式。注意在服务文件中明文密码存在安全风险。一种更安全的做法是不配置ExecStop让systemd发送SIGTERM信号来停止服务Redis会优雅关闭或者将密码放在一个只有redis用户可读的文件中通过--passfile引用。Restartalways确保服务崩溃后自动重启提高可用性。重新加载systemd配置并启动服务sudo systemctl daemon-reload sudo systemctl start redis sudo systemctl enable redis # 设置开机自启检查服务状态sudo systemctl status redis如果看到active (running)并且下面没有红色的错误日志恭喜你Redis服务已经成功启动并托管给systemd了5. 启动、关闭与基本操作验证服务配置好后日常操作就变得非常简单。5.1 使用Systemd管理服务启动Redissudo systemctl start redis停止Redissudo systemctl stop redis重启Redissudo systemctl restart redis查看状态sudo systemctl status redis查看日志sudo journalctl -u redis -f实时查看或sudo tail -f /usr/local/redis/logs/redis.log5.2 使用Redis-CLI连接验证服务启动后我们需要验证它是否正常工作。使用redis-cli命令行工具进行连接和测试。本地连接无密码或密码在配置中如果Redis运行在本机且未设置密码或者使用了redis用户运行服务文件中已配置环境可以直接连接。/usr/local/redis/bin/redis-cli带密码连接如果设置了密码连接时需要认证。/usr/local/redis/bin/redis-cli -a YourStrongPassword123!注意在命令行中使用-a参数会暴露密码可能被ps命令看到。更安全的方式是先连接再认证/usr/local/redis/bin/redis-cli 127.0.0.1:6379 AUTH YourStrongPassword123! OK执行基本测试连接成功后你会看到127.0.0.1:6379的提示符。可以执行几个简单命令PING服务器应返回PONG。SET mykey “Hello Redis”设置一个键值对。GET mykey获取刚才设置的值应返回”Hello Redis”。INFO查看Redis服务器的详细信息这是一个非常强大的诊断命令。5.3 非Systemd方式的启停备用方案了解直接通过二进制文件启停的方式也是有必要的可用于调试或临时启动。启动/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf关闭连接到redis-cli后执行SHUTDOWN命令或者直接向进程发送信号# 使用redis-cli关闭 /usr/local/redis/bin/redis-cli -p 6379 -a YourPassword SHUTDOWN # 或使用kill命令先找到PID ps aux | grep redis-server kill -TERM redis_pid # 优雅关闭6. 常见问题与故障排查实录在实际部署中你可能会遇到一些问题。这里记录了几个典型问题及其解决方法。6.1 启动失败地址已被占用问题现象执行systemctl start redis失败status查看日志显示Error: Address already in use。原因分析端口6379已经被其他进程可能是之前未正确停止的Redis实例占用。解决方案找出占用端口的进程sudo netstat -tlnp | grep :6379或sudo ss -tlnp | grep :6379。确认该进程无用后终止它sudo kill -9 PID。如果确定是自己之前启动的Redis但未以服务形式运行可以用pkill redis-server强制停止所有Redis进程。6.2 启动失败权限问题问题现象日志中显示Permission denied无法写入日志文件、数据文件或启动失败。原因分析运行Redis的用户在redis.service文件中指定如redis用户对相关目录/usr/local/redis/logs,/usr/local/redis/data没有写权限。解决方案确保目录存在sudo mkdir -p /usr/local/redis/{logs,data}修改目录所有者和权限sudo chown -R redis:redis /usr/local/redis/logs /usr/local/redis/data sudo chmod -R 755 /usr/local/redis/logs /usr/local/redis/data如果使用自定义的配置文件路径也要确保redis用户有读权限sudo chown redis:redis /usr/local/redis/conf/redis.conf6.3 客户端无法连接问题现象从远程服务器或本地非127.0.0.1地址无法连接Redis连接超时或被拒绝。原因排查表可能原因检查方法解决方案Redis未监听公网IP查看redis.conf中bind配置项。修改bind为服务器内网IP或0.0.0.0生产环境慎用并重启Redis。保护模式开启当bind非127.0.0.1且无密码时保护模式会拒绝外部连接。查看protected-mode。1. 设置强密码requirepass。2. 或者不推荐关闭protected-mode。防火墙未放行检查CentOS防火墙firewalld/iptables。sudo firewall-cmd --list-all。添加防火墙规则sudo firewall-cmd --permanent --add-port6379/tcp sudo firewall-cmd --reload。密码认证失败连接时未提供密码或密码错误。使用redis-cli -a password或在连接后使用AUTH password命令。确保密码与redis.conf中的requirepass一致。网络问题使用telnet redis_ip 6379测试网络连通性。排查服务器间网络、安全组云服务器设置。6.4 内存使用过高问题现象Redis占用了大量内存接近或超过maxmemory设置可能导致写操作失败或频繁触发淘汰策略。排查与优化检查当前内存使用在redis-cli中执行INFO memory关注used_memory_human和maxmemory_human。分析键空间执行INFO keyspace查看各数据库的键数量。使用redis-cli --bigkeys命令生产环境慎用可能阻塞找出占用空间最大的键。优化数据结构是否使用了大量小Key是否可以用更节省内存的数据结构如使用Hash存储对象而非多个独立的String Key调整淘汰策略检查maxmemory-policy。volatile-lru或allkeys-lru通常是合理的选择。根据业务场景调整。考虑分片如果单个实例内存确实不足需要考虑使用Redis Cluster进行分片存储。6.5 性能问题排查思路如果感觉Redis响应变慢可以按以下顺序排查检查慢查询在redis.conf中设置slowlog-log-slower-than 10000单位微秒10毫秒然后通过SLOWLOG GET命令查看慢查询日志分析是哪些命令耗时。检查持久化影响RDB的save规则或AOF的appendfsync策略特别是always会阻塞主线程导致瞬时延迟。根据数据重要性权衡配置。检查系统资源使用top、iostat、vmstat等命令查看服务器CPU、内存、磁盘I/O是否瓶颈。特别是磁盘IO如果AOF文件过大或磁盘慢会影响性能。检查连接数执行INFO clients查看connected_clients。连接数过多会消耗资源。检查客户端连接池配置是否合理。使用内省命令INFO命令的输出包含了几乎所有运行时信息是性能排查的宝库。7. 安全加固与生产环境建议将Redis部署到生产环境安全是重中之重。除了前面提到的设置强密码和绑定内网IP外还有以下几点禁用高危命令在redis.conf中使用rename-command指令将一些危险命令重命名或禁用。例如rename-command FLUSHALL “” rename-command FLUSHDB “” rename-command CONFIG “” rename-command SHUTDOWN “SHUTDOWN_FORBIDDEN”这样FLUSHALL和FLUSHDB被彻底禁用重命名为空字符串CONFIG命令被禁用SHUTDOWN命令被重命名需要输入新名字才能执行增加了误操作难度。使用非默认端口将端口从6379改为其他不常见的端口可以避免一些自动化攻击脚本的扫描。修改redis.conf中的port参数即可。启用AOF持久化并做好备份appendonly yes能提供更好的数据安全性。同时定期将RDB和AOF文件备份到其他安全的存储位置如对象存储、另一台服务器。监控与告警使用INFO命令定期收集Redis指标内存使用、连接数、命中率、持久化状态等并集成到监控系统如Prometheus Grafana。设置关键指标如内存使用率90%、连接数异常增长的告警。资源限制在redis.conf中合理设置maxmemory并配置maxmemory-policy。在系统层面可以通过ulimit或systemd的LimitNOFILE等参数限制Redis进程能打开的文件描述符数量。定期更新关注Redis官方发布的安全更新和稳定版本在测试环境验证后有计划地升级生产环境版本。部署Redis只是第一步围绕它的监控、备份、高可用主从复制、哨兵、集群构成了一个完整的运维体系。从这篇详细的单机部署指南开始你已经拥有了一个坚实可靠的基础服务节点可以在此基础上根据业务增长的需要逐步探索更复杂的架构。