记一次 Redis 迁移 —— Key 丢失问题排查

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 记一次 Redis 迁移 —— Key 丢失问题排查

上半年,我们将 Redis集群 从旧机房迁移到了服务所在的新机房,迁移过程碰到了一些常见的方法,也遇到一些Key丢失的问题,因此写文章来记录和总结下。

迁移清单

想要平稳顺利的迁移,那么做好准备哦那个工作很重要。最重要的工作就是准备 清单。一个合格的数据库迁移一般要包括:步骤、灰度策略、验证措施、回滚方案。

  1. devops 使用 redis-shake 从旧集群持续同步数据到新集群
  2. dev 验证新集群功能正常
  3. devops 确认新旧集群 Key 一致
  4. dev 开始发布的切换到新集群配置
  1. 按照地区灰度迁移(在东南亚七个地区提供服务,因此可以优先灰度用户量小的地区)
  2. 将服务分为 无风险低风险高风险,按照风险等级分组发布和回退
  3. 发布群通知所有人开始发布
  4. 观察服务监控、并验证服务功能
  1. devops 确认旧集群流量为0,新集群调用量、监控正常

个别 Key 同步失败

第一个问题出现在 步骤3。在数据同步完全正常的情况下,发现个别 Key 没有同步到新集群

0       lack_target     xxx_cron_RetryEsStoreTask
0       lack_target     xxx_cron_WsCDNStatMonitor
0       lack_target     xxx_cron_TaskMonitor
0       lack_target     xxx_cron_TxCloudStatMonitor

以上几个 Key 存在比较明显的特征,即,都是定时任务使用Redis作为分布式锁创建的。该部分比较特殊的地方在于使用 lua 脚本,而同步工具对 lua的支持不太好。

Redis 集群流量持续不归零

第二个问题出现在 步骤5,迁移完成之后Redis流程持续不归零,经过捞日志发现,该部分流量来源于监控、扫描检测程序

个别 Key 奇怪丢失

第三个问题出现在迁移完第一个地区的两天后,在迁移地区的本地运营同学反馈一个问题,少部分 Key 莫名奇怪的丢失

2020-03-05 18:01:32 写入key:xxx_balancestatus_216213136
2020-03-05 18:06:49 检测到key丢失
2020-03-06 18:05:21 再次写入key

检查了项目代码里,没有删除key的操作,请问能否查下redis数据是否正常,有没有意外丢失key的可能性。以下是我们排查的对话:

Devops: xxx_balancestatus_216213136  这个key有设置ttl嘛?
Dev: 有,3 天
Dev: 相同的key,18:01设置的key(3d过期),18:06丢失了 (提供了日志作为依据)
Devops:可能是同步进程挂的时间太长了,源集群过期的key  forward了del命令到新集群
Me:你按照删除时间,往前三天看下能否捞到这个用户的写入日志,如果时间对的上,那可以基本上证明是这个原因
Dev:2日刚好有一个写入操作
Me: 2号到5号,该用户还有写入么
Dev: 4号还有一次
Me: 4号几点?
Dev: 4号 18 点
Devops: 4号18点 已经切换集群了, 所以2号写入的key 在老集群, 3天后 过期 forward del命令到新集群

充足的日志提供了有力的证据把握各个时间点,成功捉虫:Devops 为了确保安全,没有尽快把同步程序关掉,导致该问题

总结

迁移之后,平均耗时有1~2ms的降低,服务迁移有着比较明显的效果。由于两个地方位于同一个城市,说明调用耗时产生的原因跟距离关系不大,猜测跟机房的网络架构关系很大(之前也遇到过,同一地区同样配置服务,有一个机房就是比其他机房调用慢不少)。

本文作者 : cyningsun

本文地址https://www.cyningsun.com/09-06-2020/redis-migrate-key-lost.html

版权声明 :本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 CN 许可协议。转载请注明出处!

# 数据库

  1. 深入理解 Redis cluster GOSSIP 协议
  2. 如何配置 go-redis 连接池
  3. 如何使用 Redis 存储对象
  4. Redis cluster 细节与技术选型
  5. etcd 实现与选型分析

相关实践学习
基于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
目录
相关文章
|
28天前
|
缓存 监控 NoSQL
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
189057 2
|
1月前
|
存储 缓存 NoSQL
【Redis】Redis魔法:揭秘Key的自动消失术——过期删除机制解析
【Redis】Redis魔法:揭秘Key的自动消失术——过期删除机制解析
131 0
|
2月前
|
NoSQL Java Redis
面试01-Redis 如何从海量数据中查询出某一个 Key
面试01-Redis 如何从海量数据中查询出某一个 Key
95 0
|
29天前
|
缓存 运维 NoSQL
【Redis故障排查】「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案
【Redis故障排查】「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案
490 0
|
19天前
|
NoSQL Shell Redis
批量迁移redis实例的key
批量迁移redis实例的key
|
1月前
|
弹性计算 NoSQL 测试技术
倚天使用|Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
137509 5
|
2月前
|
NoSQL Java Redis
Spring boot 实现监听 Redis key 失效事件
【2月更文挑战第2天】 Spring boot 实现监听 Redis key 失效事件
79 0
|
2月前
|
NoSQL Java Redis
springboot整合redis过期key监听实现订单过期操作
springboot整合redis过期key监听实现订单过期操作
73 0
|
2月前
|
缓存 NoSQL Java
一次访问Redis延时高问题排查与总结
作者抽丝剥茧的记录了一次访问Redis延时高问题的排查和总结。
421 1
|
3月前
|
缓存 监控 NoSQL
Redis 突然变慢了如何排查并解决?
Redis 突然变慢了如何排查并解决?
64 2

热门文章

最新文章