Redis分布式方案及一致性Hash算法精讲

 

为什么Redis需要分布式

高性能

我们知道Redis本身的QPS已经很高了,但是在一些并发量非常高的情况下,性能还是会受到影响的。这个时候我们希望更多的Redis服务来分摊压力,实现负载均衡。

高可用

如果只有一个Redis服务,一但服务发生了宕机,那么所有的客户端都无法访问,会对业务造成很大的影响。另外,如果硬件损坏了,那上面的所有数据也是无法恢复的,我们需要个备份。

可扩展

第三点是出于存储的考虑,因为redis所有的数据都放在内存中,如果数据量大,很容易收到硬件的限制。比如一台Redis只能存4G的容量,但是有8G的数据要存,所以只能放两台机器,这个就是横向扩展,水平分片。

Redis分布式方案

主从复制

跟Kafka、RocketMQ、MySQL、ZooKeeper一样,Redis支持集群的架构,集群的节点有主节点和从节点之分。主节点叫master,从节点叫slave。slave会通过复制的技术,自动同步master的数据。

Redis主从复制解决了数据备份和一部分性能的问题。但是没有解决高可用的问题,在一主一从或者一主多从的情况下,如果主服务器挂了,对外提供的服务就不可用了,需要手动把从服务器切换成主服务器,然后再把剩余节点设置为它的从节点,这个比较费时,还会造成一定时间的服务不可用。

Sentinel哨兵

从Redis2.8版本起,提供了一个稳定版本的Sentinel哨兵来解决高可用的问题,它的思路是启动奇数个Sentinel的服务来监控Redis服务器来保证服务的可用性。

启动Sentinel可用用脚本启动,它本质上只是一个运行在特殊模式之下的Redis。Sentinel通过info命令得到被监听Redis机器的master,slave等信息。

./redis-sentinel ../sentinel.conf
# 或者
./redis-server ../sentinel.conf --sentinel

为了保证监控服务器的可用性,我们会对Sentinel做集群部署,Sentinel既监控所有的Redis服务,Sentinel之间也相互监控。 Sentinel本身没有主从之分,地位是平等的,只有Redis服务节点有主从之分。

image.png

Sentinel通过Raft共识算法,实现Sentinel选举,选举出一个leader来,由leader完成故障转移。Raft算法的应用很广泛,比如加密货币BTB,Spring Cloud注册中心Consul也用到了Raft算法。Raft算法的核心思想是:先到先得,少数服从多数。Sentinel的Raft实现跟原生的算法是有所区别的,但是大体思想一致。 Raft算法演示:thesecretlivesofdata.com/raft/

无论Jedis还是Spring Boot(2.x版本默认是Lettuce),都只需要配置全部的哨兵地址,由哨兵返回当前的master节点地址。

哨兵的不足:主从切换的过程中会丢失数据,因为只有一个ma

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值