【Redis Cluster集群】Redis线上环境常用参数设置

1. fork耗时导致高并发请求延时

1.1 问题:rdb或aof时,会fork子进程,带来大量的磁盘IO消耗,导致耗时严重

RDB和AOF的时候,其实会有生成RDB快照,AOF rewrite,耗费磁盘IO的过程,主进程是fork子进程。

fork的时候,子进程是需要拷贝父进程的空间内存页表的,也是会耗费一定的时间的。

一般来说,如果父进程内存有1个G的数据,那么fork可能会耗费20ms左右,如果是10G-30G,那么会耗费20*10,也就是几百毫秒的时间。

info status 中的latest_fork_usec,可以看到最近一次fork的时长。

redis单机QPS一般在几万,fork可能一下子就会拖慢几万操作的请求时长,从几毫秒变成几秒。

1.2 优化思路:

fork耗时跟redis主进程内存有关系,一般控制redis的内存在10GB以内,slave->master,全量复制

2. AOF阻塞问题

2.1 问题原因:

redis将数据写入到AOF缓冲区,单独开一个线程做fsync操作,每秒一次

但是redis主线程会检查两次fsync的时间,如果距离上次fsync的时间超过了2秒,那么写请求就会阻塞。

everysec,最多丢失2秒的数据。

一旦fsync超过2秒的延时,整个redis就会被拖慢

2.2 优化思路

优化硬盘的写入速度,建议采用SSD,不要用普通的机械硬盘,SSD,大幅度提升磁盘读写的速度。

3. 主从复制延迟的问题

主从复制可能超时严重,这个时候就需要良好的监控和报警机制

在info replication中,可以看到master和slave复制的offset,做一个差值就可以看到对应的延迟量。

如果延迟过多,那么就就进行报警。

在这里插入图片描述

4. 主从复制风暴问题

如果一下子让多个slave从master去执行全量复制,一份大的rdb同时发送多个slave,会导致网络带宽被严重占用。

如果一个master真的要挂载多个slave,那么尽量使用树状结果。

在这里插入图片描述

5. vm.overcommit_memory

0: 检查有没有足够内存,没有的话申请内存失败
1: 允许使用内存直到用完为止
2: 内存地址空间不能超过swap + 50%

如果是0的话,可能会导致类型fork等操作执行失败,因为申请不到足够的内存空间

cat /proc/sys/vm/overcommit_memory
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

在这里插入图片描述

6. swapiness

  • 查看linux内核版本
cat /proc/version

在这里插入图片描述

如果linux内核版本 < 3.5,那么swapiness设置为0,这样系统宁愿swap也不会oom killer杀掉进程。

如果linux内核版本 >= 3.5,那么swapiness设置为1,这样系统宁愿swap也不会oom killer。

保证redis不会被杀掉。

echo 0 > /proc/sys/vm/swappiness

echo vm.swapiness=0 >> /etc/sysctl.conf

7. 最大打开文件句柄

ulimit -n 10032 10032

8. tcp backlog

cat /proc/sys/net/core/somaxconn
echo 511 > /proc/sys/net/core/somaxconn

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值