redis线上问题及解决方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis线上问题及解决方法相关的知识,希望对你有一定的参考价值。

Redis内存配置大小要求

配置redis时,内存不宜超过机器总内存的50%,否则写RDB文件时会导致机器总内存不足,从而进行IO等待,使redis访问速度骤降

maxmemory 12gb

设置redis总内存为机器总内存的50%,且当redis进程占用内存超过机器内存的40%时进行报警,此时需要迁移数据 

Redis数据较大时,主从同步失败

当redis数据较大时,RDB文件有好几个G,第一次主从同步时会传输整个RDB文件并加载到内存中,数据较大时会导致slave还没同步完,已经超时。此时主从之间会再次进行同步,循环失败。需修改相关参数

repl-ping-slave-period 10

repl-timeout 600

client-output-buffer-limit slave 768mb 512mb 600 

Redis内存较大时,bgsave失败后整个Redis不可写

配置中有选项,gbsave失败时不让写,该配置应该设置为no

stop-writes-on-bgsave-error no

slave-serve-stale-data yes 

Redis中启动了bgsave进程,且杀不死

设置no-appendfsync-on-rewrite 为yes,再杀死

通过redis-cli进入,然后 config set no-appendfsync-on-rewrite yes

如果是有slave进行同步,则要先关闭slave,然后再杀进程

Redis最好运行在内网中(可信任环境)

bind 127.0.0.1

Redis持久化流程相关内容

  技术分享                     

技术分享

技术分享

Rdb备份

主redis禁用rdb备份,启用aof,且aof重写时间设置长点(也可以自己禁用aof,当主出问题时自动切换从)

迁移中若proxy无响应

网络不好时,迁移slot时可能导致proxy无响应,此时需重启没有响应的proxy,否则可能导致proxy还去以前的slot找key,找不到

Redis进程占用内存已经超过总内存的70%

此 时如果有salve与master进行第一次全同步,可能导致master机器内存不足,从swap读取数据,IO等待导致master处理量骤降,此时 需要启动一台新机器,然后将master中的数据迁移到新机器上,直至迁完,然后将该机器down掉重启,按照ReID是内存配置要求重新配置启动,再加 入到组中,把其他机器的数据迁移过去。

Redis进程占用内存不减少

Redis占用内存没有超过配置中的最大内存数,如果不DEL key,其内存不会减少,即使HDEL 或者 迁移,内存仍然不会变 

Codis进行迁移时slot迁移完成却更新slot状态到zk失败

Codis 进行迁移时,如果发生情况:迁移某个slot时,key已经迁移完成,但是更新slot状态到zk时失败,会导致访问proxy时落到这个slot的数据 都找不到。原因是proxy不知道该slot已经迁移完成,当外部访问时,还会要求从源redis中迁移key到现在的redis中,此时如果源 redis给proxy返回错误,则proxy直接退出该次请求。

Redis进行主从全同步时,禁止写磁盘

Redis进行主从同步时,默认会写rdb文件到本地,如果此时内存不足,会使redis IO等待导致处理速度骤降。可以通过禁用写磁盘操作,环境IO等待,配置如下

repl-diskless-sync yes

以上是关于redis线上问题及解决方法的主要内容,如果未能解决你的问题,请参考以下文章

在windows上部署使用redis出现的问题及解决方法

Redis 故障排查「连接失败问题排查和解决」带你总体分析CPU及内存的使用率高问题排查指南及方案

Redis浅谈Redis变慢的原因及排查解决方法

redis分布式锁常见问题及解决方案

Redis缓存穿透缓存击穿缓存雪崩产生原因及解决方案

linux redis安装及安装遇到的问题及解决方案-记录