redis复制(replication)形式

在 Redis 中,复制(Replication)是指通过将一个 Redis 实例的数据同步到另一个实例来实现数据的冗余备份和高可用性

  • Redis 的复制机制支持
    • 主从复制
    • 哨兵模式(Sentinel)
    • 集群模式

1. 主从复制(Master-Slave Replication)

主从复制是 Redis 最基础的复制形式,它通过将一个 Redis 实例(主节点)上的数据同步到一个或多个 Redis 实例(从节点)来实现数据备份和读写分离。

  • 主节点(Master):主节点是数据的写入来源,所有写操作都在主节点上进行。
  • 从节点(Slave):从节点从主节点同步数据,所有从节点的写操作都由主节点同步过来。从节点通常用于读取操作,减轻主节点的负载。

业务上读写分离,需要中间间支持。

工作原理:

  1. 在 Redis 启动时,主节点会将其数据快照(bgsave rdb)发送给从节点,建立初始的数据同步。
  2. 之后,主节点上的每个写操作(如 SET, DEL 等)会通过复制协议同步到所有的从节点。
  3. 从节点定期向主节点发送 PSYNC 命令进行增量同步,确保从节点的数据始终与主节点一致。

382546f3a4531665d5244dd194aba373.png

配置:

1
2
# 在从节点上配置主节点
replicaof <master-ip> <master-port>

2.Redis 哨兵模式(Sentinel)

Redis Sentinel 是 Redis 的高可用性解决方案。它是一个监控和管理 Redis 集群的组件,能够自动实现故障转移(Failover),并确保 Redis 集群在某个主节点发生故障时,能迅速恢复服务。

主要功能:

  • 监控:监控 Redis 主节点和从节点的健康状况。
  • 通知:当主节点发生故障时,Sentinel 会通知管理员。
  • 自动故障转移:当 Sentinel 检测到主节点故障时,会自动将一个从节点提升为新的主节点,并更新相关配置。
  • 配置提供者:客户端可以通过 Sentinel 获取到 Redis 集群的当前主节点信息。

6d264549daa293ad6f7f42813ca50fee.png

配置:

  1. 配置 sentinel.conf 文件,指定 Redis 主节点。
  2. 启动 Sentinel 实例:
1
redis-server /path/to/sentinel.conf --sentinel

3. Redis 集群(Cluster)

Redis 集群是一种分布式架构,用于将数据分布在多个 Redis 实例上,以实现水平扩展。与传统的主从复制不同,Redis 集群是分片复制的,每个节点存储数据的一个子集,并通过一定的方式保证数据在集群中的一致性和高可用性。

关键特点:

  • 分片(Sharding):数据被分成多个片(Slot),每个 Redis 实例负责一部分槽的数据。
  • 主从复制:每个分片(Slot)都会有一个主节点和一个或多个从节点。主节点负责读写操作,从节点负责备份和读取操作。
  • 高可用性:当主节点发生故障时,Redis 集群会自动将一个从节点提升为主节点。
  • 无中心化架构:每个节点都可以直接与其他节点通信,而不依赖于中央协调者。

工作原理:

  1. Redis 集群将数据按哈希槽(hash slots)分布到不同的 Redis 实例中,每个实例负责一部分槽。
  2. 集群中的节点之间通过 Gossip 协议进行通信,保证数据的一致性和集群的健康状态。
  3. 数据分布在 16384 个哈希槽上每个节点负责一部分槽的数据

fd874ef724282f8c9a7fb2024bd3dff8.png

当master down,由剩余master投票提升slave为master(当存活master少于一半时,不能自主投票选举导致集群不可用,可以人工提升slave为master)

配置:

1
2
3
# 在每个节点的配置文件中开启集群模式
cluster-enabled yes
cluster-config-file nodes.conf #自动生成维护

集群操作:

  • 启动 Redis 集群时,使用 redis-trib 工具或者新版 Redis 提供的 redis-cli 工具来创建、管理和扩展集群。

4. 同步复制(Synchronous Replication)

同步复制是 Redis 5.0 之后引入的一个新特性,它支持在主节点进行写操作时等待至少一个从节点确认写操作已经同步后再返回客户端,从而提供数据的更高可靠性。

特点:

  • 主节点会等待至少一个从节点确认数据已经写入并持久化,才会回复客户端操作成功。
  • 提高了数据的安全性,但可能导致性能下降,因为操作需要等待从节点的确认。

配置:

1
2
# 在主节点中启用同步复制
replica-priority 100

5. 半同步复制(Semi-Synchronous Replication)

Redis 还支持一种更灵活的同步方式,称为半同步复制。在这种模式下,主节点会等待至少一个从节点完成数据同步,但不会等待所有从节点都完成。

这种模式在性能和数据安全性之间提供了一个折中点。

总结

  1. 主从复制:最基础的复制形式,用于备份和读写分离。
  2. 哨兵模式:用于高可用性,提供自动故障转移和监控。
  3. Redis 集群:支持数据分片和水平扩展,适用于大规模部署。
  4. 同步复制:提高数据的可靠性,确保写入确认后才返回成功。
  5. 半同步复制:提供折中方式,在性能和数据一致性之间达到平衡。