持久化配置

Redis的持久化虽然可以保证数据安全,但也会带来很多额外的开销,因此持久化请遵循下列建议:

①用来做缓存的Redis实例尽 量不要开启持久化功能

②建议关闭RDB持久化功能,使用AOF持久化

③利用脚本定期在slave节点做RDB,实现数据备份

④设置合理的rewrite阈值,避免频繁的bgrewrite

⑤配置no-appendfsync-on-rewrite = yes,禁止在rewrite期间做aof,避免因AOF引起的阻塞

Redis服务端优化_Redis优化

部署有关建议:

①Redis实例的物理机要预留足够内存,应对fork和rewrite

②单个Redis实例内存 上限不要太大,例如4G或8G。可以加快fork的速度、减少主从同步、数据迁移压力

③不要与CPU密集型应用部署在一-起

④不要与高硬盘负载应用一起部署。例如:数据库、消息队列

慢查询

慢查询:在Redis执行时耗时超过某个阈值的命令,称为慢查询。

Redis服务端优化_Redis优化_02

慢查询的阈值可以通过配置指定:

●slowlog-log-slower-than: 慢查询阈值,单:位 是微秒。默认是10000,建议1000

慢查询会被放入慢查询日志中,日志的长度有上限,可以通过配置指定:

●slowlog-max-len: 慢查询日志(本质是一个队列)的长度。默认是128,建议1000

Redis服务端优化_Redis_03

修改这两个配置可以使用: config set命令:

Redis服务端优化_Redis_04

查看慢查询日志列表:

●slowlog len:查询慢查询日志长度

●slowlog get [n]:读取n条慢查询日志

●slowlog reset:清空慢查询列表

Redis服务端优化_Redis优化_05

命令及安全配置

Redis会绑定在0.0.0.0:6379,这样将会将Redis服务暴露到公网上,而Redis如果没有做身份认证,会出现严重的安全漏洞.

漏洞重现方式: https://cloud.tencent.com/developer/article/1039000

漏洞出现的核心的原因有以下几点:

●Redis未设置密码

●利用了Redis的config set命令动态修改Redis配置

●使用了Root账号权限启动Redis


为了避免这样的漏洞,这里给出一些建议:

①Redis一定要设置密码

②禁止线上使用下面命令: keys、flushall flushdb、config set等命令。可以利用rename-command禁用。

③bind: 限制网卡,禁止外网网卡访问

Redis服务端优化_慢查询_06

④开启防火墙

⑤不要使用Root账户启动Redis

⑥尽量不使用默认的端口


内存配置

当Redis内存不足时,可能导致Key频繁被删除、响应时间变长、QPS不稳定等问题。当内存使用率达到90%以上时就需要我们警惕,并快速定位到内存占用的原因。

Redis服务端优化_Redis优化_07

Redis提供了一些命令,可以查看到Redis目前的内存分配状态:

●info memory

●memory xxx

Redis服务端优化_Redis_08

内存缓冲区配置

内存缓冲区常见的有三种:

●复制缓冲区: 主从复制的repL backlog_ buf, 如果太小可能导致频繁的全量复制,影响性能。通过repl-backlog-size来设置,默认1mb

●AOF缓冲区: AOF刷盘之前的缓存区域, AOF执行rewrite的缓冲区。无法设置容量上限

●客户端缓冲区:分为输入缓冲区和输出缓冲区,输入缓冲区最大1G且不能设置。输出缓冲区可以设置

Redis服务端优化_持久化_09

默认的配置如下:

Redis服务端优化_持久化_10

集群最佳实践

集群虽然具备高可用特性,能实现自动故障恢复,但是如果使用不当,也会存在一些问题:

①集群完整性问题

在Redis的默认配置中,如果发现任意一个插槽不可用,则整个集群都会停止对外服务:

Redis服务端优化_Redis_11

为了保证高可用特性,这里建议将cluster-require-full-coverage配置为false

②集群带宽问题

●集群状态信息

集群中节点越多,集群状态信息数据量也越大,10个节点的相关信息可能达到1 kb,此时每次集群互通需要的带宽会非常高。

解决途径:

①避免大集群,集群节点数不要太多最好少于1000,如果业务庞大,则建立多个集群。

②避免在单个物理机中运行太多Redis实例

③配置合适的cluster-node-timeout值

③数据倾斜问题

④客户端性能问题

⑤命令的集群兼容性问题

⑥lua和事务问题

注意

单体Redis (主从Redis) 已经能达到万级别的QPS,并且也具备很强的高可用特性。如果主从能

满足业务需求的情况下,尽量不搭建Redis集群。