redis集群

redis集群至少要有3个主节点

redis cluster将所有数据分到16384个槽中(214),每个主节点负责一部分槽。

槽位定位算法:

客户端会根据CRC算法对key算出一个整数值,然后再对16384取模,模的值就是具体槽位编号。

跳转重定向:

客户端连接集群后,会得到集群的槽位配置信息并将其缓存在客户端本地。当客户端要查找某个key时,会先计算出key在哪个槽,然后再根据本地槽位分配信息向对应的主节点发起请求。如果在服务端,槽位信息发生了变更(比如集群扩容或收缩),那么就有可能会发送到错误的节点上。节点收到请求后,发现key所在槽位不归自己管理,会向客户端发送一个携带正确节点地址的跳转命令,客户端收到指令后会跳转到正确的节点上。

网络抖动

真实情况下,网络抖动很常见。在redis.conf中有一个cluster-node-timeout配置项,默认是15s。只有当某个节点断连时间超过这个值后,才会被认为掉线,如果是主节点,则会重新进行选举。

redis cluster 主节点选举原理

当slave发现自己的master挂了,在一定延时后,会将自己记录的currentEpoch加1,并向其他节点发起投票请求,请求投自己为master。

CAP

redis集群是CP呢,还是AP呢?

redis集群新增节点后,会自动迁移数据吗?

posted on 2017-12-14 11:03  koushr  阅读(549)  评论(0编辑  收藏  举报

导航