> 文章列表 > Redis第二十三讲 Redis集群的限制与集群选举原理分析

Redis第二十三讲 Redis集群的限制与集群选举原理分析

Redis第二十三讲 Redis集群的限制与集群选举原理分析

集群的限制及应对方法

由于集群中的数据分布在不同节点中,导致一些功能受限,包括:

  • key批量操作受限:例如mget、mset操作,只有当操作的key都位于一个槽时,才能进行。针对该问题,一种思路是在客户端记录槽与key的信息,每次针对特定槽执行mget/mset;另外一种思路是使用Hash Tag,将在下一小节介绍。

  • keys/flushall等操作:keys/flushall等操作可以在任一节点执行,但是结果只针对当前节点,例如keys操作只返回当前节点的所有键。针对该问题,可以在客户端使用cluster nodes获取所有节点信息,并对其中的所有主节点执行keys/flushall等操作。

  • 事务/Lua脚本:集群支持事务及Lua脚本,但前提条件是所涉及的key必须在同一个节点。Hash Tag可以解决该问题。

  • 数据库:单机Redis节点可以支持16个数据库,集群模式下只支持一个,即db0。

  • 复制结构:只支持一层复制结构,不支持嵌套。

Redis集群选举原理分析

当slave发现自己的master变为FAIL状态时,便尝试进行Failover,以期成为新的master。由于挂掉的master可能会有多个slave,从而存在多个slave竞争成为master节点的过程, 其过程如下:
1.slave发现自己的master变为FAIL
2.将自己记录的集群currentEpoch加1,并广播FAILOVER_AUTH_REQUEST 信息<