升级背景
最近质保部扫描到我们业务系统使用的redis集群存在安全漏洞,需要升级到最新版本以修复此问题。
集群信息
升级前
版本: 7.0.12
IP | 端口 | 角色 |
---|---|---|
10.0.0.87 | 6479 | 主 |
10.0.0.87 | 6480 | 从(对应主节点-10.0.0.82:6479) |
10.0.0.9 | 6479 | 主 |
10.0.0.9 | 6480 | 从(对应主节点-10.0.0.87:6479) |
10.0.0.82 | 6479 | 主 |
10.0.0.82 | 6480 | 从(对应主节点-10.0.0.9:6479) |
升级后
版本:7.4.1
IP | 端口 | 角色 |
---|---|---|
10.0.0.87 | 6479 | 从(对应主节点-10.0.0.9:6480) |
10.0.0.87 | 6480 | 主 |
10.0.0.9 | 6479 | 从(对应主节点-10.0.0.82:6480) |
10.0.0.9 | 6480 | 主 |
10.0.0.82 | 6479 | 从(对应主节点-10.0.0.87:6480) |
10.0.0.82 | 6480 | 主 |
升级方案
采用各个节点逐个替换bin文件来进行滚动升级,步骤描述可简单描述为:
- 使用新版本redis源码包编译生成新版本的redis bin文件
- 停止三个从节点,使用新版本的redis bin文件来启动这三个从节点
- 停止每个主节点之前,首先需要将这个主节点对应的从节点升级为主节点,然后停止,并使用新版本的redis bin文件来启动(三台机器都是如此,主要要一台一台来升级主节点)
- 业务验证
升级步骤
-
下载并编译生成新版本的redis bin文件
wget https://github.com/redis/redis/archive/refs/tags/7.4.1.tar.gz tar -zxvf redis-7.4.1.tar.gz && cd redis-7.4.1 # 下面命令会在 /home/lbs/temp/redis 路径下生成一个 bin目录,这就是新版本的bin文件 make && make install PREFIX=/home/lbs/temp/redis
-
查看redis集群节点分布情况 /home/lbs/software/redis/bin/redis-cli -c -h localhost -p 6479 -a admin123456 cluster nodes
-
使用新的bin文件替换旧的bin文件(三台机器都需要重复此步骤)
# 将第一步生成的bin文件目录替换之前的bin文件目录 mv -f /home/lbs/software/redis/bin /home/lbs/software/redis/bin_old mkdir -p /home/lbs/software/redis/bin cp -rf /home/lbs/temp/redis/bin/* /home/lbs/software/redis/bin
-
停止从节点,并使用新的bin文件启动从节点(三台机器都需要重复此步骤)
# 如果`shutdown`命令被禁止,则可以直接kill掉从节点对应的进程即可 /home/lbs/software/redis/bin/redis-cli -c -h localhost -p 6480 -a admin123456 shutdown /home/lbs/software/redis/bin/redis-server //home/lbs/software/redis/6480/conf/redis-6480.conf
-
升级主节点对应的从节点为主节点,并停止它,然后使用使用新的bin文件启动(三台机器都需要重复此步骤)
# 要注意这里的 ip 和 端口是要停止的主节点对应的从节点的ip和端口 /home/lbs/software/redis/bin/redis-cli -h xxx -p 6480 admin123456 CLUSTER FAILOVER # 如果`shutdown`命令被禁止,则可以直接kill掉从节点对应的进程即可 /home/lbs/software/redis/bin/redis-cli -c -h localhost -p 6480 -a admin123456 shutdown # 使用新bin启动 /home/lbs/software/redis/bin/redis-server /home/lbs/software/redis/6479/conf/redis-6479.conf
-
查看redis集群节点分布,和业务系统功能验证
/home/lbs/software/redis/bin/redis-cli -c -h localhost -p 6480 -a admin123456 cluster nodes