Redis巡检及优化建议

本文详述了Redis数据库的巡检流程,包括系统版本、内存策略、TCP参数、安全性和持久化等方面,提供了风险评估和具体优化建议,旨在确保数据库稳定运行并提升性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis巡检

一 目的

定期主动执行数据库巡检可以及时有效的发现数据库潜在问题,降低数据库运行风险。本巡检报告是针对Redis数据库主机的系统资源、数据库运行状态指标采集分析,得出调整建议供用户决策评估

二 巡检项目

2.1 系统部分

巡检项描述
磁盘空间可用率评估系统磁盘空间是否充足。
内存使用率评估系统内存是否充足。
swap分区配置评估系统swap分区的使用权重
numa架构评估是否开启numa导致性能问题
操作系统日志评估系统是否存在运行异常
系统资源ulimit评估数据库用户是否收到系统ulimit资源限制
操作系统版本/内核版本评估是否会触发操作系统bug等问题
透明大页评估系统是否开启透明大页(THP)特性
内存分配策略评估系统是否可以充分分配物理内存
TCP连接评估系统高并发下是否容易发生丢包问题

2.2 数据库部分

巡检项描述
连续运行时长可反映数据库连续的可用性
数据分布反映不同**schema**的数据量
性能参数配置反映数据库是否高效运行
慢日志反应数据库是否高效运行
安全性参数配置反映数据库是否存在安全风险
高可用架构反映数据库架构及服务可用性
数据库复制状态反映数据库复制同步状态及延迟情况
错误日志反映数据库运行过程中是否存在异常

三巡检内容

3.1版本信息

3.1.1 系统版本

实例/ip检查结果(操作系统版本)Normal/Notice/Warning备注
Normal
Normal
Normal

3.1.2 Redis版本

实例检查结果(redis版本)Normal/Notice/Warning备注
Normal
Normal
Normal

3.2 系统参数

3.2.1 内存透明大页(THP)

巡检方式

# cat /sys/kernel/mm/transparent_hugepage/enabled
# cat /sys/kernel/mm/transparent_hugepage/defrag

巡检结果

实例(ip:port)检查结果Normal/Notice/Warning备注
Warning建议关闭,开启后fork子进程时会导致增加内存消耗
Warning
Warning

标准大页管理是预分配方式,而透明大页管理则是动态分配方式

为什么Transparent HugePages(透明大页)对系统的性能会产生影响.

  在khugepaged进行扫描进程占用内存,并将4 kPage交换为Huge Pages的这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能。并且,这个过程对于应用是透明的,

在应用层面不可控制,对于专门为4 k page优化的程序来说,可能会造成随机的性能下降现象。

3.2.2 内存策略

# cat /proc/sys/vm/overcommit_memory

巡检结果

实例(ip:port)检查结果Normal/Notice/Warning备注
0Warning强烈建议设置为1,避免系统限制分配物理内存
0Warning
0Warning

overcommit_memory取值又三种分别为0, 1, 2 overcommit_memory=0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够 的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 overcommit_memory=1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 overcommit_memory=2, 表示内核允许分配超过所有物理内存和交换空间总和的内存 overcommit_memory参数就是控制分配内存是否可以超过CommitLimit,默认是0,即启发式的overcommitting handle,会尽量减少swap的使用,root可以分配比一般用户略多的内存。1表示允许超过CommitLimit,2表示不允许超过CommitLimit

3.2.3 SWAP

巡检方式

# cat /proc/sys/vm/swappiness

巡检结果

实例检查结果Normal/Notice/Warning备注
30Warning强烈建议设置为1,避免使用 swap
30Warning

异步任务中 将部分内存交互到磁盘,后续又需要使用,需要交换出来 导致任务执行变长,比如 垃圾回收时,需要遍历进程中维护的全局对象,但是若 交换出去了,还需要在交换进来

3.2.4 TCP SYN

巡检方式

# cat /proc/sys/net/ipv4/tcp_max_syn_backlog

巡检结果

实例检查结果Normal/Notice/Warning备注
2621440Normal建议设置为65535
2621440Normal
2621440Normal

服务因为队列满产生丢包,其中一个做法就是加大半/全连接队列的长度。 半连接队列长度Linux内核中,主要受tcp_max_syn_backlog影响 加大它到一个合适的值就可以

3.2.5 CP Accept

巡检方式

# cat /proc/sys/net/core/somaxconn

巡检结果

实例检查结果Normal/Notice/Warning备注
4096Notice建议设置为65535
4096Notice
4096Notice

定义了系统中每一个端口最大的监听队列的长度

该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。

3.2.6 TCP Timewait

巡检方式

# cat /proc/sys/net/ipv4/tcp_max_tw_buckets
# cat /proc/sys/net/ipv4/tcp_tw_reuse
# cat /proc/sys/net/ipv4/tcp_tw_recycle

巡检结果

实例检查结果Normal/Notice/Warning备注
131072/1/1notice建议tcp_tw_reuse和/tcp_tw_recycle参数不同时开启
131072/1/1notice
131072/1/1notice

tcp_max_tw_buckets 该参数设置系统的TIME_WAIT的数量,如果超过默认值则会被立即清除。

tcp_tw_reuse 表示是否允许将处于TIME-WAIT状态的socket(TIME-WAIT的端口)用于新的TCP

tcp_tw_recycle 能够更快地回收TIME-WAIT套接字

3.2.7 TCP Keepalive

巡检方式

# cat /proc/sys/net/ipv4/tcp_keepalive_time
# cat /proc/sys/net/ipv4/tcp_keepalive_intvl
# cat /proc/sys/net/ipv4/tcp_keepalive_probes

巡检结果

实例检查结果Normal/Notice/Warning备注
6/1/3Notice建议设置为120/15/3,加速回收无效连接
6/1/3Notice
6/1/3Notice

tcp_keepalive_time 控制 TCP/IP 尝试验证空闲连接是否完好的频率

需要更快地发现丢失了接收方,考虑减小这个值。 如果长期不活动的空闲连接出现次数较多,而丢失接收方的情况出现较少,需要提高该值以减少开销。

tcp_keepalive_time,在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测包的间隔,即允许的持续空闲时长,或者说每次正常发送心跳的周期,默认值为7200s(2h)。

tcp_keepalive_intvl,在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包的发送频率,默认值为75s。

tcp_keepalive_probes 在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包次数,默认值为9(次)

3.2.8 TCP Syncookies

巡检方式

# cat /proc/sys/net/ipv4/tcp_syncookies

巡检结果

实例检查结果Normal/Notice/Warning备注
1Notice建议设置为0,关闭cookies特性
1Notice
1Notice
服务端半连接池满了以后是否开启syncookie机制
如果 SYN 半连接队列已满,默认会丢弃连接
开启 syncookies 功能就可以在不使用 SYN 队列的情况下成功建立连接。
 0 表示关闭该功能;
2 表示无条件开启功能;
1 则表示仅当 SYN 半连接队列放不下时,再启用它。
应当把 tcp_syncookies 设置为 1,仅在队列满时再启用。

3.3 安全

3.3.1 认证

巡检方式

redis> CONFIG GET requirepass

巡检结果

实例检查结果Normal/Notice/Warning备注
已开启Normal建议提高密码强度
已开启Normal
已开启Normal

3.3.2 复制认证

巡检方式

redis> CONFIG GET "masterauth"

巡检结果

实例检查结果Normal/Notice/Warning备注
已开启Normal建议提高密码强度
已开启Normal
已开启Normal

3.3.3 命令重命名

巡检方式

# cat redis.conf |grep -i rename-command

巡检结果

实例检查结果Normal/Notice/Warning备注
未开启Notice建议将风险较高的命令重命名避免误操作如 FLUSHDB FLUSHALL
未开启Notice
未开启Notice

3.4 持久化

3.4.1 RDB持久化

巡检方式

redis> CONFIG GET save

巡检结果

实例检查结果Normal/Notice/Warning备注
已开启(900 1 300 10 60 10000)Notice当前使用默认持久化设置建议可根据业务需求做出调整
已开启(900 1 300 10 60 10000)Notice
已开启(900 1 300 10 60 10000)Notice

3.4.2 AOF 持久化

巡检方式

redis> CONFIG GET appendonly

巡检结果

实例检查结果Normal/Notice/Warning备注
NoNotice可根据持久化需求选择性开启
NoNotice
NoNotice

3.5 内存

3.5.1 当前内存使用情况

巡检方式

redis > info Memory  // used_memory_human

巡检结果

实例检查结果Normal/Notice/Warning备注
24.12MNormal当前内存使用率接近机器内存的一半,需要注意,若服务器上还有其他占用内存的进程,redis在有fork等操作时可能出现问题
14.45MNormal
14.44MNormal

3.5.2 当前内存使用上限

巡检方式

redis > CONFIG GET maxmemory  // used_memory_human

巡检结果

实例检查结果Normal/Notice/Warning备注
未设置Notice视业务需求调整,建议设置为3-4G
未设置Notice
未设置Notice

3.5.3 内存淘汰策略

巡检方式

redis > CONFIG GET "maxmemory-policy"

volatile-lfu 是从所有配置了过期时间的键中驱逐使用频率最少的键

volatile-lru 是加入键的时候如果过限,首先从设置了过期时间的键集合中驱逐最久没有使用的键

巡检结果

实例检查结果Normal/Notice/Warning备注
NoevictionNotice默认无删除策略,写满后禁止新的写入。建议根据键的使用调整为 其他删除策略。
NoevictionNotice
NoevictionNotice

3.5.4 内存碎片率

巡检方式

redis > INFO Memory  // mem_fragmentation_ratio

巡检结果

实例检查结果Normal/Notice/Warning备注
1.16Normal正常
1.42Normal
1.21Normal

3.6 SLOWLOG

巡检方式

redis > CONFIG GET "slowlog-max-len"
redis > CONFIG GET slowlog-log-slower-than

巡检结果

实例检查结果Normal/Notice/Warning备注
128/10000Notice建议增大慢日志条数,降低阈值
128/10000Notice
128/10000Notice

3.7 服务日志

巡检方式

redis > CONFIG GET "loglevel"

巡检结果

实例检查结果Normal/Notice/Warning备注
NoticeNormal
NoticeNormal
NoticeNormal

3.8 超时时间

巡检方式

redis > CONFIG GET "timeout"

巡检结果

实例检查结果Normal/Notice/Warning备注
0Normal0 为无限制,建议设置为 1800 或 3600
0Normal
0Normal

3.9 复制缓冲

巡检方式

redis > CONFIG GET "repl-backlog-size"

巡检结果

实例检查结果Normal/Notice/Warning备注
1048576(1M)Notice复制及压缓冲区建议设置为1G,避免网络抖动后进行全量同步
1048576(1M)Notice
1048576(1M)Notice

四 巡检总结

IP地址系统参数安全持久化内存使用SLOWLOG日志Timeout复制
可优化调整正常可优化调整正常可优化调整正常可优化调整可优化调整
可优化调整正常可优化调整正常可优化调整正常可优化调整可优化调整
可优化调整正常可优化调整正常可优化调整正常可优化调整可优化调整

4.1 风险评估

4.1.1 操作系统

4.1.2 redis服务

4.2 优化建议

4.2.1 操作系统

  1. 建议关闭透明大页,提高Redis持久化效率,降低fork期间的内存消耗

  2. 建议设置为1,将SWAP使用倾向降到最低,注意不要设置为0

  3. vm.overcommit_memory =0 在内存不足是无法分配物理内存,建议设置为 1

  4. 建议关闭syncookie,调高tcp_max_syn_backlog、somaxconn值,避免高并发情况下增大连接建立的开销、出现网络丢包

  5. tcp_max_tw_buckets、tcp_tw_reuse、tcp_tw_recycle等参数当前为默认值,无需调整,若调整不当会导致TCP连接丢包

4.2.2 Redis服务

注:以下优化建议可能在当前Reids版本无法全部适用

  1. 建议使用Redis 5.0版本

  2. 降低RDB持久化触发的频率,或者在业务允许的情况下关闭RDB持久化

  3. 建议设置最大内存上限及内存淘汰策略,避免Redis当存储使用

  4. 建议增大Redis复制缓冲,保证网络抖动尽可能的不出发全量同步

  5. 建议将风险度较高的命令重命名,避免误操作影响Redis服务运行

  6. 建议增大慢日志记录条数

  7. 建议配置redis日志,logfile

sentinel建议:

  1. 建议配置日志文件,有助于问题的排查:logfile

  2. 建议根据业务情况调整down-after-milliseconds,现在是10ms,建议调整为30ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机猿巧合.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值