基本特性
Redis 集群提供了非常丰富的特性供用户使用,本节将对这些特性做进一步的介绍。
复制与高可用
Redis 集群与单机版 Redis 服务器一样,也提供了主从复制功能。在 Redis 集群中,各个 Redis 服务器被称为节点(node),其中主节点(master node)负责处理客户端发送的读写命令请求,而从节点(replica/slave node)则负责对主节点进行复制。
除了复制功能之外,Redis 集群还提供了类似于单机版 Redis Sentinel 的功能,以此来为集群提供高可用特性。简单来说,集群中的各个节点将互相监视各自的运行状况,并在某个主节点下线时,通过提升该节点的从节点为新主节点来继续提供服务。
图20-1展示了一个包含 3 个节点的 Redis 集群。

分片与重分片
与单机版 Redis 将整个数据库放在同一台服务器上的做法不同,Redis 集群通过将数据库分散存储到多个节点上来平衡各个节点的负载压力。
具体来说,Redis 集群会将整个数据库空间划分为 16384 个槽(slot)来实现数据分片(sharding),而集群中的各个主节点则会分别负责处理其中的一部分槽。当用户尝试将一个键存储到集群中时,客户端会先计算出键所属的槽,接着在记录集群节点槽分布的映射表中找出处理该槽的节点,最后再将键存储到相应的节点中,如图20-2所示。

当用户想要向集群添加新节点时,只需要向 Redis 集群发送几条简单的命令,集群就会将相应的槽以及槽中存储的数据迁移至新节点。与此类似,当用户想要从集群中移除已存在的节点时,被移除的节点也会将自己负责处理的槽以及槽中数据转交给集群中的其他节点负责。最重要的是,无论是向集群添加新节点还是从集群中移除已有节点,整个重分片(reshard)过程都可以在线进行,Redis 集群无须因此而停机。