您的位置:首页 > 数据库 > Redis

记一次redis故障处理

2016-06-30 18:14 351 查看
事件:

接到同事保障,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"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: