590 字
3 分钟
面试鸭-Redis 集群的实现原理是什么?
Redis 集群的实现原理是什么?
讲解Redis集群的实现原理,其实就是要弄明白:数据如何存储、节点之间如何通信、客户端如何请求数据、节点挂掉怎么处理这四个点。
- 数据如何存储:数据被分为多个哈希槽分片进行存储,不同key存在不同的槽中,总共分16384()个哈希槽,在决定存储于哪个槽的时候,对Key进行CRC16计算然后再对16384取模来确定。接着每个Redis主节点都负责一定范围的槽。
- 节点之间如何通信:通信时使用的是Gossip协议,这种协议有点像流言蜚语传播的感觉,就是每个节点定期随机选几个周围的节点,然后交互彼此信息,最终所有节点就都能知道其他所有节点的信息。
- 客户端如何请求数据:客户端可以向任意一个集群里的节点发起请求,如果Key在这个节点中就直接返回,如果不在这个节点中,就会返回一个MOVED错误,携带上正确的节点的IP地址和端口再返回,接收到MOVED的客户端会自动去连接这个返回的IP地址和端口,并且更新本地的缓存表,之后请求就直接走这个正确的节点。
- 节点挂掉如何处理:当某个节点挂掉后,周围的节点会发现它没有响应对应的信息,然后对它进行标记并分发消息出去,接着这个挂掉的节点的所有从节点会重新进行投票选出一个新的主节点(超过半数的为新主节点),接着这个新主节点会立刻接管旧主节点的哈希槽,并且广播信息。
其他: 如果集群在进行数据迁移或者缩容扩容,这时客户端请求到某一个节点中,可能这个节点迁移key迁移了一半,要请求的key不在它这里,但是槽还是它管,这时候不会返回MOVED错误,而是返回ASK表示临时重定向,这是客户端就会临时去对应位置请求,但不会更新本地缓存表。
问题
面试鸭-Redis 集群的实现原理是什么?
http://www.shineacz.top/posts/面试鸭-redis-集群的实现原理是什么/