Redis之主从复制

Posted 数据仓库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis之主从复制相关的知识,希望对你有一定的参考价值。

点击蓝字关注我吧


【本文详细介绍了非关系型数据库Redis中主从复制的基本原理和配置方法,欢迎读者朋友们阅读、转发和收藏!】

1.概述

一般来说,要将 Redis 运用于工程项目中,只使用一台 Redis 是万万不能的,原因如下:

1. 从结构上,单个 Redis 服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;

2. 从容量上,单个 Redis 服务器内存容量有限,就算一台 Redis 服务器内容容量为 256G ,也不能将所有内容用作 Redis 存储内存,一般来说,单台 Redis 最大使用内存不应该超过 20G 。

本文先讨论第一点的解决方案: Redis 主从复制。

2 .主从复制

考虑如下一种场景:

电子商务网站上的商品,一般都是一次上传,无数次浏览的,说专业点也就是“多读少写”。

对于这种场景,我们可以使如下这种架构 :


如图中所示,我们将一台 Redis 服务器作主库 (Matser) ,其他三台作为从库 (Slave) ,主库只负责写数据,每次有数据更新都将更新的数据同步到它所有的从库,而从库只负责读数据。这样一来,就有了两个好处:

1. 读写分离,不仅可以提高服务器的负载能力,并且可以根据读请求的规模自由增加或者减少从库的数量;

2. 数据被复制成了了好几份,就算有一台机器出现故障,也可以使用其他机器的数据快速恢复。

需要注意的是:在 Redis 主从模式中,一台主库可以拥有多个从库,但是一个从库只能隶属于一个主库。

3. 配置

在 Redis 中,要实现主从复制架构非常简单,只需要在从数据库的配置文件中加上如下命令即可:

slaveof    主数据库地址   主数据库端口

主数据库不需要任何配置。

4.原理

当一个从数据库启动时,会向主数据库发送 SYNC 命令,主数据库收到命令后会开始在后台保存快照(即 RDB 持久化过程),并将保存快照期间接收到的命令缓存起来。当快照完成后, Redis 会将快照文件和缓存的命令发给从数据库,从数据库收到数据后,会载入快照文件并执行缓存的命令。以上过程称为复制初始化。复制初始化之结束后,主数据库每收到写命令时就会将命令同步给从数据库,从而保证主从数据库数据一致,这一过程称为复制同步阶段。

有两点需要注意:

1. 当主从数据库之间的连接断开后, Redis2.8 之前的版本会重新进行复制初始化过程,这样就使得主从数据库断开连接后数据恢复的过程的效率很低下。Redis2.8 版本的一个重要改进就是断线支持有条件的增量数据传输,当从数据库再次连接到主数据库时,主数据库只需要将断线期间执行的命令发给从数据库即可,大大提高了 Redis 主从复制的实用性。

2. 复制同步阶段贯穿整个主从同步过程的始终,直到主从关系终止为止。在复制过程中,即使关闭了 RDB 方式的持久化 ( 删除所有 save 参数 ) ,依旧会执行快照操作。

乐观复制

Redis 采用了复制的策略。容忍在一定时间内主从数据库的内容是不同的,但是两者的数据最终会保持一致。具体来说, Redis 主从数据库之间的复制数据的过程本身是异步的,这意味着,主数据库执行完客户端的写请求后会立即将命令在主数据库的执行结果返回给客户端,而不会等待从数据库收到该命令后再返回给客户端。这一特性保证了复制后主从数据库的性能不会受到影响,但另一方面也会产生一个主从数据库数据不一致的时间窗口,当主数据库执行一条写命令之后,主数据库的数据已经发生变动,然而在主数据库将该命令传送给从数据库之前,如果两个数据库之间的连接断开了,此时二者间的数据就不一致了。

我知道你在看

以上是关于Redis之主从复制的主要内容,如果未能解决你的问题,请参考以下文章

Redis 高可用之主从复制哨兵模式集群模式

Redis系列之主从复制

Redis 大型攻略之主从复制哨兵模式群集模式

Redis 大型攻略之主从复制哨兵模式群集模式

redis系列之主从复制与哨兵机制

redis应用之主从架构配置