赞
踩
如果Redis的读写请求量很大,那么单个实例很有可能承担不了这么大的请求量,如何提高Redis的性能呢?你也许已经想到了,可以部署多个副本节点,业务采用读写分离的方式,把读请求分担到多个副本节点上,提高访问性能。要实现读写分离,就必须部署多个副本,每个副本需要实时同步主节点的数据。
Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。
优点:
缺点:
主(master)和 从(slave)部署在不同的服务器上,当主节点服务器写入数据时会同步到从节点的服务器上,一般主节点负责写入数据,从节点负责读取数据。
从节点设置只读属性,而主节点没有只写属性,因此,主节点可读可以写
优点:
缺点:
主节点故障,集群则无法进行工作,可用性比较低,从节点升主节点需要人工手动干预。
因为只有主节点能进行写操作,一旦主节点宕机,整个服务就无法使用。当然此时从节点仍可以进行读操作,但是对于整个服务流程来说,是无法使用的。
Master的写的压力难以降低。
如果写操作比较多,那么只有一个主节点的话,无法分担压力。
主节点存储能力受到单击限制。
主节点只能有一个,因此单节点内存大小不会太大,因此存储数据量受限。
主从数据同步,可能产生部分的性能影响甚至同步风暴。
风暴问题,对于任何集群分布式来说都存在,要合理分布节点。
为了解决这两个问题,在2.8版本之后redis正式提供了sentinel架构。
在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态。
如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般。
优点:
缺点:
与主从相比,哨兵仅解决了手动切换主从节点问题,至于其他的问题,基本上仍然存在。
哨兵的主要问题还是由于中心架构,仅存在一个master节点引起的,写的效率太低。
Redis Cluster 是 3.0 版后推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好的负载均衡的目的。
Redis Cluster 集群节点最小配置 6 个节点以上(3 主 3 从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。Redis Cluster 采用虚拟槽分区,所有的键根据哈希函数映射到 0~16383 个整数槽内,每个节点负责维护一部分槽以及槽所印映射的键值数据。
注意:集群模式下 从节点不提供读写,与主从模式不一样。 总结一下经验,分布式
场景下:集群模式一般从节点不参与读写,仅作为备用节点。而主从一般都要负责读或写,都要参与具体的工作。
优点:
无中心架构。
即有多个master节点,不像哨兵模式下仅有一个。这样写的压力就可以分散了;并且存储量也可以扩展了,因为多个主节点都可以存储一部分数据,总量要远大于单主节点架构。
数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。
可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除。
高可用性:部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够 实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升。
当然,如果某个槽归属的小群内都不可用时,整个服务仍然是不可用的!通过cluster-require-full-coverageyes
控制该特性, 默认yes 即需要集群完整,方可对外提供服务,设置为no ,其他的小集群仍然可以对外提供服务。
缺点:
本文主要介绍了 Redis 四种集群模式,以及优缺点,总结一下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。