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

转载于:https://www.cnblogs.com/wlibo666/p/5235634.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值