`
powersoft
  • 浏览: 198769 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
53a63413-d61c-321e-8dc6-5008e88923c6
Redis官方文档翻译和源...
浏览量:191520
社区版块
存档分类
最新评论

Redis官方文档(14) ——复制

阅读更多
Redis3官方文档(14)
——复制


    Redis的复制(replication)是一种使用和配置起来非常简单的主从(master-slave)复制,允许Redis从服务器成为主服务器的精确副本。以下是关于Redis复制的一些重要方面:
  • Redis采用异步复制。从Redis 2.8开始,从服务器会周期性地报告从复制流中处理的数据量。
  • 一个主服务器可以拥有多个从服务器。
  • 从服务器可以接受其他从服务器的连接。除了连接多个从服务器到同一个主服务器,从服务器也可以连接到其他的从服务器,形成图状结构。
  • Redis的复制在主服务器上是非阻塞的。这意味着,当一个或多个从服务器执行初始化同步(initial synchronization)时,主服务器能继续处理请求。
  • Redis的复制在从服务器上也是非阻塞的。当从服务器正在执行初始化同步时,假如你在redis.conf中进行了相应配置,也能够继续使用旧版本的数据集处理请求。另外,你还可以配置当复制流宕(dowm)掉的时候,从服务器返回给客户端一个错误。然而,初始化同步结束后,旧的数据集需要被删除,新的数据集需要被载入。在这个简短的窗口期内,从服务器会阻塞到来的连接。
  • 复制可以用来支持可伸缩性,用多个从服务器处理只读查询(例如,繁重的SORT操作可以分配到从服务器上),也可以仅仅作为数据冗余。
  • 可以使用复制来避免主服务器将全部数据集写到磁盘的开销:只需要配置你的主服务器的redis.conf来防止保存(所有的”保存”指令),然后连接一个不断复制的从服务器。但是,这种设置下要确保主服务器不会自动重启(阅读下一节获取更多信息)。


    主服务器关闭持久化时的安全性(Safety of replication)
    当使用了Redis的复制时,强烈建议在主服务器上开启持久化,或者,当不可能开启持久化时,例如由于关注延迟,实例应该被配置为避免自动重启。
    为了更好的理解为什么关闭了持久化的主服务器被配置为自动重启是很危险的,查看下面的失败模型,数据从主服务器以及其所有从服务器上被清除:
  1. 我们设置节点A作为主服务器,关闭了持久化,节点B和节点C从节点A复制。
  2. A崩溃了,但是它拥有某个自动重启系统,重启了这个进程。但是,由于持久化是被关闭的,这个节点以空的数据集重启。
  3. 节点B和节点C从空的A复制,于是它们完全销毁了他们的数据拷贝。

    当Redis Sentinel被用于高可用时,主服务器关闭了持久化,并开启了进程重启也是很危险的。例如,主务器非常快速的重启,以至于Sentinel没有检测到失败,于是上面描述的失败模型就发生了。
    任何时刻数据安全都是很重要的,要禁止主服务器配置为关闭持久化并自动重启。

    Redis复制如何工作(How works)
    当你建立一个从服务器,连接时就会发送一个SYNC命令。不管是第一次连接上还是重连接上。
    然后主服务器开始在后台保存,并且开始缓冲所有新收到的会修改数据集的命令。当后台保存完成以后,主服务器传输数据库文件给从服务器,从服务器将其保存到磁盘上,然后加载到内存中。然后主服务器开始发送缓冲的命令给从服务器。这是通过命令流完成的,和Redis的协议是一样的格式。
    你可以用telnet试试。连上一台正在工作的Redis的端口,然后发送SYNC命令。你会看到大量的传输,还有主服务器收到的每条命令被重新发送给了telnet会话。
    当主从链路由于某些原因断开时,从服务器可以自动重连。如果主服务器收到多个并发的从服务器的同步请求,只会执行一个后台保存来服务所有从服务器。
    当主服务器和从服务器断开后重连上,总是执行一次完整重同步(full resynchronization)。然而,从Redis 2.8以后,可以选择执行部分重同步(partial resynchronization)。

    部分重同步(partial resynchronization)
    从Redis 2.8开始,在复制链接断开后,主服务器和从服务器通常可以继续复制过程,而不需要一次完整的重同步。
    这是通过在主服务器上创建一个复制流的内存缓冲区(in-memory backlog)实现的。主服务器和所有从服务器都记录一个复制偏移量(offset)和一个主服务器运行ID(run id),当链接断掉时,从服务器会重连接,并且请求主服务器继续复制。假设主服务器的运行ID还是一样的,并且指定的偏移量在复制缓冲区中可用,复制会从中断的点继续。如果这两个条件之一不满足,将会执行完整重同步(2.8版之前的正常行为)。如果连接的主服务器没有持久化到磁盘,当从服务器重启时需要一次完全重同步。
    新的部分重同步特性使用的是内部PSYNC命令,老的实现采用的是SYNC命令。注意,Redis 2.8的从服务器可以检测主服务器是否不支持PSYNC,然后使用SYNC代替。


    无盘复制(Diskless replication)
    通常,一次完整的重同步需要在磁盘上创建一个RDB文件,然后从磁盘重新加载同一个RDB来服务从服务器。
    由于低速的磁盘,这对主服务器来说是很大压力的操作。Redis 2.8.18版本是第一个对无盘复制提供试验性支持的版本。在这种设置下,子进程直接通过线路(wire)发送RDB文件给从服务器,而不需要使用磁盘作为中间存储。
    这个特性当前只是试验性的。

    配置(Configuration)
    配置复制简直小菜一碟:只需要添加下面一行到从服务器配置文件:
slaveof  192.168.1.1  6379

    当然,你得把192.168.1.1 6379替换成你自己的主服务器IP地址(或主机名)和端口。或者,你可以调用SLAVEOF命令和主服务器主机,开始与从服务器的一次同步。
    有很多参数可以用来调整执行部分重同步主服务器的上的内存复制缓冲区。可以看看Redis发布版本中自带的样例文件redis.conf以获取更多的信息。
    无盘复制可以使用repl-diskless-sync配置参数开启。为了等待第一个以后有更多从服务器到达而开始传输前的延迟由repl-diskless-sync-delay参数控制。请参考Redis发行版本中的样例redis.conf文件获取更多细节。

    只读从服务器(Read-only slave)
    从Redis 2.6开始,从服务器支持默认开启的只读模式。这个行为由redis.conf文件中的slave-read-only选项控制,可以在运行时使用CONFIG SET来开启和关闭。
    只读从服务器会拒绝所有写命令,所以写入数据到从服务器只会引起错误。这并不意味着,这个特性打算暴露从服务器实例到互联网,或者到网络中不信任的客户端,因为诸如DEBUG和CONFIG这样的管理命令等仍可用。但是,可以通过在redis.conf中使用rename-command指令来禁止命令,从而改进只读实例的安全性。
    你可能很好奇,为什么需要能够反转只读设置,使得从服务器实例能够成为写操作的目标。尽管这些写入的数据会在从服务器和主服务器重同步时,或者从服务器重启时被丢弃,还是有一些存储一些短暂的数据到可写的从服务器的合理场景。但是,这个特性在未来可能被抛弃。

    认证主服务器(Authenticate to a master)
    如果你的主服务器通过requirepass而有一个密码,很容易配置从服务器在所有同步操作中使用这个密码。
    要做到这个,在一个运行的实例上,使用redis-cli并键入:
config  set  masterauth  <password>

    要永久设置这个,添加这个倒你的配置文件中:
masterauth  <password>


    N个副本才能写(Allow writes only with N attached replicas)
    从Redis 2.8开始,可以设置Redis主服务器在当前至少拥有N个从服务器的连接的情况下,才能接受写请求。
    然而,由于Redis使用异步复制,不能保证从服务器真正收到了一个给定的写请求,于是总是有一个数据丢失的窗口期。
    下面是这个特性是如何运作的:
  • Redis从服务器每秒种ping主服务器,上报处理完的复制流的数据量。
  • Redis主服务器记录上一次从每一个从服务收到ping的时间。
  • 用户可以配置最小从服务器数量,每台从服务器拥有一个不大于最大秒数的滞后(lag)。

    如果有至少N个小于M秒滞后的从服务器,写请求才会被接受。
    你可能会认为这个像CAP理论中较宽松版本的”C”,不能保证指定写的一致性,但是至少数据丢失的时间窗口被限制在一个指定的秒数内。
    如果条件不满足,主服务器会返回一个错误,并且不会接受写请求。
    这个特性有两个配置参数:
min-slaves-to-write  <number of slaves>
min-slaves-max-lag  <number of seconds>

    请查看随Redis源码发布版本自带的redis.conf文件获取更多信息。
===============================================================================
    大家好,我是阮威。华中科技大学,计算机软件专业硕士。毕业后加入腾讯,先后在腾讯电子商务部和无线游戏产品部工作,现供职于欢聚时代基础产品部。IT男,至今。欢迎大家收听我的公众账号。
分享到:
评论
1 楼 powersoft 2014-10-23  
mark一下

相关推荐

    scala连接redis哨兵模式 demo 使用scala的redis库(csdn)————程序.pdf

    需要注意的是,文档中提到“官方文档都没”和“一部分不支持哨兵模式的连接”,这意味着对于rediscala库可能缺乏完整的官方文档支持,用户在使用过程中可能会遇到困难,尤其是当需要配置支持哨兵模式的连接时。...

    Linux下安装redis,内附安装文档,包含redis的前置环境gcc安装

    本文将详细讲解如何在Linux环境下安装Redis,包括Redis的前置环境——GCC的安装过程。 首先,让我们来了解Redis。Redis是“Remote Dictionary Server”的缩写,它是一个基于键值对的数据结构服务器,支持多种数据...

    Redis学习-实战.docx

    - **Windows 环境**:参考提供的文档《redis安装指南-window.docx》进行安装。 - **Linux 环境**: 1. 将 Redis 压缩包上传至 `/usr/local/src` 目录。 2. 解压并进入目录。 3. 执行 `make && make install` ...

    tomcat-redis-session-manager-master文档

    而本文将详细介绍使用Redis作为共享存储的方案——`tomcat-redis-session-manager`。 #### 必要环境准备 为了顺利实施这一方案,首先需要准备以下环境: - **Java版本**:Java 1.7 或更高版本。 - **Tomcat版本**...

    Redis缓存数据库

    在压缩包文件`redis-3.0.1`中,可能包含的是Redis 3.0.1版本的源代码、编译脚本、配置文件以及相关的文档。这个版本可能已经包含了上述提到的特性,并且可能对性能和稳定性进行了优化。对于开发者来说,深入研究源...

    Redis windows 32bit / b64bit

    - **主从复制**:Redis支持主从复制,能实现数据备份和负载均衡,提升系统的可用性和性能。 - **事务**:Redis提供单个命令的原子执行,但不支持复杂的数据库事务。 2. **Windows版Redis的安装** - **下载**:从...

    redis-stable.tar.gz

    Redis 是一个高性能的键值数据库,常用于存储缓存、会话管理等场景。`redis-stable.tar.gz` 是 Redis 的稳定版本源码包,...对于进一步学习和研究,建议查阅 Redis 官方文档和社区资源,了解更多的高级特性和最佳实践。

    redis-3.2.1.zip

    3. **Cluster集群**:Redis 3.0引入了官方的分布式解决方案——Redis Cluster,允许用户在不使用外部代理的情况下搭建分布式数据库。配置Redis集群时,你需要安装Redis的Ruby驱动`redis-xx.gem`,它提供了与集群交互...

    Redis最精简的入门完全读本(30页)

    标签“redis 教程 redis入门”明确地指出了该文档的定位——为初学者提供关于Redis的入门级教程。 从提供的部分内容来看,作者Karl Seguin介绍自己是一位有着丰富经验的开发者,他参与多个开源项目,并且是技术作家...

    Redis-x64-5.0.14 无需安装版

    2. **持久化**:为了防止数据丢失,Redis 提供了两种持久化机制——RDB(快照)和AOF(Append Only File)。RDB 定期保存内存中的数据集到磁盘,而AOF记录所有写操作日志,以便在重启时重播这些操作。 3. **数据...

    redis-5.0.8.tar.gz

    3. **复制**:Redis 支持主从复制,可以创建多个从服务器,提高读取性能和容错能力。主服务器负责写操作,从服务器则同步主服务器的数据,提供读服务。 4. **事务**:Redis 支持事务操作,用户可以一次性执行多条...

    redis-windows-3.0.rar

    Redis 是一个高性能的键值数据库,它在内存中存储数据并...在使用过程中,建议查阅官方文档以获取详细的配置选项和最佳实践,以充分利用 Redis 的性能和功能。同时,保持对最新版本的关注,以获取安全更新和新特性。

    redis-2.6.13.tar.gz

    3. **复制**:Redis支持主从复制,可以创建多个副本以提高可用性和容错性。 4. **事务**:Redis支持简单的事务,允许一次性执行多条命令。 5. **丰富的数据类型**:除了基本的字符串,还包括哈希表、列表、集合和...

    redis-mac-5.0.5.tar.gz

    标题中的"redis-mac-5.0.5.tar.gz"表示的是Redis的一个特定版本——5.0.5,适用于Mac操作系统的客户端安装包,采用常见的gzip压缩格式。 Redis 5.0.5是该数据库系统的一个稳定版本,包含了多项优化和改进。这个版本...

    Redis使用手册.docx

    1. **下载源码包**: 从官方网站下载最新的Redis源码包`redis-X.Y.Z.tar.gz`。 2. **解压并编译**: 解压缩后进入目录,执行`make`命令完成编译。 3. **生成二进制文件**: 编译完成后,在`src`目录下会生成一系列可...

    最新版linux redis-6.0.6.tar.gz

    解压下载的`redis-6.0.6.tar.gz`后,用户需要按照官方文档提供的步骤编译和安装。配置文件`redis.conf`包含各种可调整的参数,如端口号、数据库数量、超时设置等,可以根据实际需求进行修改。 10. **运行与管理**...

    Redis数据库.pdf

    Redis数据库的标签简单明了地指出了本文档讨论的主题——Redis。标签作为关键词标识,有助于快速定位和识别文档内容,是文档分类和检索的重要组成部分。 通过以上对文档标题、描述、标签和部分内容的解读,我们可以...

    Redis-x64-2.8.2402.zip

    在本案例中,我们讨论的是Redis的一个特定版本——"Redis-x64-2.8.2402",这是一个专为Windows操作系统编译的解压版安装包。 Redis 2.8.2402是Redis的早期稳定版本,发布于2015年,尽管现在已经有更新的版本,但这...

    archive_ Redis数据库 v7.0.12 [江西新余电信].zip.zip

    这个压缩包“archive_ Redis数据库 v7.0.12 [江西新余电信].zip.zip”显然包含了Redis的特定版本——v7.0.12。尽管没有提供详细的标签,我们可以从文件名推测这可能是一个针对江西新余电信用户的特定发行版或优化版...

Global site tag (gtag.js) - Google Analytics