Redis常见故障解决方案

1 重启和故障转移后的部分重同步

Redis 4.0 开始,当一个实例在故障转移后被提升为 master 时,它仍然能够与旧 master 的 slave 进行部分重同步。为此,slave 会记住旧 master 的旧 replication ID 和复制偏移量,因此即使询问旧的 replication ID,也可以将部分复制缓冲提供给连接的 slave 。

但是,升级的 slave 的新 replication ID 将不同,因为它构成了数据集的不同历史记录。例如,master 可以返回可用,并且可以在一段时间内继续接受写入命令,因此在被提升的 slave 中使用相同的 replication ID 将违反一对复制标识和偏移对只能标识单一数据集的规则。

另外,slave 在关机并重新启动后,能够在 RDB 文件中存储所需信息,以便与 master 进行重同步。这在升级的情况下很有用。当需要时,最好使用 SHUTDOWN 命令来执行 slave 的保存和退出操作。

2 主从数据不一致

主从网络延时:

主多从少

部分重同步。可以通过命令 PSYNC master_run_id offset 执行。

主少从多

全量复制,覆盖。这种情况是因为从节点读写模式导致的,关闭从节点读写模式,或者删除从节点数据,重新从主节点全量复制。

3 数据延迟

编写外部程序监听主从节点的复制偏移量,延迟较大时发出报警或通知客户端,切换到主节点或其他节点。

设置从节点slave-serve-stale-data为no,除INFO和SLAVOF命令之外的任何请求都会返回一个错误“SYNC with master in progress”。

当副本失去与mater的连接时或仍在进行复制时,副本可以如下方式起作用:

  • replica-serve-stale-data 设为“是”(默认值),则副本仍会回复客户端请求,可能带有过期数据,或者,如果这是第一次同步,则数据集可能只是空的
  • 若将replica-serve-stale-data设为no,则该副本将对除以下信息以外的所有命令返回错误“SYNC with master in progress”:INFO,REPLICAOF,AUTH,PING,SHUTDOWN,REPLCONF,ROLE,CONFIG ,SUBSCRIBE,UNSUBSCRIBE,PSUBSCRIBE,PUNSUBSCRIBE,PUBLISH,PUBSUB,COMMAND,POST,HOST和LATENCY

4 脏数据

4.1 脏数据产因

4.1.1 Redis 删除策略

是因为读到了过期数据。

读到过期数据是 Redis 删除策略导致:

惰性删除

master 每次读取命令时都会检查K是否超时,若超时则执行 del 命令删除键对象,之后异步把 del 命令 slave 节点,这样可以保证数据复制的一致性,slave 永远不会主动去删除超时数据。

定时删除

Redis 的 master 节点在内部定时任务,会循环采样一定数量的键,当发现采样的键过期时,会执行 del 命令,之后再同步个 slave 节点。

主动删除

当前已用内存超过 maxMemory 限定时,触发主动清理策略。主动设置的前提是设置了 maxMemory 的值 注:如果数据大量超时,master 节点采样速度跟不上过期的速度,而且 master 节点没有读取过期键的操作,那 slave 节点是无法收到 del 命令的,这时从节点上读取的数据已经是超时的了。

4.1.2 从节点可写

如果从节点(默认读模式)是读写模式,可能误写入从节点的数据,后期就会成为脏数据。

4.2 解决方案

忽略

比如 12306 查余票、双十一秒杀的库存,你会发现经常就是前后不一致的数据。因为你查询时得到的数据,就是需要允许写错误。

选择性强制读主

但是真正下单扣库存时,你就必须确保数据的正确性 选择强制读 master,slave间接变为备份服务器(某个业务)。

从节点只读

防止 slave 写入脏数据。

Redis自身优化

Redis3.2 版本解决了 Redis 删除策略导致的过期数据,在此版本中 slave 读数据前,会检查K过期时间,以决定是否返回数据。

5 数据安全性

5.1 关闭主节点持久化

为提升Redis性能,一般会关闭主节点持久化的功能(这样所有数据都会持久化在 slave),因为主从同步时,master 都会 bgsave rdb。但这样也会带来复制的安全性问题。

在使用 Redis 复制功能时的设置中,推荐在 master 和在 slave 中启用持久化。当不可能启用时,例如由于非常慢的磁盘性能而导致的延迟问题,应该禁用主节点自动重启功能。

为什么关闭了持久化并配置了自动重启的 master 是危险的呢:

  1. 关闭 Master 的持久化设置,Replica1 和 Replica2 从 Master 复制数据。此时 Master 只有内存数据,没有磁盘数据了。
  2. 当 master 宕机,由于自动重启机制重启了,但重启后由于持久化被关闭了,Master数据集为空!
  3. 重启后的 Master,发现 runId 发生变化,也会重新和从节点建立连接,两个从节点会发起复制请求,从Master 复制数据,但 Master 此时数据集为空,因此复制的结果是它们会销毁自身之前的数据副本而变成空数据集。
    image

5.1.1 解决方案

  • 牺牲性能,开启 Master 的持久化功能。
  • 为了性能,依旧选择关闭,那就让主节点不自动重启,比如不要有Docker或脚本等自动重启机制。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容