我看了好多篇的文章形成了对redis集群模式的理解:
- redis 主从复制模式支持读写分离和主节点故障后手工切到从节点,有较高可用性,不至于主节点挂了就缓存崩溃。
- redis哨兵是一种更高级的主从复制模式,不仅全部支持第1条主从模式,而且master故障的主从切换是自动的;
- 主从复制和哨兵只是提高了redis的可用性,并没有垂直扩容能力,实质上最大存的数据量受到单机内存的限制;
- redis cluster的slot采用哈希槽算法扩容,每一个slot都可以主从切换,因此同时解决了高可用和可扩容的问题;
这几个模式有点像不断升级的过程。如果资金允许,cluster是最好的,如果单机内存足够而且机器不多,哨兵保证高可用即可,哨兵的读写分离也能提升性能。
我认为楼主理解的意思是对的。我这里总结一下:
Redis 主从模式:
主从模式强调 数据备份,读写分离,负载均衡等 但 不能自动故障恢复。
Redis 哨兵:
哨兵模式强调高可用。可以解决自动故障恢复的问题,但不能解决负载均衡的问题。
Sentinel 会监控多个服务器,当 master 不可用时,会将一个 salve 升级为 master, 并将其他 salve 的主服务器更新为最新的 master。
Redis 集群
集群模式强调并发量。
cluster是为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器。
每台 redis 存储不同的内容,共有 16384 个slot。每个redis分得一些slot,hash_slot = crc16(key) mod 16384 找到对应slot。