本篇文章来讲讲 Redis 的复制。在分布式系统中为乐解决单点问题,通常会吧数据复制多个副本部署到多个机器上,满足故障恢复和负载均衡等需求。Redis也是如此。
复制使用
-
建立复制
- 配置复制的方式有三种
- 在从节点的配置文件中加入
slaveof {masterHost} {masterPort}
随Redis启动生效 - 在
redis-server
启动命令后后加入 --slaveof {masterHost} {masterPost} 生效 - 直接在从节点使用命令:
slaveof {masterHost} {masterPort}
- 在从节点的配置文件中加入
- 可以通过
info replication
查看主节点、从节点的复制状态信息
- 配置复制的方式有三种
-
断开复制
从节点执行slaveof no one
命令断开和主节点的复制关系。断开复制关系后,从节点的数据是保留的。 -
拾遗
- 对于比较重要的节点,主节点可以通过设置
requirepass
参数进行密码验证,这时所有客户端访问必须使用auth
命令进行校验。 - 默认情况下,从节点是只读模式,谨慎修改。
- Redis 可以通过
repl-disable-tcp-nodelay
参数控制是否关闭TCP_NODELAY
(默认关闭)。关闭时,主节点每个命令数据都会及时同步;开启时,主节点会合并较小的TCP包,同一同步。
- 对于比较重要的节点,主节点可以通过设置
拓扑结构
- 一主一从结构
- 一主多从结构
- 树状主从结构
复制原理
- 复制过程
- 数据同步
- 全量复制:一般用于初次复制场景
- 部分复制:一般用在主从复制中因网络闪断等原因造成的数据丢失
常见问题
- 读写分离
- 复制数据延迟
- 读到过期数据
- 从节点故障
- 主从配置不一致
- 规避全量复制