Redis分布式部署

在大规模生产环境中,Redis 需要支持分布式部署,以确保高可用性、扩展性和负载均衡。Redis 提供了几种分布式部署方法,主要包括 主从复制Redis SentinelRedis Cluster。每种方法都有其适用场景和优缺点。

1. 主从复制(Master-Slave Replication)

主从复制是 Redis 提供的基本分布式机制,通过将数据从主节点复制到多个从节点,实现读写分离和数据备份。

架构

  • 主节点(Master):负责处理写请求。
  • 从节点(Slave):复制主节点的数据,处理读请求。

优点

  • 数据冗余:从节点可以作为主节点的备份,避免数据丢失。
  • 读写分离:通过从节点处理读取请求,减轻主节点的压力。

部署方法

  1. 配置主节点和从节点:在从节点的 redis.conf 中,设置主节点地址:
  2. 启动主节点和从节点:分别启动主节点和从节点 Redis 实例。
  3. 负载均衡:可以通过应用程序层面的负载均衡,将读取请求指向从节点,写入请求指向主节点。

缺点

  • 没有自动故障转移:如果主节点宕机,系统将无法自动恢复。
  • 不能水平扩展:只能通过增加从节点来实现读扩展,不能解决写入瓶颈。

2. Redis Sentinel(高可用性)

Redis Sentinel 是 Redis 提供的一种高可用性解决方案,支持自动故障转移、监控和通知等功能。

架构

  • Sentinel 实例:多个 Sentinel 实例负责监控 Redis 主节点和从节点的健康状态。
  • 主节点(Master):负责写操作。
  • 从节点(Slave):负责读操作,并可以在主节点故障时成为新的主节点。

优点

  • 自动故障转移:如果主节点发生故障,Sentinel 会自动选择一个从节点提升为新的主节点。
  • 监控功能:Sentinel 实例可以监控 Redis 实例的健康状况,进行故障检测和报告。

部署方法

  1. 启动 Sentinel:Sentinel 使用配置文件 sentinel.conf,在文件中配置要监控的 Redis 实例。
  2. 启动多个 Sentinel 实例:为了保证高可用性,至少需要三个 Sentinel 实例来进行选举和故障转移。
  3. 配置主从复制:配置主节点和从节点,并确保从节点正确同步主节点数据。
  4. 负载均衡:应用程序可以通过 Sentinel 查询当前的主节点 IP 地址来进行负载均衡。

缺点

  • 复杂性:部署和管理多个 Sentinel 实例增加了系统的复杂度。
  • 延迟:自动故障转移可能会引入短暂的服务中断。

3. Redis Cluster(分布式分片)

Redis Cluster 是 Redis 的原生分布式方案,提供了数据分片和高可用性,允许 Redis 进行水平扩展。

架构

  • 多个节点:Redis Cluster 由多个节点组成,每个节点可以是主节点或从节点。
  • 数据分片:Redis Cluster 使用 16384 个槽(slot)来分配数据,每个主节点负责一定范围的槽。

优点

  • 水平扩展:通过增加节点,可以轻松扩展 Redis 集群的存储和处理能力。
  • 高可用性:Redis Cluster 本身就支持高可用性,每个主节点有一个从节点副本来保证故障转移。
  • 无需外部工具:Redis Cluster 是 Redis 原生的分布式解决方案,不需要使用像 Redis Sentinel 这样的外部工具来管理高可用性。

部署方法

  1. 准备节点:Redis Cluster 至少需要 3 个主节点和 3 个从节点,通常是每个主节点配备一个从节点来保证高可用性。
  2. 配置集群模式:在 redis.conf 文件中,设置 cluster-enabled yes 和 cluster-config-file nodes.conf。启动 Redis 实例时,确保集群模式已启用。
  3. 创建集群:使用 redis-cli 工具创建 Redis 集群。通过指定多个节点的信息,创建一个集群:
  4. 分配槽(Slot):Redis Cluster 会自动分配槽,每个主节点负责一部分槽。数据会根据哈希算法分布在不同的槽中。
  5. 连接集群:客户端通过 cluster 模式与 Redis 集群通信,自动根据哈希槽定位到正确的节点。

缺点

  • 复杂性:Redis Cluster 的部署和管理相对复杂,尤其是在需要进行数据迁移、节点扩展或故障恢复时。
  • 数据迁移:节点间的数据迁移可能会造成一定的性能开销。
  • 一致性问题:Redis Cluster 采用的是最终一致性模型,因此可能会有短暂的数据不一致。

4. 分布式部署的选择

  • 主从复制:适用于读多写少的场景,通过增加从节点来扩展读性能。
  • Redis Sentinel:适用于需要高可用性和自动故障转移的场景,适合小规模的 Redis 集群。
  • Redis Cluster:适用于需要水平扩展、支持大规模数据存储和高可用性的场景,是 Redis 的分布式方案,适合大规模的生产环境。
Redis的碎碎念 文章被收录于专栏

Redis面试中的碎碎念

全部评论

相关推荐

05-19 16:19
门头沟学院 Java
凉,原因是自己答得不是非常好以及他们要求学历是杭电及以上学历待遇可以1. 反射知道吗,你说一下2. hashmap的底层结构3. hashtable知道吗4. hash方法是如何优化的5. 多少会转为红黑树6. 为什么要用高16位和低16位异或7. 那他是怎么插入槽的,做了什么优化,过程说一下8. 是怎么实现一个去重的9. concurrentHashMap了解吗10. 那分段锁里面是怎么实现的11. cas+synchronized是如何操作,为什么要这样呢,先详细说一下cas12. 是怎么上锁的呢(这里我说是对对象,他说是吗,这样不是整个锁住了吗)13. JVM的内存结构说一下14. 线程池的那个参数说一下15. 拒绝策略有哪些16. redis的aof重写说一下17. mysql的行锁说一下18. 为什么里面用b+树19. 索引失效情况有哪些(没答完全)20. 索引覆盖是什么21. 索引下推讲讲22. redission的看门狗机制说一下23. redis里面的数据你是怎么与数据库同步(定时)24. volatile25. 如果我要求强一致性,然后每隔10秒进行一次同步,但是其中这个业务进行时间大于10秒了怎么办(消息队列,多线程去处理)26. lua脚本执行到一半中断,比如redis宕机,这个时候会回滚吗27. acid说一下28. 异常处理机制29. synchronized的底层原理30. reentrantlock的原理,他底层是怎么实现的
丰川打工祥:不会是智晟未来吧。这是家培训公司。3300+500绩效+免费住宿。工作是给别人面试,没什么编码机会。可以仔细想想要不要去。
查看30道真题和解析
点赞 评论 收藏
分享
二面基本上场景+八股+聊天 个人觉得有点难一. 个人方面1.从大学到现在做过最有挑战的一件事情2.在找第一份实习你做的最正确的一件事3.问毕设(大三没有qwq)4.参加了什么实验室吗(打竞赛qwq)5.什么时候接触的安卓6.期末demo花了多久,怎么写的,有没有借鉴开源项目二. java安卓八股1.安卓进程间通信,为什么新做了binder(不会)瞎说的2.有没有看过binder源码,有没有写过跨进程之间通信的demo3.handler和binder什么关系啊,message和binder的关系(我说message底层是binder,我瞎说的我真不知道qwq)4.安卓里面最难的知识点接触的是什么5.什么是协程 和线程的关系 为什么是轻量级的,节省的内存在哪里6.jvm虚拟机了解到多么,内存管理这方面了解吗(不会 只知道垃圾回收)7.怎么判断一个对象有没有内存泄漏,要不要回收8.日常开发如何排查内存泄漏9.除了leakcanary还可以怎么样10.leakcanary的原理11.如何避免内存泄漏呢,在开发过程中12.安卓发起网络请求如何实现,代码具体怎么写三. 场景1.有abc三个请求a,b独立,c依靠ab请求的数据,如果这样你怎么实现,代码具体怎么实现2.如果我想实现一个线程安全的方法,比如说我写了个单例,这个单例的方法我要是保证它线程安全的,那实现方式都有哪些?3.假如说我这个单例的初始化已经写完了,再去写其他的一些方法,那还有什么方式来去实现4.锁怎么加,加在哪,在返回之前加,在返回之后加5.violent是解决什么问题的,除了单例模式,还有什么情况需要用6.为什么java会有线程不安全(因为java有并发),为什么并发会导致不安全,底层原因是什么(我举了一个两个线程操作同一个变量,会有逻辑错误,所以线程不安全),他说我不对,问我如果想了解这方面的知识原理需要学什么(os)四. 网络八股+场景1.网络层的协议都有什么2.https为什么更安全3.什么是对称加密 什么是非对称加密,加密解密流程是什么(不会)4.dns协议解决的问题是什么5.我们在安卓的网络请求的时候,优化 DNS 解析的时间,有什么思路吗(缓存)6.缓存的策略要怎么去维护(没理解)补充:数据结构要怎么去设计代码的这个类要具备哪些能力7.存下来的数据怎么管理呢(纯拷打)五. 其他询问成绩 手撕二维螺旋数组后续觉得凉凉了就没录音,就是一些实习多久云云整体时间就是5,17一面 下午约二面 5.19上午二面 下午oc 5. 22邮件
点赞 评论 收藏
分享
05-16 16:39
已编辑
门头沟学院 Java
2025.5.14 40min面试官介绍部门非常详细,lazada东南亚最大电商平台主要是结合项目问八股,也有项目中某些细节的具体实现,和数据库表的设计面试官很好,在问的过程中,一边在记录面评,面试中学到了很多。虽然也有些没答上来,或者没答到位,但是比阿里云的体验好多了。面试官先介绍实习招聘的流程,说Bravo102实习生招聘是统一面试的,最后拿到offer,会让同学自己选择想去的部门,双向选择。第一个没让自我介绍的公司1. Redis的过期删除策略2. 具体的过期删除算法有哪些,绕了好久,最后发现他想问的是内存淘汰策越(LRU、LFU、随机删)3. Spring拦截器用到了吗,拦截器的底层原理4. 拦截器和过滤器的区别5. Kafka怎么保证消息不丢失6. 项目中Kafka具体怎么使用的7. 消息异常,没有发出去该怎么解决8. 重试具体是怎么做的,循环吗9. 重试多次失败,怎么办,抛出异常吗10. 消息一直没发出去是什么原因,分析一下11. SQL怎么优化的12. 怎么判断是慢查询的13. 怎么设计一个好的数据库14. 说说项目的数据库表是怎么设计的,可以说字段、索引、外键等一些设计15. 主键怎么设计的,普通递增,分布式中可以用雪花算法16. 除了雪花算法和UUID,还有什么可以让主键不重复17. 问具体的字段用什么类型设计的,比如用户名18. 什么时候用到了JOIN19. left join、right join和outer join20. 加密算法有哪些,什么区别21. 项目中用到哪些Spring特性22. 简单说说AOP是什么23. 动态代理,有的基于接口,有的不基于接口,具体说说什么区别24. 项目中哪些地方用到了AOP25. 说一下设计模式,以及知道哪些常用的设计模式,项目中怎么用到设计模式的26. 模版模式了解吗 27. 说说Spring中事务传播级别有哪些28. 两个方法嵌套调用,A调用B,A发生异常时事务传播机制怎么设置,B发生异常时事务传播机制怎么设置29. Redis和数据库怎么保证数据一致性30. SpringCache了解吗31. 说说线程池32. 核心线程数根据什么设置33. 说说Synchronized34. Synchronized 和volatile 的区别35. 项目中或者哪些场景下用到volatile反问(虽然是东南亚平台,但是做技术的不需要国外出差,非常详细的介绍部门和业务大概有5分多钟)最后对问的问题也进行了总结,说可以钻研深入些,还有多看看源码。对于他问的问题,每个问题可以多说一点(比如说慢查询优化,可以从怎么选择存储引擎,项目数据量是多少,每个表怎么设计的,索引怎么设计,这些方面都可以说),不用等着他来问。关于分库分表,也要考虑表的规模。
点赞 评论 收藏
分享
评论
4
2
分享

创作者周榜

更多
牛客网
牛客企业服务