阿里云 CentOS 7 升级 Redis 到 7.2 实录
背景
云端生产机是阿里云 CentOS 7,系统默认装的是 Redis 3.2.12 ,本地开发用的是 5.0.14 。3.2 早就停止安全维护了,决定升级到当前仍在维护周期内的 7.2。
这篇记录把三个源(CentOS-Base、EPEL、Remi)全部用 cat > ... << 'EOF' 的方式一次性写好,避免手改配置出错,也避免网络问题导致 yum 不到。
一、先看现状
bash
redis-cli --version
# redis-cli 3.2.12
redis-server --version
# Redis server v=3.2.12
结论很明确:必须升级。
二、重写三个源文件
CentOS 7 已经 EOL,原来的源大多失效。直接用 cat 覆盖成阿里云镜像,EPEL 和 Remi 也一并写好。
1. CentOS-Base.repo
bash
cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF
2. epel.repo
bash
cat > /etc/yum.repos.d/epel.repo << 'EOF'
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
failovermethod=priority
enabled=0
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
failovermethod=priority
enabled=0
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
EOF
3. remi.repo
bash
cat > /etc/yum.repos.d/remi.repo << 'EOF'
[remi]
name=Remi's RPM repository for Enterprise Linux 7 - $basearch
mirrorlist=http://cdn.remirepo.net/enterprise/7/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[remi-safe]
name=Remi's Safe RPM repository for Enterprise Linux 7 - $basearch
mirrorlist=http://cdn.remirepo.net/enterprise/7/safe/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[remi-php55]
name=Remi's PHP 5.5 RPM repository for Enterprise Linux 7 - $basearch
mirrorlist=http://cdn.remirepo.net/enterprise/7/php55/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[remi-php56]
name=Remi's PHP 5.6 RPM repository for Enterprise Linux 7 - $basearch
mirrorlist=http://cdn.remirepo.net/enterprise/7/php56/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[remi-test]
name=Remi's test RPM repository for Enterprise Linux 7 - $basearch
mirrorlist=http://cdn.remirepo.net/enterprise/7/test/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
EOF
注意:Remi 仓库的 GPG key 需要提前导入,否则
gpgcheck=1会报错。执行:
bashrpm --import http://rpms.remirepo.net/RPM-GPG-KEY-remi rpm --import http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 rpm --import http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
三、清理并重建缓存
bash
yum clean all
yum makecache
四、卸载旧版 Redis
bash
# 先备份配置和数据(如果有)
cp /etc/redis.conf /etc/redis.conf.bak 2>/dev/null
cp -r /var/lib/redis /var/lib/redis.bak 2>/dev/null
# 卸载
yum remove redis -y
五、安装 Redis 7.2
bash
# 从 remi 源安装(remi-safe 已默认启用,remi 需要显式指定)
yum --enablerepo=remi install redis -y
如果提示找不到包,可以先看看 remi 里有哪些版本:
bash
yum --enablerepo=remi list redis --showduplicates
六、启动并验证
bash
systemctl start redis
systemctl enable redis
redis-server --version
# Redis server v=7.2.5 sha=00000000:00000000:00000000:00000000:00000000 bits=64 build=2dd7a20ee3c6d015
redis-cli ping
# PONG
七、版本兼容性说明
本地 5.0 客户端连云端 7.2 服务端,基本没问题。Redis 命令和协议向后兼容做得很好,常规 GET/SET、Hash、List、Set、ZSet 操作完全无感。
需要留意的 7.x 不兼容变更:
- Lua 脚本里
print()被移除 - 部分错误信息首字母大小写变了
ZPOPMIN/ZPOPMAX在 count 为 0 时行为变化LPOP/RPOP指定 count 且 key 不存在时返回 null 数组
只要应用没用到这些边缘场景,升级到 7.2 是安全的。
八、总结
核心就三步:
- 用
cat > ... << 'EOF'一次性写好三个源文件 - 导入 GPG key,
yum clean all && yum makecache yum --enablerepo=remi install redis -y
7.2 是 Redis 官方的 Extended 维护版本,安全更新持续到 2029 年 12 月,作为生产环境的选择是合适的。