最近有点闹心.
先是昨天壁挂炉管子崩了,家里发大水.
小花狸还把钥匙扔厕所里了,没注意直接给冲走了..
晚上,有邮件报警.
才发现家里键盘还让小花狸玩坏了...
这孩子.太淘气了
晚上9点半,打车去单位处理.
发现Redis内存使用接近上限.已经使用了10G左右.
我调整了一下上限,解除了报警.
但是查看top的时候,发现Redis-server cpu使用率达到100%.
昨天是崩溃的一天..
当时每秒执行400左右,设置并查看慢日志.没有明显问题.
后来想起,这个Redis有大量写入.触发了rdb持久化存储.每分钟fork一个子进程,进行转储导出.那个CPU使用率达到100%的进程,应该是fork的子进程.
对业务应该没有影响.毕竟Redis rdb是通过 Copy-on-write 写时复制机制的.(好像就是修改请求,写内存的新页,不会修改原来的数据页,让fork的子进程做持久化.)
不过我还是修改了save的配置.减少rdb持久化频率.毕竟每分钟持久化一次,写6G多文件,没有什么必要.
修改之后,习惯性的查看配置.
狗血的事情来了...
1) "dbfilename"
2) "authorized_keys"
。。。。。
91) "dir"
92) "/root/.ssh"
这是什么鬼?这台Redis是以root运行的..
当时晚上11点,倒抽一口凉气...
马拉个鸡..这黑客是要砸我饭碗吗?
http://www.aneasystone.com/archives/2015/11/redis-crackit.html
由于我们服务器都有ACL保护,所以这个漏洞原来也没有太当回事.
终于都弄完了...
回顾一下Redis的几个重要参数.
-
-
-
-
-
-
-
-
stop-writes-on-bgsave-error yes
-
-
-
-
-
rdbcompression yes
rdbcompression 就是为什么之前会看到 fork的子进程cpu使用率100%的原因.
-
-
-
-
-
-
rdbchecksum yes
slave-serve-stale-data yes
当slave丢失master或者同步正在进行时,如果发生对slave的服务请求:
slave-serve-stale-data设置为yes则slave依然正常提供服务
slave-serve-stale-data设置为no则slave返回client错误:"SYNC with master in progress"
repl-ping-slave-period 10
slave发送PINGS到master的时间间隔
repl-timeout 60
IO超时时间
repl-disable-tcp-nodelay no
解释:
在slave和master同步后(发送psync/sync),后续的同步是否设置成TCP_NODELAY
假如设置成yes,则redis会合并小的TCP包从而节省带宽,但会增加同步延迟(40ms),造成master与slave数据不一致
假如设置成no,则redis master会立即发送同步数据,没有延迟
前者关注性能,后者关注一致性
repl-backlog-size 1mb
避免slave断开重连之后,全量的数据同步
maxmemory-policy volatile-lru
noeviction: 不进行置换,表示即使内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error
allkeys-lru: 优先删除掉最近最不经常使用的key,用以保存新数据
volatile-lru: 只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据
allkeys-random: 随机从all-keys中选择一些key进行删除,用以保存新数据
volatile-random: 只从设置失效(expire set)的key中,选择一些key进行删除,用以保存新数据
volatile-ttl: 只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据
maxmemory-samples 5
Redis中的LRU不是严格意义上的LRU算法实现,是一种近似的LRU实现,主要是为了节约内存占用以及提升性能。
Redis的LRU是取出配置的数目的key,然后从中选择一个最近最不经常使用的key进行置换,maxmemory-samples默认的5
可以通过调整样本数量来取得LRU置换算法的速度或是精确性方面的优势。
Redis不采用真正的LRU实现的原因是为了节约内存使用。虽然不是真正的LRU实现,但是它们在应用上几乎是等价的
如果你将maxmemory-samples设置为10,那么Redis将会增加额外的CPU开销以保证接近真正的LRU性能,可以通过检查命中率来查看有什么不同。
no-appendfsync-on-rewrite no
重写 aof文件的时候,是否调用fsync
还有一些参数,先整理这么多吧。
Redis重要参数回顾
原文:http://blog.itpub.net/29254281/viewspace-2099173/