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 开发与运维》