记一次redis故障处理

事件:
接到同事保障,redis挂了,使用 ping 时报 (error) MISCONF … 错误。

处理过程:
登录系统确认问题

[root@redis01 ~]# redis-cli 
127.0.0.1:6379> ping
(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
127.0.0.1:6379> exit

查看日志,按照网上办法

请在/etc/sysctl.conf 添加一项 ‘vm.overcommit_memory = 1’ ,然后重启(或者运行命令’sysctl vm.overcommit_memory=1’ )使其生效。

查看 vm.overcommit_memory 设置,发现原配置已。重启redis后,redis正常启动并加载数据到内存。

[root@redis01 ~]# redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> info

但几分钟后,redis 再次重现同样错误。
查看进程、内存和磁盘使用情况

[root@redis01 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         64422      61394       3028          0          4       2327
-/+ buffers/cache:      59062       5360
Swap:        10239      10223         16
[root@redis01 ~]# ps -ef|grep redis
root      1168     1  0 Jun16 ?        00:17:40 /usr/local/bin/redis-server *:6379         
root     24873  1168  6 15:55 ?        00:01:18 redis-rdb-bgsave *:6379    .               
root     24946 24929  0 16:15 pts/0    00:00:00 grep redis
[root@redis01 ~]#  df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv1  286G   41G  230G  16% /
tmpfs                 32G     0   32G   0% /dev/shm
/dev/sda1            190M   32M  149M  18% /boot

发现在数据加载完到内存,发生错误前后,内存有跳动,有增加现象。
发生错误时进程 redis-rdb-bgsave 一直在运行

查看资料发现这个是 redis 的后台快照进程,进行快照时会将完整的内存镜像持久化到磁盘上。

估计问题就发生在这里。使用info和config get * 检查 redis 配置信息

127.0.0.1:6379> info
# Server
redis_version:2.8.19
... 略

[root@redis01 ~]# redis-cli 
127.0.0.1:6379> config get *
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
...

找到配置文件,redis 确实只启用快照,基本5分钟做一次快照

101) "appendonly"
102) "no"

109) "save"
110) "900 1 300 10 60 10000"

决定改成AOF模式
修改从上面查到的redis配置文件,appendonly 改成 yes

重启redis

这时发现,快照和AOF 同时有在做,但错误已不再发生。

---动态设置重写频率
[root@redis01 var]# redis-cli
127.0.0.1:6379> config get auto-aof-rewrite-min-size
1) "auto-aof-rewrite-min-size"
2) "67108864"
127.0.0.1:6379> config set auto-aof-rewrite-min-size 64424509440
OK
127.0.0.1:6379> config get auto-aof-rewrite-min-size
1) "auto-aof-rewrite-min-size"
2) "64424509440"
---将rewrite百分比设成50%
127.0.0.1:6379> config get auto-aof-rewrite-percentage
1) "auto-aof-rewrite-percentage"
2) "100"
127.0.0.1:6379> config set auto-aof-rewrite-percentage 50
OK
127.0.0.1:6379> config get auto-aof-rewrite-percentage
1) "auto-aof-rewrite-percentage"
2) "50"

--设置过后,当appendonly.aof 达到原大小的1.5倍后就会重新改写
--如原48G ,到达 72G 后,就会重新刷回48G

停止快照

[root@redis01 ~]# redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> config get save
1) "save"
2) "900 100 300 100000 60 1000000"
127.0.0.1:6379> config set save ""
OK
127.0.0.1:6379> config get save
1) "save"
2) ""
127.0.0.1:6379> exit

观察几天后,错误已不再发生。
在cli上也可以手工执行BGREWRITEAOF

2018-01-31
前两天AOF日志突然不能正常rotate,经变换一次dir且增加rdb模式后恢复正常。

127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "yes"
127.0.0.1:6379> config get save
1) "save"
2) "60 10000"
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/redis/var"
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值