redis集群模式
集群模式
三主三从,比较经典,且高可用;
采用哨兵模式的缺点:如果master挂了,此时有数据进来,同步rdb持久化一半中断,此时选举slave为master异步同步数据会丢失一部分数据;且选举新的master完成,master开始往slave同步数据(直接从内存同步或者rdb同步都行吧?),master挂了,也会丢失数据;
环境准备
https://class.imooc.com/lesson/1228#mid=29231
环境配置
在核心配置文件 redis.conf中的 CLUSTER 模块配置,每一个集群节点(node)都会有一个集群节点配置文件,这个文件不是人工进行编辑的,而是我们的redis集群会自动实现;开启AOF(以上为redis.conf相关)
保证你的工作目录下没有.aof和.rdb文件: 这两种文件是作为单机生成的,而集群后就不需要了,甚至有了启动会报错;
新版本用不到,老版本构建集群需要
redis 5.0之前是需要通过ruby构建集群环境,redis自带了ruby脚本文件为:redis-trib.rb
redis 5.0之后使用redis-cli --cluster进行配置
如果出现
Waiting for the cluster to join一直卡着,可能需要每个节点开房16739端口
原因:克隆虚拟机前已生成nodes-6379.conf,导致每个节点的nodes-6379.conf都一样,重启redis节点也没用,说明存在nodes-6379.conf后不会再重新生成
文档参考
https://class.imooc.com/lesson/1228#mid=29232
集群命令
redis-cli --cluster -help (redis集群命令都在其中)
# 构建集群节点
redis-cli -a 【redis密码 (不写就是没有密码)】 --cluster create [ip:端口号 ip:端口号 .... .....] --cluster-replicas 1
(redis集群就会自动构建)
# 检查集群信息
redis-cli -a [redis密码] --cluster check ip:端口号(随机一个配置了集群的节点)
# 查看节点相关信息
cluster nodes
# 连到集群里面某个节点的后台(随便连哪台都行,那如果连slave呢,能不能查看这些集群的信息?待试试)
redis-cli -c -a imooc -h ip -p port
# 查看集群状态
cluster info
什么是槽节点
槽节点,会平均分配给集群里面的所有master,所有数据都是分配到master里面的,slave是没有槽节点这个概念的
存数据的时候,是hash 平均分配到 每个master节点上的
get key的时候 会redirect 到对应持有这个数据的 节点上去
keys * 只会列出 本节点上 持有的数据
为什么 客户端的 get key 会重定向:
因为 在集群客户端,get 方法会包含一个算法,计算你输入key的hash % 16382 然后根据值查看重定向到哪个master节点上(测试方法,输入一个库中不存在key的 get 也会进行重定向)
(不管在哪个节点上都可以get获取相应信息,但是set 是根据 key的hash值取模 16382决定放在那台master上)
遵循了一致性hash原则)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?