在线升级 redis 到7.2.2

1. 操作环境与升级思路

  1. 先安装新的版本
  2. 新版本设置主从备份,将老版本与新版本的数据进行同步
  3. 新启动一个服务,连接新版本redis,切换到新服务,关闭主从备份
  4. kill 老服务, 卸载老版本redis

因为我需要 RedisSearch 所以直接安装 Redis Stack Server
Redis Stack Server 由 Redis,RedisSearch,RedisJSON,RedisGraph,RedisTimeSeries 和 RedisBloom 组成1

2 ubuntu 操作步骤

安装环境

lsb_release -a               
# Distributor ID: Ubuntu
# Description:    Ubuntu 20.04.1 LTS
# Release:        20.04
# Codename:       focal

安装版本 redis-stack-server-7.2.0-v5

2.1 安装新的版本2

参考的是官方文档

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis-stack-server

2.2 新版本设置主从备份,将老版本与新版本的数据进行同步

将老版本的数据同步到新版本,因为是一次性的,所以直接命令行操作就行。

配置文件在 /opt/redis-stack/etc/redis-stack.conf,如果需要修改端口,就修改这个文件就可以,具体参考官方详细示例
我的配置内容如下

port 6380
daemonize yes
requirepass password

修改 redis-stack-server 命令,将最后的启动参数 --daemonize no 注释掉,如下

........省略上面的内容
echo "Starting redis-stack-server, database path ${REDIS_DATA_DIR}"
# 注释掉 daemonize 参数
# --daemonize no \
${CMD} \
${CONFFILE} \
--dir ${REDIS_DATA_DIR} \
--protected-mode no \
--loadmodule ${MODULEDIR}/rediscompat.so \
--loadmodule ${MODULEDIR}/redisearch.so ${REDISEARCH_ARGS} \
--loadmodule ${MODULEDIR}/redistimeseries.so ${REDISTIMESERIES_ARGS} \
--loadmodule ${MODULEDIR}/rejson.so ${REDISJSON_ARGS} \
--loadmodule ${MODULEDIR}/redisbloom.so ${REDISBLOOM_ARGS} \
--loadmodule ${MODULEDIR}/redisgears.so v8-plugin-path ${MODULEDIR}/libredisgears_v8_plugin.so  ${REDISGEARS_ARGS} \
$*

启动并开启主从同步3

# 启动 redis
redis-stack-server
# 连接 redis
redis-cli -h localhost -p 6780 -a "password"
# 在redis-cli 命令行窗口里面执行
# 设置主从备份
REPLICAOF host port
# 如果 master 开启了密码,设置一下masterauth 参数
config set masterauth <password2>

2.3 新启动一个服务,连接新版本redis,切换到新服务,关闭主从备份

我的服务是 Java 启动的,所以修改一下配置文件,重新启动一个新服务就可以

# 开启新服务
nohup java -jar project.jar  --spring.profiles.active=prod-stage > /dev/null 2>&1 &
# nginx 切换请求到新服务,修改配置文件,重载nginx
nginx -s reload
# 关闭主从备份,否则新版本redis是仅读状态
redis-cli -h localhost -p 6780 -a "password"
# 在redis-cli 命令行窗口里面执行
REPLICAOF NO ONE

2.4 kill 老服务, 卸载老版本redis

# 查找就服务的 进程号
ps -ef|grep project.jar
# 干掉老服务
kill -9 old_pid
# 卸载老版本 redis
apt remove redis-server

3 centos 操作步骤

3.1 安装新版本

  1. 创建文件 /etc/yum.repos.d/redis.repo,内容如下
[Redis]
name=Redis
baseurl=http://packages.redis.io/rpm/rhel7
enabled=1
gpgcheck=1
  1. 执行命令
curl -fsSL https://packages.redis.io/gpg > /tmp/redis.key
sudo rpm --import /tmp/redis.key
sudo yum install epel-release
sudo yum install redis-stack-server

3.2 接下来的步骤与 Ubuntu 的剩下步骤时一样的

4. 遇见的问题

  1. 在执行 sudo yum install epel-release 遇见错误4
    CentOS Linux 8 - AppStream 184 B/s | 38 B 00:00
    Error: Failed to download metadata for repo ‘appstream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist
    The command ‘/bin/sh -c yum install java -y’ returned a non-zero code: 1
    解决方案:
cd /etc/yum.repos.d/
sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
sudo yum update -y
  1. 在centos启动redis时遇见如下错误5
    WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
    执行 sysctl "vm.overcommit_memory=1" 即可

  2. 在centos启动redis时遇见如下错误6
    libssl.so.10: cannot open shared object file: No such file or directory
    执行命令 yum install compat-openssl10 即可


  1. Redis Stack 的那些事儿 ↩︎

  2. Install Redis Stack on Linux ↩︎

  3. Redis主从复制的配置和实现原理 ↩︎

  4. Error: Failed to download metadata for repo ‘appstream’ ↩︎

  5. Redis: Warning Memory overcommit must be enabled ↩︎

  6. libssl.so.10: cannot open shared object file: No such file or directory ↩︎

你可能感兴趣的:(数据库,redis,bootstrap,数据库)