Redis数据库的集群模式有哪些特点?

2024年6月5日19:33:22Redis数据库的集群模式有哪些特点?已关闭评论

Redis集群采用无中心结构,每个节点都可以保存数据和整个集群状态,每个节点都和其他所有节点连接。集群一般由多个节点组成,节点数量至少有6个才能保证组成完整、高可用的集群,其中3个为主节点,3个为从节点。3个主节点会分配槽,处理客户端的命令请求,而从节点可用在主节点故障后,顶替主节点。集群模式就是把数据进行“分片”存储,当一个分片数据达到上限的时候,还可以分成多个分片。通过分片来提供一定程度的可用性,自动分割数据到不同的节点上,整个集群的部分节点失败或者不可达的情况下能够保持系统的可用性。

Redis集群的数据分片引入了哈希槽(Hash Slot)的概念;集群有16384个哈希槽,当需要在集群中放置一个键值对时,先对每个键通过CRC16算法算出一个整数结果,然后把结果对16384取模得到余数来对应一个编号在0~16383之间的哈希槽,Redis会根据节点数大致均等地将哈希槽映射到不同的节点,集群的每个节点负责一部分哈希槽。例如当前集群有3个节点,节点A包含0~5500号哈希槽,结点B包含5501~11000号哈希槽,节点C包含11001~16383号哈希槽。这种结构很容易添加或者删除节点,例如添加节点D,需要从节点A、B、C中移动部分槽到D上;移除节点A是先将A中的槽移到B和C节点上,再将没有任何槽的A节点从集群中移除。由于从一个节点中将哈希槽移动到另一个节点并不会停止服务,因此无论是添加、删除还是改变某个节点的哈希槽的数量,都不会造成集群不可用的状态。Redis集群提供了灵活的节点扩容和缩容方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容,也可以为下线部分节点进行缩容。槽是Redis集群管理数据的基本单位,集群伸缩就是槽和数据在节点之间的移动。扩容或缩容以后,槽需要重新分配,数据也需要重新迁移,但是服务不需要下线。

Redis集群为了保证数据的高可用性,加入了主从模式。一个主节点对应一个或多个从节点,主节点提供数据存取,从节点复制主节点数据备份。当这个主节点挂掉后,就会从这个主节点的从节点中选取一个来充当主节点,从而保证集群的高可用。集群会把数据存储在一个主服务器节点,在这个主服务器和其对应的从服务器之间同步数据。一致性哈希算法是用来解决分布式系统中数据分片问题的,它将数据映射到一个固定的区间,每个节点也被映射到这个区间上,每个数据的哈希值也映射到这个区间上,数据被分配给最接近它的节点,如果某个节点宕机,它上面的数据就会被分配给下一个节点。这样,增加或删除节点只会对相邻的节点和数据有影响,其他节点和数据的位置不会改变。当操作数据时,根据一致性哈希算法对应的主服务器节点获取数据。当一个主服务器失效之后,对应的从服务器节点启动并成为主服务器。集群中至少有3个节点,当存活的节点数小于总节点数的一半时,整个集群就无法提供服务了。客户端连接到集群中任何一个可用节点即可。

集群的优点是:无中心架构;高可扩展性,数据按照槽存储分布在多个节点上,节点间数据共享,节点可动态添加或删除,可动态调整数据分布;高可用性,部分节点不可用时,集群仍可用。通过增加从节点备份数据副本。实现故障自动转移,节点之间通过Gossip协议交换状态信息,用投票机制完成从节点到主节点的角色转变。缺点是:数据通过异步复制,无法保证数据强一致性;集群环境搭建相对复杂。

  • A+
所属分类:SQL
  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。