复述,主从复制看这篇就够了

  

     

  

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

  

  复述,主从复制看这篇就够了   

  

  ,   

  

  说明:   

  
      <李>   

      主复述中的数据有两个副本(复制)即从redis1和从redis2,即使一台复述,服务器宕机其它两台复述,服务也可以继续提供服务。   

      李   <李>   

      主复述中的数据和从复述上的数据保持实时同步,当主复述,写入数据时通过主从复制机制会复制到两个从复述,服务上。   

      李   <李>   

      只有一个主复述,可以有多个从复述。   

      李   <李>   

      主从复制不会阻塞的主人,在同步数据时,主人可以继续处理客户请求。   

      李   <李>   

      一个复述,可以即是主又是从,如下图:   

      李   
  

  复述,主从复制看这篇就够了   

  

  ,   

  
      <李>   

      ,   

      李   
  

        

  

     

  

     

  

  无需特殊配置。   

  

     

  

  修改从复述,服务器上的复述。参看文件,添加slaveof主redisip主复述,端口。   

  

  复述,主从复制看这篇就够了   

  

  ,   

  

  上边的配置说明当前该从复述,服务器所对应的主复述是192.168.101.3,端口是6379。   

  

        

  

     

  

     

  

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

  

  复述,主从复制看这篇就够了   

  

  ,   

  

  复制过程说明:   

  
      <李>   

      奴隶服务启动,奴隶会建立和主人的连接,发送同步命令。   

      李   <李>   

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

      李   
  
  

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

     
      <李>   

      主人就发送RDB文件给奴隶   

      李   <李>   

      奴隶将文件保存到磁盘上,然后加载到内存恢复   

      李   <李>   

      主人把缓存的命令转发给奴隶   

      李   
  
  

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

  

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

     

  完整复制的问题:   

  
  

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

     

     

  

  复述,主从复制看这篇就够了   

  

  ,   

  

  部分复制说明:   

  
  

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

复述,主从复制看这篇就够了