什么是Redis-Cluster集群?
作者:程序员马丁
热门项目实战社群,收获国内众多知名公司面试青睐,近千名同学面试成功!助力你在校招或社招上拿个offer。
回答话术
分片集群是 Redis 在 3.0 以后提供的一个集群部署方案,它主要解决的是集群的横向扩展问题。
Redis 集 群是一个去中心化的结构,它没有类似注册中心这样的全局管理者,因此集群中的每个节点都会通过 Gossip 协议与其他节点保持通信,以监控彼此的健康状态,并交换包括哈希槽的分配情况、疑似下线的节点情报在内的各项数据,并最终在每个节点都全量的保存集群的各项元数据。
Redis 集群中的每个主节点都可以拥有多个从节点,主节点将会通过主从复制向从节点同步数据,不过与传统主从模式不同的是,Redis 集群中的从节点一般不对外提供读服务,它们仅用于作为备份。当主节点下线后,集群中的其他节点将会通过投票选举选出新的主节点,并且自动的完成主从切换,实现故障转移。
在 Redis 集群中,共划分了 16384 (即 2 ^ 14)个哈希槽,集群中的每个节点都拥有其中的一部分槽位,当客户端发起请求时,可以直接请求集群中的任意节点,节点将会通过哈希函数确认 Key 落在哪一个槽位上,进而确认客户端的请求最终需要路由到集群中的哪一个节点。此时,如果当前节点即为目标节点,将直接执行命令,否则将会返回 MOVED 响应告知客户端应当改为请求哪一个节点。(常用的客户端基本都具备自动完成重定向功能,并且为了性能还都会在本地缓存槽位和节点的映射关系,直接在本地计算出最终要路由的节点,从而避免每次都要访问到错误的节点后再重定向)
基于这样的机制,当 Redis 集群需要进行扩容或缩容时,就可以通过重新分配哈希槽灵活变更集群中的节点数量,甚至可以通过为具备更强性能的节点分配更多的槽位,手动实现“数据倾斜”。