`
pyl1164
  • 浏览: 5167 次
社区版块
存档分类
最新评论

redis集群持久化数据重启恢复

阅读更多
网上已有很多关于redis的集群部署方案的文章,这里就直接忽略了。
目前考虑redis集群宕机后,如果有数据是持久化了的,那么重启的时候如何恢复呢?
网上给的答案都是使用dump.rdb或者aof方案来实现
    
  • 修改redis_*.conf配置文件,屏蔽aof方案的持久化方式
  •        
               # AOF and RDB persistence can be enabled at the same time without problems.
               # If the AOF is enabled on startup Redis will load the AOF, that is the file
               # with the better durability guarantees.
               appendonly no
            

        
  • 修改redis_*.conf配置文件,设置dump方式备份文件名称,每个节点文件不能相同,否则会覆盖
  •         
                # The filename where to dump the DB
                dbfilename "dump_20000.rdb"
             

       使用以上文件重启redis cluster时会明确提示启动失败:
          
    [ERR] Node 127.0.0.1:20000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0. 

       根据以上内容再次排查发现,给的方案普遍是删除相关文件,但是这样就无法实现题目中的目的。
       [最终] 通过对redis-cli --cluster 的不同命令进行尝试,发现需要对每个节点进行check就可以恢复集群模式,不需要用create来重新构建集群。因为create和add-node都需要保证节点数据为空【以下方式正常情况是无需操作的,直接启动对应端口的服务即可,因为node_2000.conf已生成】
        
           redis-cli --cluster check 127.0.0.1:20000 
           redis-cli --cluster check 127.0.0.1:20001
           redis-cli --cluster check 127.0.0.1:20002
           redis-cli --cluster check 127.0.0.1:20003
           redis-cli --cluster check 127.0.0.1:20004
           redis-cli --cluster check 127.0.0.1:20005
         


       以下是centos下的redis无数据启动和持久化重启脚本

        
  • redis_clear_restart.sh
  •     
    for p in `ps -ef|grep /usr/local/bin/redis-server | awk '{print $2"_"$3}'`
    do
      a=`echo $p |awk -F _ '{print $1}'`
      b=`echo $p |awk -F _ '{print $2}'`
      if [ $b == "1" ]; then
         echo "kill -9 $a `kill -9 $a` "
      fi
    done
    echo "rm -rf appendonly_*.aof dump_*.rdb nodes-2000*.conf"
    rm -rf appendonly_*.aof dump_*.rdb  nodes-2000*.conf
    
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20000.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20001.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20002.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20003.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20004.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20005.conf
    /usr/local/bin/redis-cli -a 123456 --cluster create --cluster-replicas 1 127.0.0.1:20000 127.0.0.1:20001 127.0.0.1:20002 127.0.0.1:20003 127.0.0.1:20004 127.0.0.1:20005 <<EO
    F
    yes
    EOF
         
        

        
  • redis_dump_restart.sh
  •     
    for p in `ps -ef|grep /usr/local/bin/redis-server | awk '{print $2"_"$3}'`
    do
      a=`echo $p |awk -F _ '{print $1}'`
      b=`echo $p |awk -F _ '{print $2}'`
      if [ $b == "1" ]; then
         echo "kill -9 $a `kill -9 $a` "
      fi
    done
    echo "rm -rf appendonly_*.aof dump_*.rdb nodes-2000*.conf"
    rm -rf appendonly_*.aof dump_*.rdb  nodes-2000*.conf
    
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20000.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20001.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20002.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20003.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20004.conf
    /usr/local/bin/redis-server /home/sysusr/redis/redis-cluster/redis-20005.conf
    
    /usr/local/bin/redis-cli -a 123456 --cluster check 127.0.0.1:20000
    /usr/local/bin/redis-cli -a 123456 --cluster check 127.0.0.1:20001
    /usr/local/bin/redis-cli -a 123456 --cluster check 127.0.0.1:20002
    /usr/local/bin/redis-cli -a 123456 --cluster check 127.0.0.1:20003
    /usr/local/bin/redis-cli -a 123456 --cluster check 127.0.0.1:20004
    /usr/local/bin/redis-cli -a 123456 --cluster check 127.0.0.1:20005
         
        
     
         不确定该方法在生产环境上是否存在缺陷或者有效?【本内容为原创,转载请注明出处】
    分享到:
    评论

    相关推荐

      Redis集群弱/空密码问题整改

      将配置密码持久化到redis配置文件,redis集群重启密码依然有效。 注:此方式无需重启redis集群服务密码即可生效。 客户端连接配置需要修改为新密码,并将客户端密码进行加密处理,客户端加密方式见第3部分。 2.空...

      Redis面试题50道(含答案)_.pdf

      36、Redis 持久化数据和缓存怎么做扩容? 37、分布式 Redis 是前期做还是后期规模上来了再做好?为 什么? 38、Twemproxy 是什么? 39、支持一致性哈希的客户端有哪些? 40、Redis 与其他 key-value 存储有什么不同...

      基于docker-compose一键离线部署redis6.2.8哨兵集群工具

      3、支持redis哨兵集群数据、日志、配置文件持久化 4、支持数据目录、日志目录、端口、密码参数灵活配置 5、支持创建、启动、停止、重启、检测、卸载redis哨兵集群 说明:工具使用非常简单,只需要修改变量文件,一...

      基于docker-compose一键离线部署redis6.2.8 cluster集群工具

      3、支持redis cluster集群数据、日志、配置文件持久化 4、支持数据目录、日志目录、端口、密码参数灵活配置 5、支持创建、启动、停止、重启、检测、卸载redis cluster集群 说明:工具使用非常简单,只需要修改变量...

      redisStudy.zip

      redis 支持rdb和aof两种持久机制,redis4.0后支持混合持久化。rdb是定时的持久机制,宕机有可能会丢失最后一次持久化之后存在数据丢失。aof是基于操作日志追加的持久机制。(基本回答) 加分项: 1.rdb持久化原理 ...

      基于ansible一键离线部署redis6.2.8容器版cluster集群工具

      1、支持 1台主机 一键远程部署redis cluster伪集群(三主三从)。 2、支持 2台主机 一键远程部署redis cluster 分布式集群(三主三从)。 3、支持 3台主机 一键远程...9、 支持数据目录、日志目录、配置文件等持久化。

      基于ansible一键离线部署redis6.2.8容器版哨兵集群工具

      实现功能如下: 1、支持 1台主机 一键远程部署redis 哨兵伪集群(一主两从三哨兵)。 2、支持 2台主机 一键远程部署redis 哨兵 分布式集群(一主两从三哨兵)。...9、 支持数据目录、日志目录、配置文件等持久化。

      redis源码资源下载

      Redis以其丰富的数据结构、高性能、持久化特性、复制、集群以及发布/订阅等特性而闻名。 以下是Redis的一些主要特点: 数据结构丰富:Redis支持多种数据结构,包括字符串(string)、哈希(hash)、列表(list)、...

      Redis 7.0.2 版本,解压缩即可安装。

      当Redis启动时,总是建立一个AOF文件用于持久化。 降低了长期没有响应客户(idle, stale client)的内存使用。 降低了在客户回复数据包中的对于写的系统调用次数,也同时降低了TCP packet的数目。 新增了对RESP3类型的...

      redis-5.0.8.7z

      Redis特别好用,BloomFilter、RedisSearch、Redis-ML、String、Hash、List、Set、SortedSet、HyperLogLog、GEO、pub/sub、持久化(RDB/AOF)、pipeline、同步、集群、事务(哨兵机制)、分片等。

      redis7.0.7-release.rar

      1. RedisFunctions:一种新的方式用于Redis server端脚本,它不同于以前版本支持的Lua脚本, Redis Functions可支持持久化,可复制,并且在节点重启之后可以直接从server端读取。 我们会在后续的博客中详细介绍...

      Redis有哪些功能?

      2、如果电脑重启,写入内存的数据是不是就失效了呢,这时Redis还提供了持久化的功能。 3、哨兵(Sentinel)和复制 Sentinel可以管理多个Redis服务器,它提供了监控、提醒以及自动的故障转移功能; 复制则是让...

      关于Redis的若干问题

      (1)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启时可以再次加载进行使用。 (2)Redis不仅仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash等数据结构的存储。 (3)Redis支持...

      redis基础一(安装、常用命令等)

      1、redis是什么? Redis是一个高性能的key/value 非关系型的内存数据库,基于C语言编写。...1)、Redis支持数据的持久化,可以把数据保存到磁盘上,重启的时候可以再次加载数据进行使用,也可以数据缓存下来

      Java常见面试题208道.docx

      165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几? 166.如何获取当前数据库版本? 167.说一下 ACID 是什么? 168.char 和 varchar 的区别是什么? 169...

      RabbitMQ在分布式系统的应用

      当RabbitMQ退出时,默认会将消息和队列都清除,所以需要在第一次声明队列和发送消息时指定其持久化属性为true,这样RabbitMQ会将队列、消息和状态存到RabbitMQ本地的数据库,重启后会恢复。客户端接收消息的模式默认...

      JAVA上百实例源码以及开源项目源代码

       Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

      java开源包1

      Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

      java开源包11

      Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    Global site tag (gtag.js) - Google Analytics