Redis的哨兵模式和Cluster模式是Redis实现集群和高可用的重要方面。
哨兵模式 Sentinel:
- 哨兵:原理上是一个独立的进程。
- 监控主服务器和从服务器。
- 当哨兵检测到主服务器失败,会自动将从服务器切换为主服务器。
- 只需要修改哨兵的配置文件,即可 implemented 高可用架构。
工作原理:
- 哨兵进程首先通过请求主服务器来监控其是否可用。
- 一旦哨兵监测到主服务器失败,会通过选举出新的主服务器。
- 当大部分哨兵选择同一台从服务器为主服务器时,这台服务器就会自动挂起老的主服务器。
- 新的主服务器会将数据同步到其他从服务器,确保一致性。
- 哨兵会不断监控主服务器和从服务器,一旦发生 failure 会重复之前的过程。
Cluster 模式:
- 将多个 Redis 节点通过集群方式联合构建,形成一个集群。
- 使用 Cluster 命令可以将多个节点加入到一个集群中。
- 集群会自动地将数据分区存储到各个节点,并且在节点之间进行 load balance。
工作原理:
- 每个节点有可能持有部分水平划分的key空间。
- 当对集群的key进行操作时,节点会进行加锁,以避免竞争条件。
- 通过hash算法计算出key在哪个节点上,即可进行读写。
- 节点之间会维持集群地图,以了解整个集群的信息状态。
- 节点失败时,集群地图会进行相应更新,并移动影响的key。
通过哨兵模式管理主从复制,以及Cluster模式管理集群,Redis可以实现高可用和负载均衡。