Redis 主从同步


  • 同步过程

Redis 支持主从复制分为全量同步和增量同步,首次同步是全量同步,主从同步可以让从服务器从 主服务器备份数据,而且从服务器还可与有从服务器,即另外一台 redis 服务器可以从一台从服务器 进行数据同步,redis 的主从同步是非阻塞的,其收到从服务器的 sync(2.8 版本之前是 PSYNC)命令会 fork 一个子进程在后台执行 bgsave 命令,并将新写入的数据写入到一个缓冲区里面,bgsave 执行完成 之后并生成的将 RDB 文件发送给客户端,客户端将收到后的 RDB 文件载入自己的内存,然后主 redis 将缓冲区的内容在全部发送给从 redis,之后的同步从服务器会发送一个 offset 的位置(等同于 MySQL 的 binlog 的位置)给主服务器,主服务器检查后位置没有错误将此位置之后的数据包括写在缓冲区的 积压数据发送给 redis 从服务器,从服务器将主服务器发送的挤压数据写入内存,这样一次完整的数 据同步,再之后再同步的时候从服务器只要发送当前的 offset 位 置给主服务器,然后主服务器根据响 应的位置将之后的数据发送给从服务器保存到其内存即可。 Redis 全量复制一般发生在 Slave 初始化阶段,这时 Slave 需要将 Master 上的所有数据都复制一份。
具体步骤如下:
1)从服务器连接主服务器,发送 SYNC 命令;
2)主服务器接收到 SYNC 命名后,开始执行 BGSAVE 命令生成 RDB 快照文件并使用缓冲区记录此后执 行的所有写命令;
3)主服务器 BGSAVE 执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命 令;
4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
7)后期同步会先发送自己 slave_repl_offset 位置,只同步新增加的数据,不再全量同步。

  • Slave 主要配置

Redis Slave 也要开启持久化并设置和 master 同样的连接密码,因为后期 slave 会有提升为 master 的可 能,Slave 端切换 master 同步后会丢失之前的所有数据。
一旦某个 Slave 成为一个 master 的 slave,Redis Slave 服务会清空当前 redis 服务器上的所有数据并将 master 的数据导入到自己的内存,但是断开同步关系后不会删除当前已经同步过的数据。

  • 命令行配置
# redis 4.x 版本中此命令为 SLAVEOF
192.168.7.104:6379> REPLICAOF 192.168.7.103 6379 
OK 
192.168.7.104:6379> CONFIG SET masterauth 123456 
OK 
  • 当前 slave 状态


    image.png
  • 保存配置到 redis.conf
~]# vim /usr/local/redis/etc/redis.conf
 replicaof 192.168.7.103 6379 
 masterauth 123456 #master 如果密码需要设置 
  • 重启 slave 验证


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

推荐阅读更多精彩内容

  • 1.主从同步原理像MySQL一样,Redis是支持主从同步的,而且也支持一主多从以及多级从结构。主从结构,一是为了...
    码出高效阅读 2,188评论 0 1
  • Redis的性能很好,但在某些情况下还是不能满足我们的需求,比如过多的用户进入主页,导致Redis被频繁访问,此时...
    秃头哥编程阅读 697评论 0 6
  • 今天想和大家分享有关 Redis 主从同步(也称「复制」)的内容。 我们知道,当有多台 Redis 服务器时,肯定...
    Java高级架构狮阅读 356评论 0 1
  • 高中生物课上,老师说人的意义在于繁殖后代,对于一种生物而言,基因的延续是一种重要的存在证明。 而在感情上,生孩子是...
    钟大作作阅读 595评论 0 0
  • 我喜欢狗,从小到大不知道养了多少条狗,这些狗,都有同一个名字—皮皮。 把一个毛线团大小的小狗,养成一只膘肥体壮的成...
    不是树先生阅读 203评论 1 1