这种特性允许在集群中轻松地添加和删除节点。同样的如果我想删除节点 D,只需要将节点 D 的哈希槽移动到其他节点,当节点是空时,便可完全将它从集群中移除。
主从模式
Redis Cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点复制主节点数据备份,当这个主节点挂掉后,就会通过这个主节点的从节点选取一个来充当主节点,从而保证集群的高可用。
回到刚才的例子中,集群有 A、B、C 三个主节点,如果这 3 个节点都没有对应的从节点,如果 B 挂掉了,则集群将无法继续,因为我们不再有办法为 5501 ~ 11000 范围内的哈希槽提供服务。
所以我们在创建集群的时候,一定要为每个主节点都添加对应的从节点。比如,集群包含主节点 A、B、C,以及从节点 A1、B1、C1,那么即使 B 挂掉系统也可以继续正确工作。
因为 B1 节点属于 B 节点的子节点,所以 Redis 集群将会选择 B1 节点作为新的主节点,集群将会继续正确地提供服务。当 B 重新开启后,它就会变成 B1 的从节点。但是请注意,如果节点 B 和 B1 同时挂掉,Redis Cluster 就无法继续正确地提供服务了。
优点
无中心架构;
可扩展性,数据按照 Slot 存储分布在多个节点,节点间数据共享,节点可动态添加或删除,可动态调整数据分布;
高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做备份数据副本。
实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升。
缺点
数据通过异步复制,无法保证数据强一致性;
集群环境搭建复杂,不过基于 Docker 的搭建方案会相对简单。
总结
随着互联网的飞速发展,我们享受着技术带来的便利,同时也给从业者带来了如何保证项目高并发、低延时的技术挑战。Redis 以其超高的性能,简洁轻量的设计,易上手,分布式架构的支持,在缓存等领域出色的表现等,得到了业界广泛的关注和应用,在当今高性能架构中,也发挥着越来越重要的作用。甚至可以说,Redis 已经成为 IT 互联网大型系统的标配,熟练掌握 Redis 成为开发、运维人员的必备技能。
如果不深挖底层,仅仅只是从使用的角度出发,Redis 的学习成本将会非常低。如果作为一个很好的中间件去研究的话,还是有很多值得学习和借鉴的地方。以上几种模式,每种都有各自的优缺点,在实际场景中要根据业务特点去选择合适的模式使用。
参考资料
https://redis.io/topics/replication
https://redis.io/topics/sentinel
https://redis.io/topics/cluster-tutorial
https://redis.io/topics/cluster-spec