redis主从同步_redis主从同步集群 - CSDN
  • Redis主从同步

    2020-04-07 16:00:12
    CAP原理 C - consistent,一致性 A - Availability, 可用性 P - Patition tolerance,分区容忍...在网络分区发生时,两个分布式节点之间无法进行通信,我们对一个节点进行的修改操作将无法同步到另一个节点,所以...

    CAP原理

    • C - consistent,一致性
    • A - Availability, 可用性
    • P - Patition tolerance,分区容忍性

    分布式系统的节点往往都是分布在不同的机器上进行网络隔离开的,这意味着必然会有网络断开的风险,这个网络断开的场景的专业词汇叫做“网络分区

    在网络分区发生时,两个分布式节点之间无法进行通信,我们对一个节点进行的修改操作将无法同步到另一个节点,所以数据的一致性将无法满足,因为两个分布式节点的数据不再保持一致,除非我们牺牲高可用,也就是暂时分布式节点服务,在网络分区发生时,不再提供修改数据的功能,直到网络状态完全恢复正常再继续对外提供服务。

    在这里插入图片描述

    一句话概括CAP原理就是------------网络分区发生时,一致性和可用性两难全

    最终一致

    Redis 的主从数据是异步同步的,所以分布式的 Redis 系统并不满足「一致性」要求。当客户端在 Redis 的主节点修改了数据后,立即返回,即使在主从网络断开的情况下,主节点依旧可以正常对外提供修改服务,所以 Redis 满足「可用性」。

    Redis 保证「最终一致性」,从节点会努力追赶主节点,最终从节点的状态会和主节点的状态将保持一致,如果网络断开了,主从节点的数据将会大量不一致,一旦网络恢复,从节点会采用多种策略努力追赶上落后的数据,继续尽力保持和主节点一致

    主从同步

    Redis 同步支持主从同步和从从同步,从从同步功能是 Redis 后续版本增加的功能,为了减轻主库的同步负担。后面为了描述上的方便,统一理解为主从同步。

    在这里插入图片描述

    增量同步

    Redis 同步的是指令流,主节点会将那些对自己的状态产生修改性影响的指令记录在本地的内存buffer中,然后异步将buffer中的指令同步到从节点,从节点一边执行同步的指令流来达到和主节点一样的状态,一遍向主节点反馈自己同步到哪里了(偏移量)

    在这里插入图片描述

    因为内存的buffer是有限的,所以Redis主库不能将所有的指令都记录在内存buffer中,Redis的复制内存buffer是一个定长的环形数组,如果数组内存满了,就会从头覆盖前面的内容

    如果因为网络状态不好,从节点在短时间内无法和 主节点进行同步,那么当网络状态恢复时,Redis的主节点中那些没有同步的指令在buffer中可能已经被后续的指令覆盖掉了,从节点将无法直接通过指令来进行同步,这个时候就需要用到更加复杂的同步机制------快照同步

    快照同步(全量同步)

    快照同步是一个非常耗费资源的操作,它首先需要在主库上进行一次bgsave将当前内存的数据全部快照到磁盘文件中,然后再将快照文件的内存全部传送到从节点,从节点将快照文件接受完毕后,立即执行一次全量加载,加载之前先要将当前内存的数据清空,加载完毕后通知主节点继续进行增量同步

    在整个快照同步进行的过程中,主节点的复制buffer还在不停的往前移动,如果快照同步的时间过长或者复制buffer太小,都会导致同步期间的增量指令在复制buffer中被覆盖,这样就会导致快照同步完全后无法进行增量复制,然后会再次发起快照同步,如此极有可能会陷入快照同步的死循环。

    在这里插入图片描述

    所以务必配置一个合适的复制 buffer 大小参数,避免快照复制的死循环。

    增加从节点

    当从节点刚刚加入到集群时,它必须先要进行一次快照同步,同步完成后再继续进行增量同步。

    无盘复制

    主节点在进行快照同步时,会进行很重的文件 IO 操作,特别是对于非 SSD 磁盘存储时,快照会对系统的负载产生较大影响。特别是当系统正在进行 AOF 的 fsync 操作时如果发生快照,fsync 将会被推迟执行,这就会严重影响主节点的服务效率。
    所以从 Redis 2.8.18 版开始支持无盘复制。所谓无盘复制是指主服务器直接通过套接字将快照内容发送到从节点,生成快照是一个遍历的过程,主节点会一边遍历内存,一遍将序列化的内容发送到从节点,从节点还是跟之前一样,先将接收到的内容存储到磁盘文件中,再进行一次性加载。

    Wait 指令

    Redis 的复制是异步进行的,wait 指令可以让异步复制变身同步复制,确保系统的强一致性 (不严格)。wait 指令是 Redis3.0 版本以后才出现的。

    set key value
    OK
    wait 1 0
    (integer) 1

    wait 提供两个参数,第一个参数是从库的数量 N,第二个参数是时间 t,以毫秒为单位。它表示等待 wait 指令之前的所有写操作同步到 N 个从库 (也就是确保 N 个从库的同步没有滞后),最多等待时间 t。如果时间 t=0,表示无限等待直到 N 个从库同步完成达成一致。
    假设此时出现了网络分区,wait 指令第二个参数时间 t=0,主从同步无法继续进行,wait 指令会永远阻塞,Redis 服务器将丧失可用性。

    小结

    主从复制是 Redis 分布式的基础,Redis 的高可用离开了主从复制将无从进行。

    展开全文
  • 一构建:1.两台centos7服务器: 192.168.1.100和192.168.1.1152. 安装必须的软件包:yum install gcc gcc-c++ kernel-devel automake autoconf libtool make wget tcl ... 下载redis源码包并安装:wget http://...

    一构建:

    1.两台centos7服务器:

          192.168.1.100192.168.1.115

    2. 安装必须的软件包:

    yum install gcc gcc-c++ kernel-devel automake autoconf libtool make wget tcl vim ruby rubygems unzip git -y

    3. 下载redis源码包并安装:

    wget http://download.redis.io/releases/redis-3.2.3.tar.gz

    tar -zxvf redis-3.2.3.tar.gz

    cd redis-3.2.3

    make && make install

    4.将redis目录转移至/usr/loacl/redis下:

    (1).创建redis目录:

    cd /usr/local

    mkdir -p redis/bin

    mkdir -p redis/etc

    (2) .将源码包下面的reids.conf 复制到新建的etc下,将源码包下面的src目录中的redis-server redis-cli  redis-check-aof redis-benchmark mkreleasehdr.sh 文件复制到新建的bin目录下:

      cd /usr/local/redis

      cp /root/redis-3.2.3/redis.conf etc/

      cd /root/redis-3.2.3/src/

      cp redis-server redis-cli redis-check-aof redis-benchmark mkreleasehdr.sh /usr/local/redis/bin/

    5.配置redis主从复制:

    (1) .在主机192.168.1.100(主)的配置:





    (2).在主机192.168.1.115(从)上的配置:

    至此,主从配置完成,进入/usr/local/redis启动两台实例:

           bin/redis-server etc/redis.conf  

    此时的redis启动直接占据控制台,我们可以将其修改为后台启动,ctrl+c关闭redis,编辑etc目录下的redis.cnf文件将daemonize no改为daemonize yes,重新启动即可

    使用命令查看主从复制状态:




    至此,主从配置完成,进入/usr/local/redis启动两台实例:

           bin/redis-server etc/redis.conf  

    此时的redis启动直接占据控制台,我们可以将其修改为后台启动,ctrl+c关闭redis,编辑etc目录下的redis.cnf文件将daemonize no改为daemonize yes,重新启动即可

    使用命令查看主从复制状态:

    显示

    指定在执行故障转移时,最多可以有多少个Slave同时对新的Master进行同步。这个数字设置为1,虽然完成故障转移所需的时间会变长,但是可以保证每次只有1个Slave处于不能处理命令请求的状态。

    状态为:192.168.1.100为master,192.168.1.115为slave

    6. 使用哨兵(Sentinel)进行主从间的故障自动切换,我们在192.168.1.100上搭建sentinel(哨兵)

               cd /root/redis-3.2.3/

               cp sentinel.conf /usr/local/redis/etc/

               cd /usr/local/redis/etc/

               vim sentinel.conf

    (1).路径:


    (2).指定sentinel去监视一个名为mymaster的Master,Master的IP地址为192.168.1.100

    (3).如果redis有登陆密码的话必须配置这项参数:


    (4)连接192.168.1.100的redis的密码

    (5).指定Sentinel判定Master断线的时间。(单位为毫秒,判定为主观下线SDOWN)


    (6).如果在该时间(ms)内未能完成failover(即故障时master/slave自动切换

    )操作,则认为该failover失败。

    指定在执行故障转移时,最多可以有多少个Slave同时对新的Master进行同步。这个数字设置为1,虽然完成故障转移所需的时间会变长,但是可以保证每次只有1个Slave处于不能处理命令请求的状态。

    sentinel parallel-syncs my mymaster 1

    我们可以看到主为192.168.1.100,从为192.168.1.115,接下来验证故障切换功能:




    当我们关闭主时,master自动变为192.168.1.115,我们重新启动192.168.1.115时,发现192.168.1.115已经变为slave服务器,至此哨兵模式的故障切换完成(可在主从上同时部署哨兵)。

    附加:

       登陆redis的命令:

    bin/redis-cli -h 192.168.1.100 -p 6379 -a pwd@123

    bin/redis-cli -h 192.168.1.115 -p 6380 -a pwd@123

    bin/redis-cli -h 192.168.1.100 -p 6379 -a pwd@123 info replication

     

    bin/redis-cli -h 192.168.1.115 -p 6380 -a pwd@123 info replication





    展开全文
  • Redis主从同步原理-SYNC

    2019-05-18 16:13:19
    和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构... Redis主从复制可以根据是否是全量分为全量同步和增量...

    原文地址:https://blog.csdn.net/sk199048/article/details/50725369

    和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下图为级联结构。 

    Redis主ä»ç»æ 

     Redis主从复制可以根据是否是全量分为全量同步和增量同步。

    1 全量同步
      Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下: 
      1)从服务器连接主服务器,发送SYNC命令; 
      2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 
      3)主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 
      4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 
      5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 
      6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令; 

     

     Rediså¨éåæ­¥è¿ç¨

    完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。

    2 增量同步
      Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。 
    增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

    3 Redis主从同步策略
      主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

    4 其他
    Redis 2.8以后提供了PSYNC优化了断线重连的效率 
    http://blog.csdn.net/sk199048/article/details/77922589

    参考:
    [1] 《Redis IN ACTION》 
    [2] http://blog.csdn.net/houjixin/article/details/27680183 
    [3] http://daoluan.net/blog/2014/04/22/decode-redis-replication/

     

    展开全文
  • 说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶主从概念 一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此... master和slave都是一个redis实例(redis服务) 二...

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

    一丶主从概念

    • 一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构
    • master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1
    • 通过主从配置可以实现读写分离
    • master和slave都是一个redis实例(redis服务)

     二丶主从配置

    说明:搭建redis主服务和从服务可以在同一台电脑上搭建,也可以在不同电脑上搭建,博主这里使用一台电脑进行搭建

    1.配置主

    • step1 查看电脑中的ip地址

    • step2 编辑redis配置文件sudo vi /etc/redis/redis.conf,绑定本机IP地址,不要写127.0.0.1

    • step3 重启redis服务,查看redis服务,出现配置的IP地址以及默认端口号6379

    2.配置从

    • step1 复制etc/redis/redis.conf文件命名为slave.conf,用作于从服务配置文件,该配置文件名字随便起

    • step2 编辑slave.conf配置文件sudo vi slave.conf,需要配置三个地方,分别是绑定ip和端口号以及主从复制(类似于双机备份),因为博主这里使用的是同一台电脑,所以ip不用动,端口号不能与主服务的端口号一致博主这里改的6378,slaveof 配置主服务的ip(也就是本地ip)端口号为6379

    • step3 启动从服务,即redis启动配置文件为slave.conf

    3.查看主从关系

    • step1 执行redis-cli -h 192.168.4.63 info Replication 命令查看主服务角色信息,没写端口-p 6379因为不写默认为此端口

    • step2 redis-cli -h 192.168.4.63 -p 6378 info Replication 命令查看从服务角色信息

    三丶数据操作

    1.连接到主服务(master),在主上设置键和值

    2.连接到从服务(slave),在从上获取主上设置的键的值

    3.在从服务上(slave)设置键值,提示该服务只有读的权限,主从配置成功

    展开全文
  • Redis系列--主从同步

    2020-04-20 15:35:00
    Redis为了解决单点故障带来的数据安全问题,和提高读数据操作的高并发性,实现了一主多从的主从同步机制,即部署一个master节点负责读写操作及向slave节点同步数据,部署多个slave节点负责读操作及接收来自master...

    Redis为了解决单点故障带来的数据安全问题,和提高读数据操作的高并发性,实现了一主多从的主从同步机制,即部署一个master节点负责读写操作及向slave节点同步数据,部署多个slave节点负责读操作及接收来自master节点的同步操作命令。

    主从同步配置:

    主从同步机制的配置还是比较简单的:在slave节点的redis.conf配置文件中配置slaveof masterip masterport选项或者直接使用slaveof masterip masterport命令(在Redis 5.0版本后,使用replicaof命令),我们还可以配置slave节点的只读性:slave-read-only yes。

    需要注意的是:在主从同步模式下,即便master节点宕机了,slave节点也不会变为master节点进行写操作,必须配合哨兵机制或者集群模式来实现高可用,主从同步只是高可用的基础。

    主从同步的优点:

    • 以多个数据副本冗余的方式,实现数据的热备份。
    • 避免了单点故障的数据安全问题。
    • 读写分离,负载均衡,提高性能及并发性。
    • slave节点只归属一个master节点,数据单向流动。

    主从同步策略:

    1、全量同步:也叫快照同步,一般发生在slave节点初始化阶段,或者slave节点与master节点连接断开,重新连接后,有可能需要把master节点的全部数据复制一份。

    • slave向master发送sync命令。
    • master执行bgsave命令生成rdb文件,并将后续接收到的命令写缓存区。
    • bgsave执行完毕,master将rdb文件发送给slave,slave载入rdb文件。
    • master将缓存区的命令发送给slave执行。

    我们可以看出:全量同步的开销很大,master生成rdb文件、向slave发送rdb文件、slave载入rdb文件都会消耗大量的资源,因此,除非不得已或者必要,不要执行sync命令。

    2、命令传播:在完成全量同步后,slave节点就和master节点的状态保持一致了,但是当master节点接收了写命令,状态变为不一致,master节点需要将导致状态不一致的命令发送给slave节点去执行,将状态恢复成一致。

    3、增量同步:在2.8版本之前,slave节点与master节点断线重连后,需要进行全量同步,这种做法是非常低效的,为了解决这个问题,Redis 2.8版本实现了psync命令,psync命令有两种模式:

    • 完整增量同步(full resynchronization):过程和全量同步基本一致,主要用来完成slave节点的初次数据同步。
    • 部分增量同步(partial resynchronization):主要用在slave与master断线重连后,master将断线期间的写命令发送给slave节点执行,保持状态一致。

    (1)组成部分:

    • 复制偏移量offset:master和slave上分别维护一个复制偏移量,通过比对偏移量就可以知道master和slave状态是否一致。
    • 复制缓冲区:由master维护的一个固定长度的FIFO队列,存放写命令,因为长度固定,所以只能存放最近的命令,后入队的命令会将先入队的命令弹出队列。
    • 实例ID:master和slave都有一个运行ID。

    (2)实现细节:

    • master进行命令传播时,除了将写命令发送slave之外,还将写命令放入复制缓冲区。
    • master每执行一次写命令,就将自己的offest+N,N为写命令占用的字节数,复制缓冲区会为队列上的每个字节记录相应偏移量。
    • slave每次接收一条写命令,也会将自己的offset+N,N为写命令的字节数。如果master和slave上的offset一致,说明两者状态是一致的,反之则不一致。
    • 当slave断线重连后,发送psync命令,向master报告自己当前的offset,master判断报告的offset是否还在复制缓冲区内,如果在则发起部分增量同步,发送位于offset之后的写命令即可,如果不在,说明命令丢失,发起完整增量同步。
    • 实例ID在节点启动时产生,由40个随机的16进制组成,当slave首次从master复制数据时,master将自己的ID发送给slave,由slave保持;当slave断线重连时,会将自己保存的ID发送给重连接的master,master判断ID与自己的ID是否一致,如果一致,说明master没改变,尝试部分增量同步,如果不一致,说明master已经改变,需要完整增量同步。

    (3)复制缓冲区的大小:

    • 复制缓冲区的大小默认为1M,当master执行大量写命令或者slave断线时间较长时都会使队列溢出,从而导致增量同步的无效,因此需要预计和设置复制缓冲区的大小,才能使增量同步发挥作用。

     

    主从同步是Redis实现高可用的基础,了解了主从同步的原理和方式,对学习Redis高可用会有很大的帮助。

    PS:如有任何问题或疑问,请留言告诉我。


    喜欢这篇文章的朋友,欢迎关注公众号,第一时间收到更新内容。

    展开全文
  • 一、Redis 介绍 Redis是一个开源的使用ANSI C语言编写、...区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步Redis 是一个高性能的k...
  • 主从模式可以保证redis的高可用,那么redis是怎么保证主从服务器的数据一致性的,接下来我们浅谈下redis主(master)从(slave)同步的原理。 2.初次全量同步 当一个redis服务器初次向主服务器发送salveof命令时,redis...
  • Redis复制:主从同步

    2019-03-07 11:22:25
    一、概述 在高并发服务当中,如果使用单个Redis实例,由于Redis采用单进程单线程处理所有请求的方式,即每次只有一个请求在处理,后面的请求排队,如果前面请求执行时间长了,则会影响后面所有...Redis主从同步...
  • Redis-18Redis主从同步

    2019-11-13 19:56:04
    文章目录概述主从同步Redis主从同步配置主服务器从服务器Redis主从同步过程缺点 概述 尽管 Redis 的性能很好,但是有时候依旧满足不了应用的需要,比如过多的用户进入主页,导致 Redis 被频繁访问,此时就存在大量的...
  • Redis主从同步原理

    2018-08-07 17:09:41
    Redis主从同步原理-SYNC  和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下...
  • # redis主从同步

    2018-08-30 09:45:24
    redis主从同步 主从原因 主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承担。 redis的主从同步是异步进行的,这意味着主从同步不会影响主逻辑,也不会...
  • 日常工作中使用的Redis集群是一主多从的架构模型(如下图,主1+主2组成一套完整的数据),当主1发生宕机时,会切写到从(为了方便制作预案主1主2会同时切,分别切向从1从2作为新的...Redis主从同步分为两种机制:全...
  • 今天想和大家分享有关 Redis 主从同步(也称「复制」)的内容。 我们知道,当有多台 Redis 服务器时,肯定就有一台主服务器和多台从服务器。一般来说,主服务器进行写操作,从服务器进行读操作。 那么这里有存在一个...
  • redis 主从同步配置

    2018-04-16 15:30:34
    参考:https://blog.csdn.net/github_26672553/article/details/69568259这个基本已经写清晰了,不过还是有所欠缺:slaveof x.x.x.x 6379masterauth masterPwd masterauth命令:设置主库密码redis主从同步方式和...
  • redis主从同步

    2020-05-27 22:17:49
    psync 命令的使用方式:主节点会根据 runid 和 offset 决定返回结果:三、全量复制四、部分复制五、心跳六、总结Redis主从同步策略注意点:主从复制的特点主从同步时的几个问题当主服务器不能持久化时复制的安全性...
  •         &...Redis主从同步原理-PSYNC 1、PSYNC < runid> < offset> 请求数据同步
  • Redis主从同步原理-SYNC 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下图...
  • redis主从架构中,Master节点负责处理写请求,Slave节点只处理读请求。对于写请求少,读请求多的场景,例如电商详情页,通过这种读写分离的操作可以大幅提高并发量,通过增加redis从节点的数量可以使得redis的QPS...
  • Redis主从同步原理 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下图为...
  • 本文介绍使用Redis主从同步功能(master, slave),使程序实现读写分离,避免io瓶颈,提高数据读写效率。 Redis支持一个master服务器对多个slave服务器同步,同步使用发布/订阅机制。 1个master对多个slave,还...
1 2 3 4 5 ... 20
收藏数 41,966
精华内容 16,786
关键字:

redis主从同步