redis cluster 迁移

redis cluster 迁移

准备

  • 迁移工具,redis shake – https://github.com/alibaba/RedisShake

生成dump文件

  • 找一个机器,可以访问被迁移redis cluster 的机器
  • wget https://github.com/alibaba/RedisShake/releases/download/release-v2.1.1-20210903/release-v2.1.1-20210903.tar.gz
  • tar -zxvf release-v2.1.1-20210903.tar.gz
  • cd release-v2.1.1-20210903
  • 修改配置,vi redis-shake.conf
        #配置source.type, source.address
        #示例
        source.type = cluster
        # 需要配置所有的master
        source.address = 10.1.xx.xx:6379;10.1.xx.xx:6379;10.1.xx.xx:6379
    
        # 更多的配置详情,https://github.com/alibaba/RedisShake/wiki/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%BD%BF%E7%94%A8%EF%BC%8C%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE%EF%BC%9F
    
  • 执行dump命令 : ./redis-shake.linux -conf=redis-shake.conf -type=dump
  • 文件下多了几个local_dump 文件

恢复数据

  • 一个可以访问目标redis cluster机器
  • wget https://github.com/alibaba/RedisShake/releases/download/release-v2.1.1-20210903/release-v2.1.1-20210903.tar.gz
  • tar -zxvf release-v2.1.1-20210903.tar.gz
  • cd release-v2.1.1-20210903
  • 把上面导出local_dump文件放到当前目录
  • 修改配置,vi redis-shake.conf
        #配置source.input.rdb, target.type, target.address
        #示例
        source.rdb.input = local_dump.0;local_dump.1;local_dump.2
        target.type = cluster
        # 需要配置所有的master
        target.address = 10.1.xx.xx:6379;10.1.xx.xx:6379;10.1.xx.xx:6379
    
        # 更多的配置详情,https://github.com/alibaba/RedisShake/wiki/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%BD%BF%E7%94%A8%EF%BC%8C%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE%EF%BC%9F
    
  • 执行restore命令 : ./redis-shake.linux -conf=redis-shake.conf -type=restore
  • check 数据是否正确

ps

  1. 迁移后验证同步的正确性的工具
    • https://github.com/alibaba/RedisFullCheck?spm=a2c6h.12873639.0.0.4b897495FRKWKh
  2. 阿里云机器 gcc升级
    • https://www.alibabacloud.com/help/zh/doc-detail/111881.htm
    • 依次运行以下命令可以安装软件包。
       # 先安装scl-utils
       sudo yum install -y scl-utils
       # 打开YUM仓库支持
       sudo yum install -y alinux-release-experimentals
       # 从YUM源安装您需要的软件包,以下示例命令同时安装了SCL插件方式支持的所有开发工具包
       sudo yum install -y devtoolset-7-gcc devtoolset-7-gdb devtoolset-7-binutils devtoolset-7-make
       sudo yum install -y devtoolset-8-gcc devtoolset-8-gdb devtoolset-8-binutils devtoolset-8-make
       sudo yum install -y devtoolset-9-gcc devtoolset-9-gdb devtoolset-9-binutils devtoolset-9-make
    
    • 安装成功后,您即可使用高版本的GCC以及相关工具。示例代码如下:
      # 先查看现有的SCL,需要指定库名,本示例代码中,库名为devtoolset-7
      scl -l devtoolset-7
      # 运行相关的SCL软件
      scl enable devtoolset-7 'gcc --version'
    
  3. 部署redis6.0.8集群
    • https://blog.51cto.com/net881004/2538344
<think>嗯,用户问的是关于Redis Cluster迁移时通过拷贝RDB和node.conf文件的方式,需要详细步骤和注意事项。首先我得回忆一下Redis Cluster的工作原理。Redis Cluster使用的是分片机制,数据分布在不同的节点上,每个节点负责一部分哈希槽。迁移的话,传统方法是使用reshard或者migrate命令,但用户这里提到的是直接拷贝RDB和配置文件,可能是在特定场景下需要快速迁移或者恢复数据。 那用户可能的情况是,他们有一个现有的Redis Cluster,想要把数据迁移到另一个集群,或者进行备份恢复。直接拷贝RDB和node.conf可能用于快速搭建相同数据的集群,或者迁移到新的硬件环境。不过需要注意,这种方法可能有一些限制,比如集群节点的配置必须一致,否则可能出现问题。 接下来需要考虑步骤。首先需要停止源集群的所有节点,确保RDB文件是最新的,或者如果在运行中,可能需要执行SAVE或BGSAVE命令生成最新的RDB。但停止服务可能影响线上业务,所以用户可能需要在低峰期操作。然后,拷贝RDB文件和node.conf到目标集群的节点,这里需要注意每个节点的RDB和配置文件必须对应正确的节点,否则会导致数据错乱。 然后配置目标节点的路径,确保RDB文件被正确加载。启动目标集群的各个节点,检查集群状态是否正常,比如是否所有的节点都正确加入集群,哈希槽是否分配正确。这里可能需要使用redis-cli的--cluster check命令来验证。 注意事项方面,版本一致性很重要,不同版本的Redis可能RDB格式不同,导致无法加载。节点配置的一致性,比如集群名称、端口、目录结构等,必须一致,否则节点无法正确识别集群信息。另外,如果目标集群的节点IP或端口有变化,可能需要修改node.conf中的节点信息,否则集群节点之间无法通信。这种情况下可能需要手动编辑配置文件,或者使用工具重新配置集群信息,但直接修改可能会有风险。 还需要注意,直接替换RDB文件可能会导致数据不一致,特别是在源集群还在运行的情况下。因此,必须确保在拷贝RDB文件时,源集群已经停止写入,或者RDB文件是最新的。另外,如果目标集群是新搭建的,需要确保集群的节点ID(node ID)与源集群一致,否则集群可能无法正确识别节点,导致故障转移和槽分配的问题。 可能的误区是用户可能认为直接拷贝文件就能完全迁移,但实际上还需要处理集群的元数据,比如节点信息和槽分配。如果目标集群的结构与源集群不同(比如节点数量不同),这种方法可能不适用,需要重新分片或者调整配置。 总结步骤的话,应该是:1. 停止源集群节点或生成RDB;2. 拷贝文件到目标节点;3. 调整目标节点配置;4. 启动目标节点并检查集群状态。注意事项包括版本、配置、节点信息的一致性,以及可能的IP/端口变化处理。</think>### Redis Cluster 通过文件拷贝迁移的详细步骤 #### **核心原理** Redis Cluster 的节点数据(RDB)和集群元数据(node.conf)可通过文件直接迁移,但需保证**集群拓扑一致**(节点数量、IP、端口、node-id 等完全一致)。适用于**相同架构的集群恢复或迁移**。 --- ### **一、迁移步骤** #### 1. **停止源集群节点** ```bash # 依次关闭所有节点(确保数据落盘) redis-cli -p <port> shutdown save ``` #### 2. **拷贝关键文件** - **源文件路径**: - **RDB 文件**:由 `dir` 配置项指定,默认 `dump.rdb` - **节点配置文件**:由 `cluster-config-file` 指定,默认 `nodes.conf` - **操作**: ```bash # 将 RDB 和 nodes.conf 从源节点拷贝到目标节点相同路径 scp /path/to/source/dump.rdb user@target:/path/to/target/ scp /path/to/source/nodes.conf user@target:/path/to/target/ ``` #### 3. **配置目标节点** - 确保目标节点的以下配置与源集群**完全一致**: ```conf cluster-enabled yes cluster-node-timeout <相同值> dir /path/to/same_directory # RDB 和 nodes.conf 的存储路径 ``` #### 4. **启动目标集群** ```bash # 在所有目标节点启动 Redis redis-server /path/to/redis.conf ``` #### 5. **验证集群状态** ```bash # 检查集群是否正常 redis-cli --cluster check <target-ip>:<port> ``` - 预期输出:所有 slots 为 `OK`,节点角色一致。 --- ### **二、关键注意事项** #### 1. **强制约束条件** - **节点一致性**:目标集群的节点数量、IP、端口、node-id 必须与源集群**完全一致**(node-id 存储在 `nodes.conf` 中)。 - **Redis 版本一致**:不同版本的 RDB 文件格式或集群协议可能不兼容。 #### 2. **风险规避** - **停机操作**:迁移过程中需停止源集群写入,避免数据不一致。 - **文件权限**:目标节点的 RDB 和 `nodes.conf` 文件权限需与 Redis 进程用户匹配。 #### 3. **特殊场景处理** - **IP/端口变更**:若必须修改 IP 或端口,需手动编辑 `nodes.conf` 中的节点地址(高风险!需彻底测试)。 ```conf # 示例:修改 nodes.conf 中的节点地址 c6b93e4... 10.0.0.1:6379@16379 myself,master - 0 1680000000000 3 connected 0-5460 # 改为 ↓ c6b93e4... 10.0.0.2:6380@16380 myself,master - 0 1680000000000 3 connected 0-5460 ``` #### 4. **替代方案建议** - **拓扑不一致时**:优先使用 `CLUSTER MEET` + `--cluster reshard` 在线迁移- **增量同步**:通过 `redis-cli --cluster import` 工具实现不停机迁移--- ### **三、常见问题排查** 1. **集群状态异常**: - 检查 `nodes.conf` 中的节点列表是否完整。 - 执行 `CLUSTER INFO` 确认 `cluster_state:ok`。 2. **数据未加载**: - 确认 RDB 文件路径和文件名与 `dir` 配置匹配。 - 检查 Redis 日志中是否有 `DB loaded from disk` 提示。 --- ### **总结** 文件拷贝迁移适用于**严格一致的集群环境**,优点是速度快,但灵活性低。若需修改集群拓扑,建议采用 Redis 官方工具链(如 `redis-cli --cluster`)进行在线迁移
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值