Redis Cluster集群主从切换踩坑记

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis Cluster经过运行一段时间后,会经常发生主从关系的自动切换,应该是redis.conf里的集群节点的超时时限参数cluster-node-timeout有关。

因为项目的原因采用了Redis Cluster,3主3从,每台主机1主1从,集群信息如下:

10.135.255.72:20011> cluster nodes

7b662b36489a6240aa21d1cf7b04b84019254b63 10.135.255.74:20012 slave 85c78164a448fb9965e22447429a56cab226c68f 0 1537239581900 43 connected

61c3e1a640e71f4801d850c901dd33f0b4f6876d 10.135.255.73:20012 slave 8e3491125e105333958dd752ee0d0b0a41ed2d90 0 1537239582300 41 connected

85c78164a448fb9965e22447429a56cab226c68f 10.135.255.73:20011 master - 0 1537239581999 43 connected 5461-10922

8e3491125e105333958dd752ee0d0b0a41ed2d90 10.135.255.72:20011 myself,master - 0 0 41 connected 0-5460

92eadfb6acbd0db74a8b8860286a7f63abce140e 10.135.255.74:20011 master - 0 1537239581799 44 connected 10923-16383

7084c1d7950b83abc1e4419500e1c24a9fa108e7 10.135.255.72:20012 slave 92eadfb6acbd0db74a8b8860286a7f63abce140e 0 1537239581499 44 connected


Redis Cluster经过运行一段时间后,会经常发生主从关系的自动切换,比如:10.135.255.74:20012变成master,10.135.255.73:20011变成slave,这样就会导致10.135.255.74:20011和10.135.255.74:20012变成双master,这样假如10.135.255.74这台主机发生宕机,就会导致2个master不可用,导致cluster down(ps:redis cluster中一半以上的master故障会导致 cluster down)。此问题困扰项目组很久,一直未找到根本原因。

后来经过多次查阅资料,应该是redis.conf里的集群节点的超时时限参数cluster-node-timeout配置的是2000(2秒),这里简单讲解下该参数的作用:

一、节点失效检测

1.集群中当一个节点向另一个节点发送PING命令,但是目标节点未在给定的时限内返回PING命令的回复时,那么发送命令的节点会将目标节点标记为PFAIL(possible failuer,可能已失效);
等待节点回复的时限称为节点超时时限(node timeout),是一个节点选项(node-wise setting);

二、集群状态检测

每当集群发生配置变化时(可能是哈希槽更新,也可能是某个节点进入失效状态),集群中的每个节点都会对它所知道的节点进行扫描(scan);

一旦配置完毕,集群就会进入两种状态中的一种:

FAIL:集群不能正常工作,当集群中有某个节点进入失效状态时,集群不能处理任何命令请求,对于每个命令请求,集群节点都返回错误回复;

OK:集群可以正常工作,负责处理全部16384个槽节点中,没有一个被标记为FAIL状态;

三、从节点选举

一旦某个主节点进入了FAIL状态,如果这个主节点有一个或者多个从节点存在,那么其中一个从节点会被升级为主节点,而其它从节点会开始对这个新主节点进行复制;

在实际生产使用过程中,由于网络顺时延迟或者Cluster某些节点正在进行持久化,AOF重写、Master-slave同步数据这些耗时的操作,可能就会产生节点检测超时(>2000ms)从而失效,为了避免节点检测过于灵敏,经过多次调整实践,在该项目的实际生产环境中,将cluster-node-timeout调整为12000ms后,比较稳定,既不轻易发生主从自动切换,也在真正master节点主机宕机后,slave能迅速选举为主,保证redis cluster可用。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7天前
|
NoSQL Linux Redis
06- 你们使用Redis是单点还是集群 ? 哪种集群 ?
**Redis配置:** 使用哨兵集群,结构为1主2从,加上3个哨兵节点,总计分布在3台Linux服务器上,提供高可用性。
16 0
|
16天前
|
负载均衡 监控 NoSQL
Redis的集群方案有哪些?
Redis集群包括主从复制(基础,手动故障恢复)、哨兵模式(自动高可用)和Redis Cluster(官方分布式解决方案,自动分片和容错)。此外,还有如Codis、Redisson和Twemproxy等第三方工具用于代理和负载均衡。选择方案需考虑应用场景、数据规模和并发需求。
17 2
|
1月前
|
NoSQL 算法 安全
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
152 0
|
21天前
|
NoSQL Redis
Redis集群(六):集群常用命令及说明
Redis集群(六):集群常用命令及说明
15 0
|
2月前
|
运维 NoSQL 算法
Redis-Cluster 与 Redis 集群的技术大比拼
Redis-Cluster 与 Redis 集群的技术大比拼
46 0
|
7天前
|
运维 NoSQL 算法
Java开发-深入理解Redis Cluster的工作原理
综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
15 0
|
15天前
|
NoSQL Java 测试技术
面试官:如何搭建Redis集群?
**Redis Cluster** 是从 Redis 3.0 开始引入的集群解决方案,它分散数据以减少对单个主节点的依赖,提升读写性能。16384 个槽位分配给节点,客户端通过槽位信息直接路由请求。集群是无代理、去中心化的,多数命令直接由节点处理,保持高性能。通过 `create-cluster` 工具快速搭建集群,但适用于测试环境。在生产环境,需手动配置文件,启动节点,然后使用 `redis-cli --cluster create` 分配槽位和从节点。集群动态添加删除节点、数据重新分片及故障转移涉及复杂操作,包括主从切换和槽位迁移。
27 0
面试官:如何搭建Redis集群?
|
19天前
|
存储 缓存 NoSQL
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)(一)
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)
41 0
|
29天前
|
NoSQL Redis Docker
使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)
使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)
29 0
|
1月前
|
存储 监控 NoSQL
Redis 架构深入:主从复制、哨兵到集群
大家好,我是小康,今天我们来聊下 Redis 的几种架构模式,包括主从复制、哨兵和集群模式。
Redis 架构深入:主从复制、哨兵到集群