首页 > 数据库 >Redis集群不停机升级

Redis集群不停机升级

时间:2024-09-05 15:26:15浏览次数:4  
标签:redis 停机 32.114 cluster 集群 7001 Redis 7002 节点

背景

现有的Redis集群是由Redis4.x部署的,现在根据需要,要将Redis4.x升级到Redis5.0.10版本,且现有的Redis集群不能停机。下面以本地的机器为例进行操作演示。

操作步骤

下载&安装Redis 5.0.10

目前的Redis集群部署在 /usr/local/redis目录下, /usr/local下执行命令下载Redis5.0.10

cd /usr/local
wget http://download.redis.io/releases/redis-5.0.10.tar.gz

然后进行解压安装

tar -zxvf redis-5.0.10.tar.gz
cd redis-5.0.10
make & make install

从节点替换

先进入Redis4集群的安装目录,执行命令查看目前的集群节点以及主从结构

# 进入目录
cd /usr/local/redis/bin/
# 其中 xxx 是Redis集群的密码
./redis-cli -h 172.30.32.114 -p 7001 -a 'xxx' cluster nodes

注意,xxx是集群密码,密码必须加上英文输入法下的单括号,不然会报错
image

我们以 7001(主)和7002(从)这一对为例进行演示

Redis5版本的7002节点替换

然后回到 /usr/local目录,执行命令,创建redis5-clusterbindatalogcfg等文件夹。

mkdir -p /usr/local/redis5-cluster
mkdir -p /usr/local/redis5-cluster/bin
mkdir -p /usr/local/redis5-cluster/data
mkdir -p /usr/local/redis5-cluster/log
mkdir -p /usr/local/redis5-cluster/cfg

如下所示:
image

执行命令,将redis-5.0.10/src目录下的所有命令全部复制到 redis5-cluster/bin目录下

cp -r /usr/local/redis-5.0.10/src/* /usr/local/redis5-cluster/bin/

进入到redis5-cluster/cfg目录下,执行 vim redis-7002.conf命令,然后将下面的内容复制进去


# Redis configuration file

# 后台运行 设置 yes
daemonize yes

pidfile /usr/local/redis5-cluster/data/redis-7002.pid

protected-mode no

# 端口
port 7002

tcp-backlog 511

# 绑定当前机器 ip
bind 172.30.32.114


unixsocket /usr/local/redis5-cluster/data/redis-7002.sock
unixsocketperm 700

# 超时时间 
timeout 300

tcp-keepalive 60
supervised no

loglevel warning

# 日志文件
logfile /usr/local/redis5-cluster/log/redis-7002.log


databases 16



save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes


rdbcompression yes


rdbchecksum yes


dbfilename dump-7002.rdb


dir /usr/local/redis5-cluster/data

# 设置集群密码
masterauth xxx


slave-serve-stale-data yes


slave-read-only yes


repl-diskless-sync no


repl-diskless-sync-delay 5



repl-disable-tcp-nodelay no


slave-priority 100

# 设置密码
requirepass  xxx 


maxclients 10000


maxmemory 10737418240


maxmemory-policy allkeys-lru


maxmemory-samples 5
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no



appendonly yes

appendfilename "appendonly-7002.aof"

appendfsync no

no-appendfsync-on-rewrite yes

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble no

lua-time-limit 5000


cluster-enabled yes

cluster-config-file /usr/local/redis5-cluster/data/nodes-7002.conf

cluster-node-timeout 15000


slowlog-max-len 128


latency-monitor-threshold 0

notify-keyspace-events ""


hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-entries 512
list-max-ziplist-value 64
list-compress-depth 0


set-max-intset-entries 512


zset-max-ziplist-entries 128
zset-max-ziplist-value 64


hll-sparse-max-bytes 3000

activerehashing yes


client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes
lfu-log-factor 10
lfu-decay-time 1
activedefrag no

然后进入到旧的Redis集群的安装目录中,将原先的Redis4版本的的7002节点关闭,再启动Redis5版本的7002节点,之后再将7002节点加入到集群中,并将其设置为7001的从节点。
命令如下:


# 进入Redis4版本的集群的命令目录
cd /usr/local/redis/bin/

# 停止 Redis4版本的7002节点
./redis-cli -h 172.30.32.114 -p 7002 -a 'xxx' shutdown

# 进入到`redis5-cluster`的`bin`
cd /usr/local/redis5-cluster/bin/
# 启动 redis5版本的7002节点
./redis-server ../cfg/redis-7002.conf &

# 进入Redis4版本的集群的命令目录

cd /usr/local/redis/bin/

# 将redis5版本的7002节点加入到集群中
./redis-cli -h 172.30.32.114 -p 7002 -a 'xxx' cluster meet 172.30.32.114 7001

查看7001主节点的node_id

./redis-cli -h 172.30.32.114 -p 7001 -a 'xxx' cluster nodes

image

此时将 7002 节点设置为 7001 节点的从节点:

./redis-cli -h 172.30.32.114 -p 7002 -a 'xxx' cluster replicate 0caba7e5cd031abd24eb6ac8897fd3841a5c98c3

执行命令,查看7002是否已变成7001的从节点

./redis-cli -h 172.30.32.114 -p 7001 -a 'xxx' cluster nodes

剩余从节点的替换

其他从节点的替换参照上面即可,以7003(主)7004(从)替换为例,用的命令如下:

# 创建配置文件:

cd /usr/local/redis5-cluster/cfg 

# redis-7004.conf参考redis-7002.conf即可,将所有的7002替换为7004即可

touch redis-7004.conf

vim redis-7004.conf


# 关闭旧的7003节点:
cd /usr/local/redis/bin/
./redis-cli -h 172.30.32.114 -p 7004 -a 'xxx' shutdown

# 启动新版本的7004节点:
cd /usr/local/redis5-cluster/bin
./redis-server ../cfg/redis-7004.conf &

# 将7004节点加入到集群中:
cd /usr/local/redis/bin/

./redis-cli -h 172.30.32.114 -p 7004 -a 'xxx' cluster meet 172.30.32.114 7003

# 查看 7003主节点的node_id:
./redis-cli -h 172.30.32.114 -p 7003 -a 'xxx' cluster nodes

# 将 7004 节点设置为 7003 节点的从节点:
./redis-cli -h 172.30.32.114 -p 7004 -a 'xxx' cluster replicate 7003_node_id

# 查看是否7004是否成为7003的从节点:
./redis-cli -h 172.30.32.114 -p 7003 -a 'xxx' cluster nodes

这样就完成了一个从节点的替换。

主节点替换

7001主节点替换

先查看7001主节点信息

cd /usr/local/redis/bin/
./redis-cli -c -h 172.30.32.114 -p 7001 -a 'xxx' cluster nodes | grep master

image

比如现在想升级7001主节点,则需要先将其master地位转移到他的从节点7002上,执行命令:

# 7002 是7001的从节点
./redis-cli -c -h 172.30.32.114 -p 7002 -a 'xxx' cluster failover

注意这里的7002是7001主节点对应的其中一个从节点的端口这里不能是7001端口,不然会报错,ERR You should send CLUSTER FAILOVER to a replica
再次查看主节点,发现7002已经变成了主节点,7001变成了7002的从节点。
image

image

此时7001就是7002的从节点,此时将7001节点升级到Redis5.0.10即可,其步骤可以参考从节点升级即可。命令如下:

# 创建配置文件:
cd /usr/local/redis5-cluster/cfg 

# redis-7001.conf参考redis-7002.conf即可,将所有的7002替换为7001即可
touch redis-7001.conf
vim redis-7001.conf

# 关闭旧的7001节点:
cd /usr/local/redis/bin/

# 停止7001节点
./redis-cli -h 172.30.32.114 -p 7001 -a 'xxx' shutdown

# 启动新版本的7001节点:
cd /usr/local/redis5-cluster/bin

./redis-server ../cfg/redis-7001.conf &

# 将7001节点加入到集群中:
cd /usr/local/redis/bin/
./redis-cli -h 172.30.32.114 -p 7001 -a 'xxx' cluster meet 172.30.32.114 7002

# 查看 7001主节点的node_id:
./redis-cli -h 172.30.32.114 -p 7002 -a 'xxx' cluster nodes | grep 7002

# 将 7001 节点设置为 7002 节点的从节点:
./redis-cli -h 172.30.32.114 -p 700` -a 'xxx' cluster replicate 7002_node_id
 
# 查看是否7001是否成为7002的从节点:
./redis-cli -h 172.30.32.114 -p 7001 -a 'xxx' cluster nodes

这样就完成了一个从节点的替换。

执行命令,验证主从是否进行了同步:

./redis-cli -h 172.30.32.114 -p 7001 -a 'xxx' info replication

image

确认master_link_status显示为up,并且 master_last_io_seconds_ago显示为较小的值。

执行命令,验证主从一致性:

# 主节点设置值:
./redis-cli -c -h 172.30.32.114 -p 7002 -a 'xxx' set test_m_s_7001_7002 test

从节点获取值:

# 连接客户端
./redis-cli -c -h 172.30.32.114 -p 7001 -a 'xxx' get test_m_s_7001_7002

image

其他主节点的替换

剩余主节点参考上诉操作即可,以7003主节点替换为例,使用到的命令如下:


# 进入到旧的集群的安装目录:

cd /usr/local/redis/bin

# 查看7003主节点信息,找到他的从节点的端口,假设7004是7003的一个从节点

./redis-cli -c -h 172.30.32.114 -p 7003 -a 'xxx' cluster nodes 


# 7003主节点故障转移,这里假设7004是7003的一个从节点

./redis-cli -c -h 172.30.32.114 -p 7004 -a 'xxx'  cluster failover


# 关闭旧的7003主节点:
./redis-cli -h 172.30.32.114 -p 7003 -a 'xxx' shutdown


# 启动新的7003节点

# 进入到新版本Redis的命令目录
cd /usr/local/redis5-cluster/bin

# 启动7003节点
./redis-server ../cfg/redis-7003.conf &


# 将7003节点加入到集群中

# 进入到旧的集群的安装目录:
cd /usr/local/redis/bin

# 将Redis5版本的7003节点加入到集群中
./redis-cli -h 172.30.32.114 -p 7003 -a 'xxx' cluster meet 172.30.32.114 7004

# 查看7004主节点的node_id:

./redis-cli -h 172.30.32.114 -p 7004 -a 'xxx' cluster nodes | grep 7004

# 将7003节点设置为7004节点的从节点:

./redis-cli -h 172.30.32.114 -p 7003 -a 'xxx' cluster replicate 7004_node_id

# 验证主从是否进行了同步:
#确认 master_link_status 显示为 up,并且master_last_io_seconds_ago 显示为较小的值
./redis-cli -h 172.30.32.114 -p 7003 -a 'xxx' info replication

# 执行命令,验证主从一致性:

# 主节点设置值:
./redis-cli -c -h 172.30.32.114 -p 7004 -a 'xxx' set test_m_s_7003_7004 test

# 从节点获取值:
./redis-cli -c -h 172.30.32.114 -p 7003 -a 'xxx' get test_m_s_7003_7004

标签:redis,停机,32.114,cluster,集群,7001,Redis,7002,节点
From: https://www.cnblogs.com/reecelin/p/18398543

相关文章

  • Kubernetes学习指南:保姆级实操手册06——部署kubernetes集群
    Kubernetes学习指南:保姆级实操手册06——部署kubernetes集群1、配置YUM源###在所有Master节点执行#配置yum源cat>/etc/yum.repos.d/kubernetes.repo<<EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x8......
  • prometheus学习笔记之集群外服务发现
    一、部署二进制prometheus略,参考之前文档或自行百度二、创建prometheus获取api-server的token1.获取tokenkubectlgetsa-nmonitoringmonitor#上一篇给prometheus创建的sakubectlgetsa-nmonitoringmonitor-oyaml#每个sa默认会创建一个secretkubectlgetsecre......
  • 部署K8S集群(一):环境准备
    环境介绍:以下操作使用三台基于Hyper-v的OpenEuler虚拟机IP主机名系统版本172.17.48.27masteropeneuler-22.03LTSSP3172.17.48.28worker01openeuler-22.03LTSSP3172.17.48.29worker02openeuler-22.03LTSSP3虚拟机准备操作:以下操作需要在全部三......
  • 部署K8S集群(二):主节点初始化
    主节点:以下操作只在master进行安装kubeletkubeadmkubectlyuminstall-ykubeletkubeadmkubectl安装containerd下载地址:https://github.com/containerd/containerd/releases找到标签为Latest的包,根据系统类型下载对应的包#解压tarCxzvf/usr/localcontainerd-1......
  • Redis篇 - 深入了解查询缓存与缓存带来的问题
    引言在现代Web应用程序中,为了提高数据访问速度和减轻数据库的压力,缓存技术变得越来越重要。Redis作为一款高性能的键值存储系统,在缓存领域有着广泛的应用。然而,随着缓存的引入,一系列新的挑战也随之而来。本文将探讨查询缓存的基本概念以及常见的几个问题:读写不一致、缓存穿透......
  • windows系统Redis安装,启动与客户端连接,redis-python模块安装
    1、https://www.cnblogs.com/chunyouqudongwuyuan/p/16475220.html#redis%E5%9F%BA%E6%9C%AC%E8%BF%9E%E6%8E%A5Redis安装,启动与客户端连接,redis-python模块安装redis安装由于windows对redis支持不好,所以在windows下只能使用较老版本的redis只维护到3.x https://github.c......
  • Docker 部署 Redis (图文并茂超详细)
    部署Redis(Docker)[Step1]:拉取Redis镜像,推荐使用7的Redis版本dockerpullredis:7.0.12[Step2]:创建Redis相关目录➡️启动Redis容器➡️拷贝文件➡️授权文件夹➡️删除容器#创建Redis相关目录mkdir-p/data/redis/{conf,data,log}t......
  • 推荐一款开源、高效、灵活的Redis桌面管理工具:Tiny RDM!支持调试与分析功能!
    1、引言在大数据和云计算快速发展的今天,Redis作为一款高性能的内存键值存储系统,在数据缓存、实时计算、消息队列等领域发挥着重要作用。然而,随着Redis集群规模的扩大和复杂度的增加,如何高效地管理和运维Redis数据库成为了许多开发者和运维人员面临的挑战。TinyRDM(TinyRedisDes......
  • redis内存碎片
    一、什么是内存碎片redis数据删除后,所占用内存不会马上换给操作系统,而是交给内存分配管理器,所以对操作系统来说redis仍然占用着这些内存。这里有个风险点是:redis释放的内存有可能是不联系的,这种不连续的内存很可能无法再次使用,最终造成了内存的浪费。二、如何判断有内存碎片可......
  • redis-cli创建Redis集群时显式指定主从节点
    背景前些年用python写过一个RedisCluster自动化安装,扩容和缩容的工具,虽然当时官方的的redis-trib.rb集群创建工具提供了集群创建、检查、修复、均衡等命令行功能,个人接受不了redis-trib.rb,原因在于redis-trib.rb需要ruby的环境,同时无法自定义指定集群中节点的主从关系。随后R......