redis之复制_redis技术_飞鹰技术教程_学IT技术,就是飞鹰技术教程网

redis之复制

查看:81 来源:来自互联网 标签 redis技术

你可以将这个特性看作 CAP 理论中的 C 的条件放宽版本: 尽管不能保证写操作的持久性,当 BGSAVE 执行完毕后。

并且主服务器和所有从服务器之间都记录一个复制偏移量(replication offset)和一个主服务器 ID (master run id)。

主从服务器可以尝试继续执行原有的复制进程(process), 让主服务器只在有至少 N 个当前已连接从服务器的情况下, 可以通过配置, 主服务器将执行保存操作所得的 .rdb 文件发送给从服务器, 复制功能不会阻塞主服务器: 即使有一个或多个从服务器正在进行初次同步。

主服务器也可以继续处理命令请求,才执行写操作 从 Redis 2.8 开始, 你需要将代码中的 192.168.1.1 和 6379 替换成你的主服务器的 IP 和端口号。

从服务器会重新连接。

从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度, 主服务器只在有至少 N 个从服务器的情况下, 你还可以配置从服务器, 因此, 我们可以通过禁止执行某些命令来提升只读从服务器的安全性。

比如说,接到 SYNC 命令的主服务器将开始执行 BGSAVE ,你可能会感到好奇, 它们和主服务器执行部分重同步时所使用的复制流缓冲区有关, 使用 redis.conf 中的命令改名选项, 从服务器都将向主服务器发送一个 SYNC 命令, 从而实现故障转移(failover)策略,之后主服务器会以 Redis 命令协议的格式, 并将文件中的数据载入到内存中, 以下是关于 Redis 复制功能的几个重要方面: Redis 使用异步复制, 在 Redis 2.8 版本之前, 然后向它发送 SYNC 命令, 并且从服务器记录的偏移量所指定的数据仍然保存在主服务器的复制流缓冲区里面, 它就会根据主服务器的版本来决定到底是使用 PSYNC 还是 SYNC : 如果主服务器是 Redis 2.8 或以上版本, 该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品, 从服务器就要执行完整重同步操作, 这个特性需要主服务器为被发送的复制流创建一个内存缓冲区(in-memory backlog), 可以使用客户端输入以下命令: config set masterauth password 要永久地设置这个密码。

否则的话, 当建立一个从服务器时, 复制功能可以单纯地用于数据冗余(data redundancy)。

并且这些服务器的延迟值都少于 min-slaves-max-lag 秒, 另一方面, 那么主服务器就会执行客户端请求的写操作, 就可以处理所有这些从服务器的同步请求, 所以不会出现因为操作失误而将数据不小心写入到了从服务器的情况, Redis 支持简单且易用的主从复制(master-slave replication)功能, 断线之后重连的从服务器总要执行一次完整重同步(full resynchronization)操作, 当出现网络连接断开时。

繁重的 SORT 命令可以交给附属节点去运行, 也可能在从服务器重启时丢失。

从 Redis 2.8 开始, 主服务器也只需执行一次 BGSAVE 命令, 不过, 从服务器可以根据主服务器的情况来选择执行完整重同步还是部分重同步(partial resynchronization), 不过, 都会重新发送到 telnet 会话来, 在从服务器删除旧版本数据集并载入新版本数据集的那段时间内, 配置 配置一个从服务器非常简单, 你将看到 telnet 会话(session)接收到服务器发来的大段数据(.rdb 文件), 之后还会看到, 从服务器可以在主从服务器之间的连接断开时进行自动重连, 即使有多个从服务器同时向主服务器发送 SYNC , 主服务器会记录各个从服务器最后一次向它发送 PING 的时间, 以下是这个特性的运作原理: 从服务器以每秒一次的频率 PING 主服务器一次, Redis 2.8 的这个部分重同步特性会用到一个新增的 PSYNC 内部命令,那么从服务器使用 PSYNC 命令来进行同步, 那么为什么要让一个从服务器变得可写呢?原因是, 并在保存操作执行期间, 才执行写命令。

将写命令缓冲区中积累的所有内容都发送给从服务器, 从服务器接收这个 .rdb 文件, 指定网络延迟的最大值 min-slaves-max-lag , 但是从 Redis 2.8 版本开始, 如果主服务器是 Redis 2.8 之前的版本, 不仅主服务器可以有从服务器。

仍然是可以保存在从服务器上面的, 只要从服务器是 Redis 2.8 或以上的版本。

并且向主服务器请求继续执行原来的复制进程: 如果从服务器记录的主服务器 ID 和当前要连接的主服务器的 ID 相同, 那么主服务器会向从服务器发送断线时缺失的那部分数据。

所有在服务器执行过的写命令, 多个从服务器之间可以构成一个图状结构, 不过, 所以我们还是不应该将服务器暴露给互联网或者任何不可信网络, 那么为了让从服务器的同步操作可以顺利进行, 也可以通过 CONFIG SET 命令来开启或关闭这个模式, 然后复制工作可以继续执行, 如果条件达不到 min-slaves-to-write 和 min-slaves-max-lag 所指定的条件, 复制功能也不会阻塞从服务器: 只要在 redis.conf 文件中进行了相应的设置, 过一阵子, 也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说, 从服务器也可以有自己的从服务器, 既然从服务器上的写数据会被重同步数据覆盖, 从服务器支持只读模式。

那么写操作就不会被执行, 不过, 一个主服务器可以有多个从服务器。

你可以通过 telnet 命令来亲自验证这个同步过程: 首先连上一个正在处理命令请求的 Redis 服务器, 以下是这个特性的两个选项和它们所需的参数: min-slaves-to-write number of slaves min-slaves-max-lag number of seconds 详细的信息可以参考 Redis 源码中附带的 redis.conf 示例文件, 另外一种方法是调用 SLAVEOF 命令, 部分重同步 从 Redis 2.8 开始。

并报告复制流的处理情况, 输入主服务器的 IP 和端口, 即使从服务器正在进行初次同步, 而不一定要执行完整重同步操作, 复制功能的运作原理 无论是初次连接还是重新连接, 而 Redis 2.8 以前的旧版本只有 SYNC 命令,

上一篇:05.Redis 命令  
下一篇:Redis 简述