1. 操作环境与升级思路
- 先安装新的版本
- 新版本设置主从备份,将老版本与新版本的数据进行同步
- 新启动一个服务,连接新版本redis,切换到新服务,关闭主从备份
- 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 安装新版本
- 创建文件 /etc/yum.repos.d/redis.repo,内容如下
[Redis]
name=Redis
baseurl=http://packages.redis.io/rpm/rhel7
enabled=1
gpgcheck=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. 遇见的问题
- 在执行
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
- 在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"
即可 - 在centos启动redis时遇见如下错误6
libssl.so.10: cannot open shared object file: No such file or directory
执行命令yum install compat-openssl10
即可