Redis 的哨兵和副本原理是什么?

Redis的哨兵模式和Cluster模式是Redis实现集群和高可用的重要方面。

哨兵模式 Sentinel:

  • 哨兵:原理上是一个独立的进程。
  • 监控主服务器和从服务器。
  • 当哨兵检测到主服务器失败,会自动将从服务器切换为主服务器。
  • 只需要修改哨兵的配置文件,即可 implemented 高可用架构。

工作原理:

  1. 哨兵进程首先通过请求主服务器来监控其是否可用。
  2. 一旦哨兵监测到主服务器失败,会通过选举出新的主服务器。
  3. 当大部分哨兵选择同一台从服务器为主服务器时,这台服务器就会自动挂起老的主服务器。
  4. 新的主服务器会将数据同步到其他从服务器,确保一致性。
  5. 哨兵会不断监控主服务器和从服务器,一旦发生 failure 会重复之前的过程。

Cluster 模式:

  • 将多个 Redis 节点通过集群方式联合构建,形成一个集群。
  • 使用 Cluster 命令可以将多个节点加入到一个集群中。
  • 集群会自动地将数据分区存储到各个节点,并且在节点之间进行 load balance。

工作原理:

  1. 每个节点有可能持有部分水平划分的key空间。
  2. 当对集群的key进行操作时,节点会进行加锁,以避免竞争条件。
  3. 通过hash算法计算出key在哪个节点上,即可进行读写。
  4. 节点之间会维持集群地图,以了解整个集群的信息状态。
  5. 节点失败时,集群地图会进行相应更新,并移动影响的key。

通过哨兵模式管理主从复制,以及Cluster模式管理集群,Redis可以实现高可用和负载均衡。