Redis从入门到放弃系列(八) 主备同步

栏目: 数据库 · 发布时间: 6年前

内容简介:本文例子基于:5.0.4在现在不管啥应用都谈分布式的阶段下(真的有必要???),我们的redis都会做一下主备,唔,如果redis存的数据不重要的话,其实也可以不用做[手动狗头].为了能进一步上分布式,先让我们来了解一下CAP原理吧~在分布式系统中,只能保证CP or AP,那么Redis里面采用哪一种机制呢?

本文例子基于:5.0.4

在现在不管啥应用都谈分布式的阶段下(真的有必要???),我们的 redis 都会做一下主备,唔,如果redis存的数据不重要的话,其实也可以不用做[手动狗头].为了能进一步上分布式,先让我们来了解一下CAP原理吧~

  • Consistent(一致性)
  • Availability(可用性)
  • Partition tolerance(容错性)

在分布式系统中,只能保证CP or AP,那么Redis里面采用哪一种机制呢?

Redis采用的是AP机制,Redis的主备是异步同步数据的。也就是说,当Redis主服务接受了客户端的修改请求之后,会立即返回,这期间就算备服务节点网络不通(嗯,绝大部分是挖断了光缆),主服务依然走得风生水起。那么此时Redis备节点就处于数据落后的一种情况,此时Redis主节点同步的时候会采用快照同步的方式去将数据发送到备节点上(下文会讲到).正常情况下的数据同步都是通过增量buffer去同步的(即我的光缆开启了无敌状态).

开启主备

replicaof <masterip> <masterport>
//当master有设置了密码的时候需要配置
masterauth <master-password>
复制代码

我的光缆开启了无敌状态

当备份节点处于正常的情况下,redis会在master节点为replica节点设置一个复制缓冲区,然后每次异步将缓存区中的指令同步到replica节点上面,replica节点消费的时候会同时告知master节点消费到了那儿.

我们先来看一下复制缓存区的设置配置

//当replica节点断开一段时间之后,如果其消费的进度还在该缓存区内,那么可以继续执行增量同步。
repl-backlog-size 1mb
//当没有replica节点的时候,缓存区的设置过期时间
repl-backlog-ttl 3600
复制代码

复制缓存区如果写满的话,会从头开始覆盖前面的数据,然后导致replica节点需要全量复制,所以这里需要设置一个合理的复制缓冲区的值,防止replica节点全量复制(eg: repl-backlog-size = 重启从实例时长 * 主实例offset每秒写入量).

挖掘机挖断光缆

快照同步是一个耗时操作,将数据bgsave到磁盘中,然后将快照文件传输备份节点,当备份节点过长时间没有连接上master节点/新备份节点刚增加到集群中,需要执行快照同步。

快照同步有两种策略:

  • 磁盘备份:master服务创建一个新进程,将RDB文件写入磁盘,然后父进程将文件增量传输给备节点.
  • 无盘快照:master服务创建一个新进程,直接将rdb文件写入到备节点的socket

当开启了无盘快照之后,每次传输的时候,默认不能为其他的备节点提供无盘快照,新的备节点将会排队等待下一次无盘快照,可以调整时间,达到多个副本并行传输.

当使用非SSD磁盘跟有比较大的带宽的时候,采用无盘快照会比磁盘备份好很多.

可以通过一下配置来设置无盘快照:

repl-diskless-sync no
//当收到第一个无盘快照请求时,等待多少秒之后接受其他备节点的无盘快照请求
repl-diskless-sync-delay 5
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Fluent Python

Fluent Python

Luciano Ramalho / O'Reilly Media / 2015-8-20 / USD 39.99

Learn how to write idiomatic, effective Python code by leveraging its best features. Python's simplicity quickly lets you become productive with it, but this often means you aren’t using everything th......一起来看看 《Fluent Python》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具