在 CentOS 和 Ubuntu 上部署 Redis,核心逻辑其实是一样的:都是基于 Linux 内核的进程管理、文件系统权限和网络栈。Redis 本身是跨平台的 C 语言程序,二进制包或源码编译后的行为几乎没有区别。
所谓的“差异”,主要集中在包管理器的命令习惯、默认配置文件的路径结构、以及 systemd 服务文件的初始化细节上。如果你习惯了其中一种环境,切换到另一种时容易因为“路径不对”或“命令忘了”而卡壳。下面从实战角度拆解几个关键点。
1. 安装方式与依赖管理的差异
这是最直观的区别。国内很多老运维或者服务器镜像依然偏爱 CentOS(尤其是 7/8 系列),而新的云主机默认镜像多为 Ubuntu(20.04/22.04 LTS)。
-
CentOS (yum/dnf):
# CentOS 7 sudo yum install epel-release sudo yum install redis # CentOS 8+ 通常直接包含在 BaseOS 或 AppStream 中,但版本可能较旧 sudo dnf install redis注意:EPEL 源里的 Redis 版本往往滞后于官网最新稳定版。如果是生产环境,建议通过源码编译或使用官方提供的二进制包,而不是依赖系统包管理器。
-
Ubuntu (apt):
sudo apt update sudo apt install redis-serverUbuntu 的
apt更新机制更流畅,且 Canonical 对软件包的维护相对及时。同样,系统源中的版本也不是最新的。
真实痛点:在 CentOS 上装完 Redis 后,经常需要手动启动服务;而在 Ubuntu 上,apt install 之后服务通常会自动启动并设为开机自启。这一点在自动化脚本里要特别注意检查状态。
2. 配置文件路径与格式微调
虽然 Redis 配置指令通用,但两个发行版的默认存放位置不同,这直接影响你修改参数时的操作路径。
| 项目 | CentOS/RHEL 系 | Ubuntu/Debian 系 |
|---|---|---|
| 主配置文件 | /etc/redis.conf |
/etc/redis/redis.conf |
| 日志文件 | 通常由 systemd 接管,或位于 /var/log/redis/ |
/var/log/redis/redis-server.log |
| 数据目录 | /var/lib/redis |
/var/lib/redis |
| PID 文件 | /var/run/redis.pid |
/run/redis.pid |
关键差异点:
- Ubuntu 倾向于将配置拆得更细,有时你会看到
/etc/redis/目录下有多个.conf片段,主文件会 include 其他文件。 - CentOS 通常是单体大文件
/etc/redis.conf。 - 注释风格:Ubuntu 的配置文件头部的注释非常详细,甚至包含了安全建议(如
protected-mode yes);CentOS 的注释相对简洁。
3. Systemd 服务文件的差异
现代 Linux 都使用 systemd 管理服务,但初始生成的 unit 文件略有不同。
-
CentOS:
服务名通常是redis.service。[Service] ExecStart=/usr/bin/redis-server /etc/redis.conf User=redis Group=redis在 CentOS 7 中,你可能还需要手动处理 SELinux 策略,否则 Redis 无法绑定非标准端口或写入特定目录。这是 CentOS 独有的坑。
-
Ubuntu:
服务名也是redis-server.service。[Service] ExecStart=/usr/bin/redis-server /etc/redis/redis.conf User=redis Group=redisUbuntu 默认不启用 SELinux(使用的是 AppArmor),所以在安全模块上没有 CentOS 那么强的束缚感。
实操建议:无论哪个系统,修改了配置文件后,务必执行:
sudo systemctl daemon-reload
sudo systemctl restart redis-server
不要只重启服务而不 reload daemon,否则新加载的配置可能不会生效(特别是涉及 Listen IP 变更时)。
4. 防火墙与网络访问
-
CentOS:
- CentOS 7: 使用
firewalld。sudo firewall-cmd --permanent --add-port=6379/tcp sudo firewall-cmd --reload - CentOS 8+: 同样使用 firewalld,但命令语法一致。
- 重要提醒:CentOS 默认开启
firewalld,很多新手装完 Redis 发现本地能连,远程连不上,第一反应就是查 Redis 配置,其实是防火墙没开。
- CentOS 7: 使用
-
Ubuntu:
- 默认使用
ufw(Uncomplicated Firewall)。sudo ufw allow 6379/tcp sudo ufw enable # 如果之前未启用 - 云厂商(如阿里云、腾讯云、AWS)的 Ubuntu 实例,通常在安全组层面已经放行了端口,本地
ufw可能处于 inactive 状态。但务必确认!
- 默认使用
5. 用户与权限模型
两者都推荐以独立用户运行 Redis,避免 root 风险。
- CentOS: 安装后会自动创建
redis用户和组。 - Ubuntu: 同样自动创建
redis用户和组。
常见陷阱:
在某些最小化安装的 CentOS 镜像中,如果没有正确初始化数据库目录权限,Redis 启动时会报错 Can't open the log file 或 Permission denied。解决方法:
sudo chown -R redis:redis /var/lib/redis
sudo chown -R redis:redis /var/log/redis
6. 性能调优与内核参数(共性大于差异)
这部分在两个系统上完全一致,但常被忽视。Redis 是高内存密集型应用,以下参数在 CentOS 和 Ubuntu 上都应检查:
# vm.overcommit_memory 必须设置为 1
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1
# 关闭透明大页(Transparent Huge Pages, THP)
# 这在两种系统中都会导致严重的延迟抖动
echo never > /sys/kernel/mm/transparent_hugepage/enabled
注意:Ubuntu 某些新版本内核可能对 THP 的处理更激进,务必在生产环境中永久禁用。
总结与建议
- 版本选择:不要依赖系统包管理器安装的 Redis 版本。对于生产环境,推荐使用 Redis Stack 或从 redis.io 下载最新稳定版源码编译,或使用 Docker/Kubernetes 部署,这样可消除 OS 差异带来的困扰。
- 配置一致性:无论在哪种系统上,确保
bind 127.0.0.1改为你的内网 IP,并设置强密码requirepass。这是比 OS 差异更重要的安全问题。 - 监控:使用 Prometheus + Grafana 监控 Redis,指标是跨平台的,无需因 OS 不同而改变监控方案。
- 备份策略:AOF 和 RDB 的持久化机制在两个系统上完全相同,定期备份到对象存储(如 OSS/S3)即可。
一句话结论:Redis 在 CentOS 和 Ubuntu 上的功能无异,差异仅在于“怎么装”、“配置文件在哪”、“防火墙怎么开”。掌握这三点,就能无缝切换。
云技术博客