Redis 复制初体验

## 前言

在分布式系统中,为了解决单点问题,通常会把数据复制多个副本部署在其他机器,满足故障恢复和负载均衡等需求。Redis 也是如此,他为我们提供了复制功能,实现类相同数据的多个 Redis 副本。复制功能是 Redis 高可用的基础,Redis 的哨兵和集群都是在此基础上实现的。


1 复制的配置

1. 如何建立复制?
  • 配置文件中加入 slaveof {masterIp} {masterport}
  • redis-server 命令后加入 –slaveof {masterIp} {masterport}
  • 直接在从节点 redis-cli 中执行 slaveof {masterIp} {masterport}

建立复制后,主节点的每次修改命令都会用异步的方式发送到从节点。

2. 如何断开复制链接?
  • 在从节点执行 slaveof no one

注意:当从节点从旧的主节点断开后,然后接入到新的节点,从节点会删除所有旧的数据。

3. 连接的安全

对于数据比较重要的节点,主节点会通过 requirepass 参数进行密码验证,这时所有的客户端访问必须使用 auth 命令进行校验,因此需要在从节点胚子 masterauth 参数与主节点密码保持一致,这样从节点才可以正确的连接到主节点并发起复制流程。

4. 只读

默认情况下,从节点使用 alave-read-only=yes 配置为只读模式。由于复制只能从主节点到从节点,对于从节点的任何修改,主节点都是无法感知的,修改从节点会造成数据不一致。因此,建议不要修改这个配置。


2 拓扑

1. 一主一从

一主一从是最简单的复制拓扑结构,用于主节点出现宕机时,从节点提供故障转移支持。

注意:如果主节点因为提高性能关闭了 AOF 持久化功能,同时,主节点自动重启了,如果从节点继续复制主节点的话,从节点的数据也会被清空!

所以,如果想保留数据,正确的做法是先断开从节点和主节点的连接,然后再重启主节点。类似于一种故障转移机制。

2. 一主多从

一主多从,又称星形拓扑结构,使得应用端可以利用多个从节点实现读写分离,对于读占比较大的场景,可以通过多个读节点分担主节点压力。

同时,在日常开发中,一些耗时命令(keys,sort),可以在其中一台上执行,防止干扰其他请求。

但是:如果写并发量很高,多个从节点会导致主节点写命令的多次发送从而过度消耗网络带宽,同时也加重了主节点负载影响服务稳定性。

3. 树形结构

又称(树状拓扑结构),使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下复制。通过引入复制中间层,一主多从的缺点(多个从节点导致的消耗过多网络带宽)就解决了。

但是,也带来了新的问题,如下图:

如果图中节点故障,那么后面的节点也将无法收到主节点的信息,因此对于运维来讲,增添了许多复杂度,需要手动将节点启动。

总结

本文只是简单介绍了一下 redis 复制相关的内容,包括如何建立复制,断开复制,复制连接的安全,复制的只读状态,还有 Redis 拓扑相关,例如一主一从,一主多从,树形结构。

下一篇文章将重点介绍 Redis 复制的原理。

引用

《Redis 开发与运维》


Redis 复制初体验
http://thinkinjava.cn/2018/08/02/2018/2018-08-03-Redis 复制初体验/
作者
莫那·鲁道
发布于
2018年8月2日
许可协议