《Redis设计与实现》- 复制

Posted lanqiu5ge

tags:

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

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡灯需求。Redis提供了复制功能,实现了相同数据多个副本,复制功能作是高可用Redis的基础,深入理解复制的工作原理与使用技巧对我们日常开发运维非常有帮助。

1. 配置

1.1 建立复制

每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。

配置复制的三种方式:

  • 配置文件中键入 slaveof {masterHost} {masterPort},随Redis启动生效
  • 在 redis-server 启动命令后加入 --slaveof {masterHost} {masterPort}
  • 直接使用命令:slaveof {masterHost} {masterPort}

可以使用 info replication 命令查看复制相关状态

1.2 断开复制

在从节点执行 slaveof no one 来断开与主节点的复制关系;从节点断开复制关系后并不会删除原有的数据。

1.3 切换主节点

执行 slaveof {newMasterHost} {newMasterPort}

切换主节点流程:

  • 断开与旧主节点的复制关系
  • 与新主节点建立复制关系
  • 删除从节点当前所有数据(*)
  • 对新主节点进行复制操作

1.4 安全性

主节点可以通过设置 requirepass 参数进行密码验证,从节点需要配置 masterauth 参数与主节点密码保持一致,这样从节点才可以正确的链接到主节点并发起复制流程。

1.5 只读

默认情况下,从节点使用 slave-read-only=yes 配置为只读模式。
因为复制只能从主节点到从节点,修改从节点造成主从数据不一致,因此,线上环境从节点一般设置为只读模式。

1.6 传输延迟

主从节点一般部署在不同机器上,复制时的网络延迟就成为需要考虑的问题,Redis提供了 repl-disable-tcp-nodelay 参数用于控制是否关闭 TCP_NODELAY,默认关闭。

  • 关闭时,主节点产生的命令数据无论大小都会及时地发送到从节点,这样网络延迟会变小,但增加了网络带宽的消耗。适用于主从之间的网络环境良好的场景,如同机架或者同机房。
  • 开启时,主节点会合并较小的TCP数据包从而节省带宽,但会增大主从之间的延迟。适用于主从网络环境复杂或者带宽紧张的场景。

2. 拓扑

Redis 复制拓扑结构支持单层或者多层复制关系,可分为三种:

  • 一主一从
  • 一主多从
  • 树状主从结构

以上是关于《Redis设计与实现》- 复制的主要内容,如果未能解决你的问题,请参考以下文章

Redis设计与实现--多级数据库的实现

Redis:主从复制的设计与实现解析

Redis | 第9章 Lua 脚本与排序《Redis设计与实现》

分布式Redis深度历险-复制

Redis设计与实现-13.集群

Redis设计与实现-13.集群