Lazy loaded image
redis oss 迁移到 valkey 并同步数据
Words 1050Read Time 3 min
2025-10-18
2025-11-10
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Nov 10, 2025 10:03 PM
是否已更新
orginal_page
是否推荐
参考资料
  • 由于 Redis 开源许可证的变更(BSD 3-Clause 到 RSALv2 + SSPLv1)带来后续开源的担忧,从 redis 7.2 起 redis oss fork 出 valkey 项目
debian 安装 valkey
  • apt install valkey-server
  • apt install valkey-redis-compat
    • 可选,二进制符号文件兼容 redis-cli 和其他 redis-* 工具
      • 简单说就是没有安装 redis-cli 也能用 valkey-cli 替代
    • debian 上没有
alpine 安装 valkey sentinel
  • apk add valkey
  • apk add valkey-compat
    • 可选,二进制符号文件兼容 redis-cli 和 redis-server
  • rc-update add valkey-sentinel default
  • rc-update del redis-sentinel default
    • 移除 redis-sentinel 启动
  • rc-update show -v | grep -E "valkey|redis"
配置 valkey-server 和 valkey-sentinel
  • 参考 redis 键值存储的对应部分配置文件,这里不再累述
redis oss 迁移过来的配置项基本兼容
  • 目录和文件名的双引号要去掉
  • 最好还是和官方文件进行核对一遍
  • valkey-sentinel 初始配置时改 port 26379 为 26380
    • 避免端口冲突
    • master 指向现有 redis-server 主节点 6379 端口
如果有三台额外的节点可以额外 valkey-sentinel 减少服务不可用的时间
  • 这三台 valkey-sentinel 没有端口冲突,配置为 26379 即可
  • master 指向现为从节点的 redis-server 6379 端口
    • 该 redis-server 从节点后续将做为 valkey-server 主节点
      • 切换时把从节点直接升级为主节点,不影响写入
  • 对应修改 valkey-server 的主从配置
    • 其他 valkey-server 需要设置以该 valkey-server 为默认主节点
启动 valkey-server 和 valkey-sentinel 服务
  • debian
    • mkdir -p /etc/valkey /var/log/valkey /var/run/valkey-6379 /var/lib/valkey/6379
    • systemctl disable --now valkey-server valkey-sentinel
    • systemctl enable --now valkey-server@6380
      • 测试配置文件是否无误
    • systemctl status valkey-server@6380
    • systemctl disable --now valkey-server@6380
  • alpine
    • mkdir -p /etc/valkey /var/lib/valkey
    • service valkey stop
    • service valkey-sentinel start
    • service valkey-sentinel status
    • cat /var/log/valkey
redis 数据在线迁移工具 RedisShake
  • 下载 RedisShake
zinit 包管理临时使用
  • zi from"gh-r" as"program" for tair-opensource/RedisShake
  • which redis-shake
  • zi delete -y tair-opensource/RedisShake
    • 可选,用完删除
  • 同一节点在线切换导致服务不可用的中断点
    • 应用切换 sentinel 端口
    • redise-server 主节点关闭
相同机器上的数据迁移
  • 同步期间,切换应用实例去使用新的 valkey-sentinel 26380 端口
    • 此时的 valkey-sentinel 指向原本的 redis-server 主节点 6379 服务
      • 不影响写入
  • 切换后可以关掉 redis-sentinel
    • service redis-sentinel stop
    • systemctl disable --now redis-server@6379
  • alpine valkey-sentinel 逐台修改 sentinel 端口为 26379
    • vim /etc/valkey/sentinel.conf
    • service valkey-sentinel restart
  • 切换应用实例去使用现有的 sentinel 26379 端口
    • 更改一到两台 sentinel 的时候就可以切换了
  • 等待同步流量较低了,开始淘汰 redis-server 为 valkey-server
    • systemctl disable --now redis-server@6379
      • 从两个从节点开始关闭,不影响主节点写入
      • 最后关闭主节点的 redis-server 并开启 valkey-server 接受写入
    • systemctl enable --now valkey-server@6379
    • systemctl status valkey-server@6379
如果有三台额外的节点部署了 valkey-sentinel
  • 这三台额外的 valkey-sentinel 由于不存在端口冲突,直接配置 26379 端口
    • master 指向现为 redis-server 从节点,将为 valkey-server 主节点的 6379 端口
  • 等同步流量较低时,关闭对应从节点的 redis-server, 开启 valkey-server 并升级主节点
    • 因为原本是从节点,关闭不影响写入
    • systemctl disable --now redis-server@6379
    • systemctl enable --now valkey-server@6379
  • 此时,切换应用实例去使用额外 valkey-sentinel 集群的 26379 端口
    • 这部分指向了 valkey-server 主节点 6379 端口,写入不受影响
  • 后续把其他 redis-server 都关闭,开启从节点 valkey-server 即可
  • 比原本的中断时间要少
通过 redis-sentinel 检查集群状态
  • 假设 alpine 节点地址为 192.168.111~192.168.1.113
  • REDIS_SENTINEL_NAME=sentineladmin
  • REDIS_SENTINEL_PASSWORD=adminpasswd
  • redis-cli \ -u "redis://$REDIS_SENTINEL_NAME:$REDIS_SENTINEL_PASSWORD@192.168.1.111:26379?addr=192.168.1.112:26379&addr=192.168.1.113:26379" \ sentinel master mymaster
    • 查看从节点数目和 sentinel 实例数目
      • num-slaves
      • num-other-sentinels
  • redis-cli \ -u redis://$REDIS_SENTINEL_NAME:$REDIS_SENTINEL_PASSWORD@192.168.1.111:26379?addr=192.168.1.112:26379&addr=192.168.1.113:26379 \ sentinel sentinels mymaster
    • 查看其他 sentinels 情况
上一篇
Openwrt 系统交叉编译
下一篇
通过 k3s 部署轻量级 Kubernetes 集群

Comments
Loading...