`
y806839048
  • 浏览: 1126214 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

redis主从同步(replication)详解

阅读更多

Replication

 

概要:

1,生成快照 ,缓存生成快照时候时候的命令

2,同步快照

3,同步缓存

4,同步增量(实时)增量同步

 

在未执行增量同步之前,新加进来的slave都会都到相同的快照,相同的缓存流

在执行增量同步开始之后,新加进来的slave只能重新走同步流程

 

由于主服务器同步的时候需要fork子线程,缓存命令,要求主服务器最好需要足够的内存30%~45%

 

主服务器可以不持久化,持久化和查询(默认只读)交给从服务器

 

主服务器在至少N个从服务器的情况下才执行写操作(可配置)---保证主服务器在写后有足够的从备份

 

rdb生成会fork新的线程,小的数据量一般不会致使redis停止服务

主从之间数据同步不会停止主服务(主从之间的任务就是同步,主服务提供给外部服务不会因为主从同步停止)

 

正文:

 

Redis 支持简单且易用的主从复制(master-slave replication)功能, 该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品。 

 

增量同步

Redis增量同步主要指Slave完成初始化后开始正常工作时,Master发生的写操作同步到Slave的过程。通常情况下,Master每执行一个写命令就会向Slave发送相同的写命令,然后Slave接收并执行。

全量同步

Redis的全量同步过程主要分三个阶段:

  • 同步快照阶段:Master创建并发送快照给Slave,Slave载入并解析快照。Master同时将此阶段所产生的新的写命令存储到缓冲区。
  • 同步写缓冲阶段:Master向Slave同步存储在缓冲区的写操作命令。
  • 同步增量阶段:Master向Slave同步写操作命令。

 

 

 

以下是关于 Redis 复制功能的几个重要方面: 

● Redis 使用异步复制。 从 Redis 2.8 开始, 从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度。 

● 一个主服务器可以有多个从服务器。 

● 不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个图状结构。 

● 复制功能不会阻塞主服务器: 即使有一个或多个从服务器正在进行初次同步, 主服务器也可以继续处理命令请求。 

● 复制功能也不会阻塞从服务器: 只要在 redis.conf 文件中进行了相应的设置, 即使从服务器正在进行初次同步, 服务器也可以使用旧版本的数据集来处理命令查询。 

不过, 在从服务器删除旧版本数据集并载入新版本数据集的那段时间内, 连接请求会被阻塞。 

你还可以配置从服务器, 让它在与主服务器之间的连接断开时, 向客户端发送一个错误。 

● 复制功能可以单纯地用于数据冗余(data redundancy), 也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说, 繁重的 SORT 命令可以交给附属节点去运行。 

● 可以通过复制功能来让主服务器免于执行持久化操作: 只要关闭主服务器的持久化功能, 然后由从服务器去执行持久化操作即可。

 

复制功能的运作原理

无论是初次连接还是重新连接, 当建立一个从服务器时, 从服务器都将向主服务器发送一个 SYNC 命令。 

接到 SYNC 命令的主服务器将开始执行 BGSAVE , 并在保存操作执行期间, 将所有新执行的写入命令都保存到一个缓冲区里面。 

当 BGSAVE 执行完毕后, 主服务器将执行保存操作所得的 .rdb 文件发送给从服务器, 从服务器接收这个 .rdb 文件, 并将文件中的数据载入到内存中。 

之后主服务器会以 Redis 命令协议的格式, 将写命令缓冲区中积累的所有内容都发送给从服务器。 

你可以通过 telnet 命令来亲自验证这个同步过程: 首先连上一个正在处理命令请求的 Redis 服务器, 然后向它发送 SYNC 命令, 过一阵子, 你将看到 telnet 会话(session)接收到服务器发来的大段数据(.rdb 文件), 之后还会看到, 所有在服务器执行过的写命令, 都会重新发送到 telnet 会话来。 

即使有多个从服务器同时向主服务器发送 SYNC , 主服务器也只需执行一次 BGSAVE 命令, 就可以处理所有这些从服务器的同步请求。 

从服务器可以在主从服务器之间的连接断开时进行自动重连, 在 Redis 2.8 版本之前, 断线之后重连的从服务器总要执行一次完整重同步(full resynchronization)操作, 但是从 Redis 2.8 版本开始, 从服务器可以根据主服务器的情况来选择执行完整重同步还是部分重同步(partial resynchronization)。

 



 

 

 

部分重同步

从 Redis 2.8 开始, 在网络连接短暂性失效之后, 主从服务器可以尝试继续执行原有的复制进程(process), 而不一定要执行完整重同步操作。 

这个特性需要主服务器为被发送的复制流创建一个内存缓冲区(in-memory backlog), 并且主服务器和所有从服务器之间都记录一个复制偏移量(replication offset)和一个主服务器 ID (master run id), 当出现网络连接断开时, 从服务器会重新连接, 并且向主服务器请求继续执行原来的复制进程: 

● 如果从服务器记录的主服务器 ID 和当前要连接的主服务器的 ID 相同, 并且从服务器记录的偏移量所指定的数据仍然保存在主服务器的复制流缓冲区里面, 那么主服务器会向从服务器发送断线时缺失的那部分数据, 然后复制工作可以继续执行。 

● 否则的话, 从服务器就要执行完整重同步操作。 

Redis 2.8 的这个部分重同步特性会用到一个新增的 PSYNC 内部命令, 而 Redis 2.8 以前的旧版本只有 SYNC 命令, 不过, 只要从服务器是 Redis 2.8 或以上的版本, 它就会根据主服务器的版本来决定到底是使用 PSYNC 还是 SYNC : 

● 如果主服务器是 Redis 2.8 或以上版本,那么从服务器使用 PSYNC 命令来进行同步。 

● 如果主服务器是 Redis 2.8 之前的版本,那么从服务器使用 SYNC 命令来进行同步。

 

配置

配置一个从服务器非常简单, 只要在配置文件中增加以下的这一行就可以了:

 

slaveof 192.168.1.1 6379

1

当然, 你需要将代码中的 192.168.1.1 和 6379 替换成你的主服务器的 IP 和端口号。 

另外一种方法是调用 SLAVEOF 命令, 输入主服务器的 IP 和端口, 然后同步就会开始:

 

127.0.0.1:6379> SLAVEOF 192.168.1.1 10086

OK

1

2

只读从服务器

从 Redis 2.6 开始, 从服务器支持只读模式, 并且该模式为从服务器的默认模式。 

只读模式由 redis.conf 文件中的 slave-read-only 选项控制, 也可以通过 CONFIG SET 命令来开启或关闭这个模式。 

只读从服务器会拒绝执行任何写命令, 所以不会出现因为操作失误而将数据不小心写入到了从服务器的情况。 

即使从服务器是只读的, DEBUG 和 CONFIG 等管理式命令仍然是可以使用的, 所以我们还是不应该将服务器暴露给互联网或者任何不可信网络。 不过, 使用 redis.conf 中的命令改名选项, 我们可以通过禁止执行某些命令来提升只读从服务器的安全性。 

你可能会感到好奇, 既然从服务器上的写数据会被重同步数据覆盖, 也可能在从服务器重启时丢失, 那么为什么要让一个从服务器变得可写呢? 

原因是, 一些不重要的临时数据, 仍然是可以保存在从服务器上面的。 比如说, 客户端可以在从服务器上保存主服务器的可达性(reachability)信息, 从而实现故障转移(failover)策略。

 

从服务器相关配置

如果主服务器通过 requirepass 选项设置了密码, 那么为了让从服务器的同步操作可以顺利进行, 我们也必须为从服务器进行相应的身份验证设置。 

对于一个正在运行的服务器, 可以使用客户端输入以下命令:

 

config set masterauth <password>

1

要永久地设置这个密码, 那么可以将它加入到配置文件中:

 

masterauth <password>

1

另外还有几个选项, 它们和主服务器执行部分重同步时所使用的复制流缓冲区有关, 详细的信息可以参考 Redis 源码中附带的 redis.conf 示例文件。

 

主服务器在至少N个从服务器的情况下才执行写操作

从 Redis 2.8 开始, 为了保证数据的安全性, 可以通过配置, 让主服务器只在有至少 N 个当前已连接从服务器的情况下, 才执行写命令。 

不过, 因为 Redis 使用异步复制, 所以主服务器发送的写数据并不一定会被从服务器接收到, 因此, 数据丢失的可能性仍然是存在的。 

以下是这个特性的运作原理: 

● 从服务器以每秒一次的频率 PING 主服务器一次, 并报告复制流的处理情况。 

● 主服务器会记录各个从服务器最后一次向它发送 PING 的时间。 

● 用户可以通过配置, 指定网络延迟的最大值 min-slaves-max-lag , 以及执行写操作所需的至少从服务器数量 min-slaves-to-write 。 

如果至少有 min-slaves-to-write 个从服务器, 并且这些服务器的延迟值都少于 min-slaves-max-lag 秒, 那么主服务器就会执行客户端请求的写操作。 

你可以将这个特性看作 CAP 理论中的 C 的条件放宽版本: 尽管不能保证写操作的持久性, 但起码丢失数据的窗口会被严格限制在指定的秒数中。 

另一方面, 如果条件达不到 min-slaves-to-write 和 min-slaves-max-lag 所指定的条件, 那么写操作就不会被执行, 主服务器会向请求执行写操作的客户端返回一个错误。 

以下是这个特性的两个选项和它们所需的参数: 

● min-slaves-to-write 

● min-slaves-max-lag 

详细的信息可以参考 Redis 源码中附带的 redis.conf 示例文件。

 

 

 

  • 大小: 86.2 KB
分享到:
评论

相关推荐

    redis主从复制集群

    ### Redis 主从复制集群知识点详解 #### 一、Redis 主从复制概述 Redis 主从复制是一种数据冗余机制,主要用于实现读写分离、负载均衡以及数据备份等目的。通过搭建主从复制集群,可以有效避免单点故障问题,并且...

    redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用

    Redis 入门详解 Redis 是一种开源、基于内存的数据结构存储系统,可以用作数据库、消息队列、缓存层等。下面是对 Redis 的常用命令、配置文件、持久化、事务、主从复制、Jedis 使用的详细讲解。 Redis 常用命令 ...

    redis主从配置+sentinel哨兵模式

    ### Redis 主从配置与 Sentinel 哨兵模式详解 #### 一、Redis 主从配置 在分布式系统中,为了提高数据处理能力和系统的可用性,通常会采用 Redis 的主从复制模型。通过设置一个主节点(Master)和一个或多个从节点...

    Redis主从配置

    【Redis主从配置详解】 Redis主从复制是一种高可用性解决方案,它允许数据在多个Redis实例之间进行同步,以防止单点故障导致的数据丢失。在主从架构中,有一个主要的Redis实例,被称为Master,负责处理所有写操作,...

    Redis主从复制详解

    Redis主从复制是分布式数据库系统中的一个重要特性,它主要用于数据备份、读写分离以及提高系统的可用性和容错性。在单机模式下,Redis如果发生故障,会导致数据丢失且服务中断,即存在单点故障的问题。同时,单机...

    redis主从配置以及哨兵模式配置

    ### Redis 主从配置及哨兵模式详解 #### 一、实验环境 - **Redis 版本**: Redis 4.0.6 - **操作系统**: Linux (安装于虚拟机中) - **宿主主机**: Windows 10 x64 - **远程终端工具**: Xshell 5 #### 二、主从...

    redis的主从配置方法详解

    以下是对Redis主从配置方法的详细解释。 **环境介绍** 在本教程中,我们将使用Oracle Linux 5.6操作系统,并配置两个节点:主节点Master (rac1, IP: 192.168.2.101) 和从节点Slave (rac2, IP: 192.168.2.102)。...

    redis安装与主从配置

    #### 五、Redis主从配置 1. **修改从机配置文件**: - 打开从机上的`redis.conf`文件,设置相应的端口和主从关系。 ```conf port 6381 slaveof 10.0.0.1 6383 ``` 2. **启动服务**: - 先启动主节点,然后...

    redis 安装 主从配置 选举

    ### Redis安装、主从配置与选举机制详解 #### 一、Redis安装步骤 在开始之前,我们先了解Redis的基本安装过程。以下是在Linux环境下的安装步骤: 1. **下载源码包**:首先通过`tar zxf`命令解压Redis的压缩文件。...

    Redis新手入门详解

    此外,Redis还支持主从复制(Master-Slave Replication)、简单的事务处理、发布/订阅(Pub/Sub)等功能,这使得Redis能够满足更加复杂的应用场景需求。 #### 二、Redis环境搭建 ##### 2.1 安装过程 1. **下载与解压*...

    redis快速入门详解.ppt

    * 主从复制(master-slave replication):Redis 支持主从复制,并且具有非常快速的非阻塞首次同步(non-blocking first synchronization)、网络断开自动重连等功能。 * 事务支持(transaction):Redis 具有简单的...

    redis_启动

    ### Redis集群启动与配置详解 #### 一、Redis 集群概述 Redis 是一种广泛使用的开源内存数据结构存储系统,常被用作数据库、缓存和消息中间件。为了提高其可用性和扩展性,Redis 支持多种部署模式,包括主从复制和...

    redis哨兵的使用

    #### 一、Redis主从复制 Redis主从复制是一种常见的部署方式,用于构建高可用和可扩展的Redis集群。主从复制允许数据从一个Redis服务器(主服务器)复制到一个或多个其他Redis服务器(从服务器)。这种架构能够提供...

    redis-cluster 升级测试

    ### Redis Cluster 升级测试详解 #### 一、环境准备 在进行Redis Cluster的升级测试前,首先要确保有一个稳定的测试环境。本测试案例中,在测试环境中构建了一个包含3个主节点和3个从节点的Redis Cluster,每个...

    Redis集群模式详解,三种集群模式的详细介绍

    ### Redis集群模式详解 Redis作为一款高性能的开源内存数据库,凭借其卓越的性能及灵活性,在缓存、会话存储、实时分析、消息队列等领域有着广泛的应用。然而,随着应用场景的扩大,单个Redis实例的性能瓶颈逐渐...

    Redis新手入门详解.pdf

    另外,Redis支持主从复制机制,也就是master-slave replication,以便于数据的备份和读取负载的分担。 在安装Redis时,可以前往官网下载最新稳定版本,并使用Linux下的tar命令进行解压安装,然后编译。编译完成后,...

    Redis集群详解

    如果从Redis宕机,重新启动后会自动加入到主从架构中并自动完成同步数据。Redis 2.8版本后实现了增量复制,即从库断开期间主库变化不大时,从库再次启动后主库不会将所有数据做RDB操作,而是进行增量更新。 **2. 主...

    redis3.0.1加RedisDesktopManager

    5. **复制(Replication)**:Redis 3.0.1 引入了主从复制,使得数据可以在多个实例间同步,提高可用性和容灾能力。此版本可能优化了复制过程的性能,减少了延迟。 6. **内存管理**:Redis 是内存数据库,内存管理...

Global site tag (gtag.js) - Google Analytics