当前位置: 首页 > 科技观察

伟大的!原来Redis集群是这样的

时间:2023-03-12 20:03:03 科技观察

《你用过Redis吗?“用过的。”“能谈谈你对Redis集群的理解吗?”“呃……”这是一次真实的面试经历。近期,各大互联网公司纷纷开始裁员,让一大批互联网从业者开始了艰难的求职之路。老手不用多说,但是对于长期在项目中却基本只会用Redis的程序员来说,估计这个问题对有些人来说会有些难度。Redis集群分为三种类型:主从模式、哨兵模式和集群(集群)模式。让我们来看看卡的三种模式是如何工作的。主从模式主从模式是三种集群方式中最简单的一种。主要是基于Redis的主从复制特性架构。通常我们会设置一个主节点和N个从节点。默认情况下,主节点负责处理用户的IO操作,而从节点会备份主节点的数据,同时对外提供读操作处理。这有两个目的:备份数据和负载平衡。在备份数据主从模式下,当一个节点损坏时,会将数据备份到其他Redis实例上,可以在很大程度上恢复丢失的数据。负载均衡主从模式下,主节点和从节点是读写分离的。用户不仅可以从主节点读取数据,还可以方便地从从节点读取数据,一定程度上缓解了主机的压力。当然从节点也可以支持写入数据,但是从节点写入的数据不会同步到主节点和其他从节点。从上面不难看出,在Redis的主从模式下,需要保证master节点不会宕机——一旦master节点宕机,其他节点就不会竞争成为master节点。这时候Redis就会失去写的能力。这在生产环境中是致命的。所以Redis为我们引入了另一种集群模式——哨兵模式。哨兵模式哨兵模式是在主从模式的基础上进行的一定变化,可以为Redis提供高可用。在实际生产中,服务器难免会遇到一些突发情况:服务器宕机、断电、硬件损坏等,这些情况一旦发生,后果往往是不可估量的。哨兵模式可以在一定程度上帮助我们避免这些事故带来的灾难性后果。其实哨兵模式的核心就是主从复制。只是与主从模式相比,当主节点宕机无法写入时,多了一个选举机制——从所有从节点中选举出一个新的主节点。选举机制的实现依赖于系统中启动一个哨兵进程。Sentinel特性监控监控主从服务器是否正常工作。Notification可以通过API告诉系统管理员或程序集群中的某个实例出现了问题。Failover当主节点出现问题时,它会在所有从节点中选出一个节点作为新的主节点。提供主服务器地址也为用户提供当前主节点的地址。故障转移后,用户无需修改即可知道当前主节点的地址。就sentinel而言,当然也有一定的集群能力。Redissentinel本身就是一个分布式系统。但是哨兵集群与其他集群有点不同。Sentinel可以通过发布和订阅自动发现Redis集群上的其他哨兵。sentinel发现其他sentinel进程后,会把它们放到一个list中,里面存放着所有已经被发现的sentinel。集群中的所有哨兵不会同时对同一个主节点进行故障转移。故障转移只会从第一个哨兵开始,当第一个故障转移失败时,会尝试下一个。当从从设备节点选择新的主节点时,故障转移将成功(无需等待所有从设备配置新的主节点)。在这个过程中,如果旧的master节点重启了,master节点就没有了。这种情况只能重启集群。Whenanewmasternodeiselected,theconfigurationinformationoftheslavenodeselectedasthenewmasternodewillberewrittenbySentineltotheconfigurationinformationoftheoldmasternode.改写完成后,将新主节点的配置广播给所有从节点。Cluster(集群)模式Cluster(集群)模式的出现就是为了解决Redis单机容量有限的问题。这种模式将Redis中的数据按照一定的规则分到多台机器上。这种模式有两个特点:能够跨多个节点自动拆分数据集。当节点子集出现故障或无法与集群的其余部分通信时,能够继续操作。Redis集群中有16384个哈希槽。相反,Redis集群中的每个节点只负责哈希槽的一个子集。例如,您可能有一个包含3个节点的集群,其中:节点A包含从0到5500的哈希槽。节点B包含从5501到11000的哈希槽。节点C包含从11001到16383的哈希槽。这允许用户轻松添加和从集群中删除节点。例如,如果我想添加一个新的节点D,我需要将一些哈希槽从节点A、B、C移动到D。同样,如果我想从集群中删除节点A,我只需移动由节点提供的哈希一个凹槽。到B和C。当节点A为空时,我可以将其从集群中完全删除。由于将哈希槽从一个节点移动到另一个节点不需要停止操作、添加和删除节点或更改节点持有的哈希槽百分比,因此不需要停机。