前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据开发:Redis分布式主从复制

大数据开发:Redis分布式主从复制

作者头像
成都加米谷大数据
修改2021-01-29 17:59:12
5700
修改2021-01-29 17:59:12
举报
文章被收录于专栏:大数据开发

一.什么是主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

二.主从复制的作用

1.数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

2.故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

3.负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

4.读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;

高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

三.主从复制原理

本身就是Master发送数据给slave,只是第一次连接是Slave向Master发送同步请求,其它的都是Master主动向Slave发送数据。可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段。在从节点执行 slaveof 命令后,复制过程便开始运作,下面图示大概可以看到

四.如何使用主从复制

在Redis中,可以通过SLAVEOF命令或者设置slaveof选项,可以让一个服务器去复制另一个服务器。被复制的服务器称为主服务器(master),进行复制的服务器称为从服务器。 旧版复制功能实现 在2.8版本之前,Redis的复制主要分为**同步(sync)命令传播(command propagate)**两个操作:

1.同步:将从服务器的数据库状态更新成主服务器的数据库状态。

2.命令传播:将作用于主服务器的写命令,传播给从服务器进行执行,从而保证主从数据库状态一致。

同步

当从服务器刚执行SLAVEOF命令时,首先做的就是同步操作,将从服务器的数据库状态更新成主服务器的数据库状态。 从服务器通过向主服务器发送SYNC命令来完成同步操作,SYNC命令的执行步骤如下:

1.从服务器向主服务器发送SYNC命令。

2.主服务器收到SYNC命令之后,开始执行BGSAVE命令生成RDB文件。在生成RDB文件期间,将写命令记录在一个缓冲区中。

3.主服务器发送RDB文件文件给从服务器,从服务器载入该RDB文件。

4.主服务器发送生成RDB文件期间的写命令给从服务器,从服务器重放这些命令。此时从服务器状态和主服务器状态一致,同步操作完成。

命令传播

在同步操作完成之后,后续主服务器执行的写命令会以命令传播的方式发送给从服务器,从而保证主从数据库状态一致。

五.主从复制过程

1、完整复制过程

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

复制过程说明:

slave 服务启动,slave 会建立和 master 的连接,发送 sync 命令。

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

注意:此时如果生成 RDB 文件过程中存在写数据操作会导致 RDB 文件和当前主 redis 数据不一致,所以此时 master 主进程会开始收集写命令并缓存起来。master 就发送 RDB 文件给 slave。slave 将文件保存到磁盘上,然后加载到内存恢复,master 把缓存的命令转发给 slave。

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

完整复制的问题:

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

2、部分复制

部分复制说明:

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

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.什么是主从复制
  • 二.主从复制的作用
  • 三.主从复制原理
  • 四.如何使用主从复制
  • 五.主从复制过程
    • 1、完整复制过程
      • 2、部分复制
      相关产品与服务
      云服务器
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档