Redis故障案例(一)-特定key批量丟失

TroubleShooting-排障是DBA一項重要技能,通過故障表現(xiàn)的癥狀,先讓業(yè)務(wù)快速恢復(fù)止損,同時分析故障的根因(rootCause),給出解決方案并從根本上修復(fù)故障,最后總結(jié)從產(chǎn)品或流程上怎么規(guī)避同類型故障再次發(fā)生。

DBA排障很像醫(yī)生治病、刑警破案。

醫(yī)生通過了解病人病情癥狀(故障癥狀),先讓病人病情緩解(服務(wù)止損)類似止痛,同時分析病灶(故障根因),給出可行的治療方案(故障解決方案),病人完全恢復(fù);最后給出醫(yī)療建議如何預(yù)防病情或避免惡化(故障規(guī)避);當(dāng)然還有現(xiàn)多的類似急救(緊急故障-7位數(shù)級損失)、會診、不治、AI醫(yī)療(AI故障根因分析)、醫(yī)療事故(背鍋);其實很多相通之處。

刑警通過真兇(故障根因)留下的犯罪現(xiàn)場(故障癥狀),根據(jù)羅卡定律,各種技術(shù)分析和尋找證據(jù),最終找出真兇和證據(jù)。(段子很多,先回到主題)

在Redis早期的運維過程中,也遇過不少Redis故障,現(xiàn)總結(jié)其中幾個有意思的案例,希望對剛開始用Redis的DBA同學(xué)有所幫助。故障因與業(yè)務(wù)、故障場景結(jié)合較密切(脫敏),筆者盡量提煉成技術(shù)和還原現(xiàn)場;故障系列文章包括以下幾部分:

故障背景:主要交待技術(shù)和故障背景[可選];

故障描述:故障的簡單描述、根本原因和影響;

故障監(jiān)控告警:故障相關(guān)的監(jiān)控告警信息;

故障分析:文章核心 提供類似故障的分析思路、和技術(shù)點;

故障階段性總結(jié):文章核心 總結(jié)類似故障的通用性預(yù)防;

本文是Redis故障案例(一)關(guān)于一次Redis特定key丟失排查分析。

1 故障背景

A業(yè)務(wù)有一個3分片的Redis Cluster緩存集群,會定期生成數(shù)據(jù)寫入Redis;某一天,A業(yè)務(wù)的研發(fā)工程師(下文簡稱RD)突然找到DBA,很激動地說:“我們Redis集群突然掉很多key…” ,然后故事就開始了….

RD: “我們Redis集群中,以“t_list:”前綴的90000多key今早發(fā)現(xiàn)都掉了,其他key還在,是不是DBA有清理操作啊?”

DBA: “沒有維護(hù)性操作(一臉懵B和無辜),先止損,把Key從Primary store中導(dǎo)入Redis;”

RD: “已經(jīng)從MySQL把key導(dǎo)入到Redis,現(xiàn)在業(yè)務(wù)功能恢復(fù),影響很小。但請幫忙追查原因?!?/p>

DBA: “這部分key確認(rèn)最近一次還在是什么時候? 然后最早發(fā)現(xiàn)丟失是在什么時候?” 備注:DBA開始和當(dāng)事人了解案發(fā)時間,為排查問題提供依據(jù)。

RD: “昨晚20:30前key肯定還在,最早發(fā)現(xiàn)key不見是今早9:20同事發(fā)現(xiàn)新測試功能有異常” 備注:灰度功能

DBA: ”好的,我先分析一下原因,有結(jié)果了通知你;定位問題前,你也關(guān)注一下服務(wù),避免問題二次發(fā)生”。

然后RD就下樓了,DBA扣上他的幾十元買來的boss耳機,開始自言自語Troubleshooting.

2 故障描述

因RD1同學(xué)為重寫t_list的90000多個KEY, 通過keys t_list*命令獲取并刪除,但未及時把key新內(nèi)容重到redis中;使得RD2同學(xué)以為數(shù)據(jù)靈異丟失。但因為是灰度功能使用數(shù)據(jù),服務(wù)影響范圍較小。我有幾張阿里云幸運券分享給你,用券購買或者升級阿里云相應(yīng)產(chǎn)品會有特惠驚喜哦!把想要買的產(chǎn)品的幸運券都領(lǐng)走吧!快下手,馬上就要搶光了。

3 故障告警

1 業(yè)務(wù)告警缺失;見故障總結(jié)

2 Redis側(cè)無法監(jiān)控此類告警

4 故障分析

通過RD提供的線索:

特定t_list:前綴90000個List元素丟失;

數(shù)據(jù)丟失時間范圍前日20:30~9:20之間(案發(fā)時間段,分析各種監(jiān)控范圍)。

通過故障癥狀初步分析,故障可能的根因:

執(zhí)行了flushall/flushdb命令刪除所有key,其他key是后來寫入的,造成了只丟失t_list的假象

這90000個List元素因執(zhí)行LPOP/RPOP,導(dǎo)致key被刪除的現(xiàn)象;(List中元素被全部pop完后,list相當(dāng)于被刪除了)

這部分key因設(shè)置了TTL,在此期間內(nèi)全部過期,被redis自動刪除;

這部分key因LRU淘汰,被redis全部驅(qū)逐淘汰;

程序BUG或人為刪除導(dǎo)致;

每個可能故障根因排查分析:

點擊鏈接閱讀全文:yq.aliyun.com/articles/259109

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容