一、Redis的持久化方案

  Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。

  Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。

【RDB方式】

  快照形式,定期把内存中当前时刻的数据保存到磁盘。Redis默认支持的持久化方案。

  在redis.conf配置文件中配置:

  

  Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。根据数据量大小与结构和服务器性能不同,这个时间也不同。通常将记录一千万个字符串类型键、大小为1GB的快照文件载入到内存中需要花费20~30秒钟。

  问题总结:

  通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。这就需要开发者根据具体的应用场合,通过组合设置自动快照条件的方式来将可能发生的数据损失控制在能够接受的范围。如果数据很重要以至于无法承受任何损失,则可以考虑使用AOF方式进行持久化。

【AOF方式】

  把所有对redis数据库操作的命令,增删改操作的命令。保存到文件中。数据库恢复时把所有的命令执行一遍即可。

  默认情况下Redis没有开启AOF(append only file)方式的持久化,可以通过appendonly参数开启:

  

  开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:appendfilename appendonly.aof

对比】

  RDB:可以设置间隔多长时间保存一次(redis不用任何配置默认的持久化方案)

    优点:让redis的数据存取速度变快

    缺点:服务器断电时会丢失部分数据(数据的完整性得不到保障)
  AOF:可以设置实时保存

    优点:持久化良好,能够保障数据的完整性

    缺点:大大降低了redis系统的存取速度

二、Redis集群的搭建

2.1 redis-cluster架构图

  

  redis-cluster投票:容错

   

  架构细节:

  (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

  (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

  (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

  (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,
然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

  

2.2 Redis集群的搭建

  Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。Redis集群至少需要6台服务器。

  搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006

【集群搭建环境】

  1. 使用ruby脚本搭建集群。需要ruby的运行环境。安装ruby:

    yum install ruby
    yum install rubygems 
  2. 安装ruby脚本运行使用的包。下载redis-3.0.0.gem,并上传到Linux系统中,然后执行命令:
    gem install redis-3.0.0.gem 

【搭建步骤】

  需要6个redis实例。运行在不同的端口7001-7006

  第一步:创建6个redis实例(redis/bin就是一个实例)

    • 创建一个文件夹(redis-cluster),里面装着6个redis实例
    • 将redis/bin(redis.conf放在bin目录下作为后端启动的配置文件)复制6份到redis-cluster文件夹中,并命名redis01-redis06
      cp redis/bin/ redis-cluster/redis01 -r

      

  第二步:修改6个redis节点的redis.conf,将端口号分别改为7001-7006,还需要把配置文件中的cluster-enabled yes前的注释去掉

    

    

  第三步:将redis源文件src目录下的redis-trib.rb文件复制到redis-cluster文件夹中

    

  第四步:编写集群启动和停止脚本,放在redis-cluster目录下

    • 启动脚本start-all.sh(使用vim start-all.sh命令创建文件并直接进入编辑状态)

      cd redis01
      ./redis-server redis.conf
      cd ..
      cd redis02
      ./redis-server redis.conf
      cd ..
      cd redis03
      ./redis-server redis.conf
      cd ..
      cd redis04
      ./redis-server redis.conf
      cd ..
      cd redis05
      ./redis-server redis.conf
      cd ..
      cd redis06
      ./redis-server redis.conf
      cd ..

      注意:新建的start-all.sh默认没有执行权限(x为可执行)

        

        赋予用户可执行的权限(chmod u+x start-all.sh)

        

    • 停止脚本stop-all.sh

      ./redis01/redis-cli -p 7001 shutdown
      ./redis02/redis-cli -p 7002 shutdown
      ./redis03/redis-cli -p 7003 shutdown
      ./redis04/redis-cli -p 7004 shutdown
      ./redis05/redis-cli -p 7005 shutdown
      ./redis06/redis-cli -p 7006 shutdown

    第五步:执行start-all.sh脚本,启动每个redis实例 

     

    第六步:使用ruby脚本搭建集群

./redis-trib.rb create --replicas 1 192.168.25.129:7001 192.168.25.129:7002 192.168.25.129:7003 192.168.25.129:7004 192.168.25.129:7005 192.168.25.129:7006

2.3 集群的使用方法

  使用redis提供的客户端,连接集群中任一节点即可

[root@localhost redis-cluster]# redis01/redis-cli -p  -c

  -c:代表连接的是redis集群

Redis学习笔记(5)—— Redis的持久化方案&Redis的集群搭建的更多相关文章

  1. Redis安装、主从配置及两种高可用集群搭建

    Redis安装.主从配置及两种高可用集群搭建 一.            准备 Kali Linux虚拟机 三台:192.168.154.129.192.168.154.130.192.168.154 ...

  2. Redis(二)CentOS7安装Redis4.0.10与集群搭建

    一 Redis单机安装 1 Redis下载安装 1.1 检查依赖环境(Redis是C语言开发,编译依赖gcc环境) [root@node21 redis-]$ gcc -v -bash: gcc: c ...

  3. redis学习笔记——RDB和AOF持久化一

    为防止数据丢失,需要将 Redis 中的数据从内存中 dump 到磁盘,这就是持久化.Redis 提供两种持久化方式:RDB 和 AOF.Redis 允许两者结合,也允许两者同时关闭. RDB 可以定 ...

  4. Redis学习笔记(八)——持久化

    一.介绍 Redis的所有的数据都存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为"半持久化模式"):也可以把每一次数据变化都写入到一个append only file(a ...

  5. 【转】Redis学习笔记(五)如何用Redis实现分布式锁(2)—— 集群版

    原文地址:http://bridgeforyou.cn/2018/09/02/Redis-Dsitributed-Lock-2/ 单机版实现的局限性 在上一篇文章中,我们讨论了Redis分布式锁的实现 ...

  6. K8S学习笔记之Kubernetes数据持久化方案

    在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath.configmap以及secret的机制和用途. 0x00 Emptydir EmptyDir是一个空目录, ...

  7. Redis学习笔记(二) ---- PHP操作Redis各数据类型

    Redis 一.使用PHP操作Redis存储系统中的各类数据类型方法 1.String(字符串)操作 <?php // 1. 实例化 $redis = new Redis; // 2. 连接 r ...

  8. Redis学习笔记(一)Windows下redis的安装和启动

    在Windows上安装redis 下载地址:https://github.com/microsoftarchive/redis/releases 选择图中红框标出来的下载,解压到磁盘上,文件夹命名为r ...

  9. K8S学习笔记之二进制的方式创建一个Kubernetes集群

    0x00 单节点搭建和简述 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境. 官方地址: ...

  10. 【K8S学习笔记】Part1:使用端口转发访问集群内的应用

    本文介绍如何使用kubectl port-forward命令连接K8S集群中运行的Redis服务.这种连接方式有助于数据库的调试工作. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同 ...

随机推荐

  1. fontconfig

    vlc-android 默认是 禁用 fontconfig 的 如果想要使用的话需要手动修改 compile.sh

  2. Github中README.md换行

    两个以上的空格,然后回车.我date

  3. Java更新

    Java I/O 总结 JVM(8):JVM知识点总览-高级Java工程师面试必备 细数JDK里的设计模式 Java中创建对象的5种不同方法 关于Java Collections的几个常见问题 类在什 ...

  4. Tensorflow递归神经网络学习练习

    import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data #载入数据集mnist = inpu ...

  5. opencv3更换图片背景

    #include <opencv2/opencv.hpp>#include <iostream> using namespace std;using namespace cv; ...

  6. java中什么是代码点,什么是代码单元?

    1.代码点&代码单元,是从Unicode标准而来的术语,Unicode标准的核心是一个编码字符集,它为每一个字符分配一个唯一数字.Unicode标准始终使用16进制数字,并且在书写时在前面加上 ...

  7. C# 实现文件(夹)在ftp服务器间的同步【无需将文件(夹)保存到本地】

    C#实现不同ftp服务器间文件(夹)同步 图1 实现不同ftp服务器间文件(夹)同步的实现思路图 /// <summary> /// 将文件夹1从ftp服务器1移到ftp服务器2文件夹2 ...

  8. review backpropagation

    The goal of backpropagation is to compute the partial derivatives ∂C/∂w and ∂C/∂b of the cost functi ...

  9. Charles常见问题汇总

    Charles是一款很好用的抓包修改工具,但是如果你不是很熟悉这个工具的话,肯定会遇到各种感觉很莫名其妙的状况,这里就来帮你一一解答下面再说说charles的一些其他常用的功能. 选择请求后,右键可以 ...

  10. 根据Value对Map中的对象进行排序

    背景 SortedMap的实现类TreeMap可以按自然顺序或自定义顺序遍历键(key),有时我们需要根据值(Value)进行排序,本文提供了一种简单实现思路. 实现 Comparator接口 使用V ...