redis主从复制

1、什么是主从复制

     Redis持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障   

说明:

    1、主redis中的数据有两个副本(redis1 和redis2) 即使一台redis服务器宕机其他两台redis服务器也可以继续提供服务

   2、主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。只有一个主redis,可以有多个从redis。主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求。一个redis可以即是主又是从

2、主从配置

   主redis配置(无需特殊配置)

   从redis配置(修改从redis服务器上的redis.conf文件,添加slaveof  主redis的IP和端口)

3、复制过程

  3.1、完整复制

       在redis2.8版本之前主从复制过程如下

  

      1、Slave服务启动,slave会建立和master的链接,发送sync命令

       2、master启动一个后台进程将数据库快照保存到RDB文件中

         注意:此时如果生成RDB文件过程中存在写数据操作会导致RDB文件和当前主redis数据不一致,所以此时master 主进程会开始收集写命令并缓存起来。

      3、master就发送RDB文件给Slave

     4、slave将文件保存到磁盘上,然后加载到内存恢复

     5、master把缓存的命令发给slave

          注意:后续master 收到的写命令都会通过开始建立的连接发送给slave。

        当master 和slave 的连接断开时slave 可以自动重新建立连接。如果master 同时收到多个slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有slave。

  完整复制的问题:

  在redis2.8之前从redis每次同步都会从主redis中复制全部的数据,如果从redis是新创建的从主redis中复制全部的数据这是没有问题的,但是,如果当从redis停止运行,再启动时可能只有少部分数据和主redis不同步,此时启动redis仍然会从主redis复制全部数据,这样的性能肯定没有只复制那一小部分不同步的数据高。

3.2、部分复制

 

部分复制说明:

  从机连接主机后,会主动发起 PSYNC(部分同步)命令,从机会提供 master的runid(机器标识,随机生成的一个串) 和 offset(数据偏移量,如果offset主从不一致则说明数据不同步),主机验证 runid 和 offset 是否有效, runid 相当于主机身份验证码,用来验证从机上一次连接的主机,如果runid验证未通过则,则进行全同步,如果验证通过则说明曾经同步过,根据offset同步部分数据。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 浅谈Redis主从复制 2013.09.27 11:27:00 来源: 京东 作者:张成远 ( 0 条评论 )...
    epime阅读 3,630评论 0 2
  • 写在前面 在分布式环境中,数据副本 (Replica) 和复制 (Replication) 作为提升系统可用性和读...
    YoungChen__阅读 5,808评论 2 1
  • 本篇就一下方面展开分析 如何使用主从复制? 主从复制的原理(重点是全量复制和部分复制、以及心跳机制) 实际应用中需...
    lucode阅读 4,558评论 0 5
  • 单机有什么问题? 单机即在一台机器上部署一个redis节点,主要会存在以下问题: 1. 机器故障 如果发生机器故障...
    若兮缘阅读 11,405评论 0 20
  • 概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后...
    Lin_Shao阅读 2,206评论 0 0