京东云服务器部署Redis集群,需要调整哪些内核参数?

在京东云服务器(或其他云环境)上部署 Redis 集群时,为了提升性能、稳定性和安全性,通常需要对 Linux 内核参数进行适当调整。以下是推荐调整的关键内核参数及其说明:


一、内存相关参数

1. vm.overcommit_memory

vm.overcommit_memory = 1
  • 说明:Redis 在 fork 子进程进行 RDB 持久化时会使用 copy-on-write,若内存不足可能导致 Cannot allocate memory 错误。
  • 设置为 1 表示允许内存超额分配,避免因内存检查严格导致 fork 失败。
  • 推荐值:1

2. vm.swappiness

vm.swappiness = 1
  • 说明:控制内核使用 swap 的倾向。Redis 是内存数据库,应尽量避免使用 swap,否则性能急剧下降。
  • 建议设置为 1,仅在极端内存压力下使用 swap。
  • 推荐值:01

3. overcommit_ratio(可选)

vm.overcommit_ratio = 80
  • 配合 vm.overcommit_memory=2 使用,但在 Redis 场景中通常使用 overcommit_memory=1,可不调整。

二、网络相关参数

1. net.core.somaxconn

net.core.somaxconn = 65535
  • 说明:TCP 连接队列的最大长度。Redis 默认监听队列长度为 511,若并发连接高,需调大此值。
  • 同时需在 Redis 配置中设置 tcp-backlog 65535

2. net.ipv4.tcp_max_syn_backlog

net.ipv4.tcp_max_syn_backlog = 65535
  • SYN 队列长度,用于应对突发连接请求。

3. net.core.netdev_max_backlog

net.core.netdev_max_backlog = 5000
  • 每个网络接口接收队列的最大数据包数,防止网络突发时丢包。

4. net.ipv4.tcp_tw_reuse 和 tcp_tw_recycle(注意:tcp_tw_recycle 已废弃)

net.ipv4.tcp_tw_reuse = 1
# net.ipv4.tcp_tw_recycle = 0  # 禁用(在 NAT 环境下有问题)
  • 启用 tcp_tw_reuse 可快速复用 TIME_WAIT 状态的连接,适合高并发短连接场景。

5. net.ipv4.tcp_keepalive_time

net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
  • 调整 TCP 心跳探测时间,更快发现断开的连接,避免 Redis 长时间等待。

三、文件句柄与系统限制

1. 文件句柄限制(ulimit)

# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
redis soft nofile 65535
redis hard nofile 65535
  • Redis 集群节点可能需要处理大量客户端连接,需提高文件描述符限制。

2. 系统级文件句柄

fs.file-max = 2097152
  • 系统最大打开文件数。

四、透明大页(Transparent Huge Pages, THP)

禁用 THP(必须

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
  • 原因:THP 会导致 Redis 延迟抖动(延迟 spikes),严重影响性能。
  • 建议在系统启动脚本(如 /etc/rc.local)中加入上述命令,确保开机禁用。

五、其他优化建议

1. 关闭 NUMA(可选)

  • 若服务器为 NUMA 架构且 Redis 单实例运行,可考虑:
    numactl --interleave=all redis-server
  • 或在 BIOS 中关闭 NUMA(视情况而定)。

2. I/O 调度器

  • 建议使用 deadlinenoop(尤其在 SSD 或云盘环境):
    echo deadline > /sys/block/vda/queue/scheduler

六、Redis 配置配合调整

确保 Redis 配置文件(redis.conf)也做相应优化:

tcp-backlog 65535
timeout 300
tcp-keepalive 60
maxmemory <合理值,如物理内存的 70%~80%>
maxmemory-policy allkeys-lru  # 或根据业务选择
save 900 1
save 300 10
save 60 10000
# 关闭保护模式(云环境需注意安全组)
protected-mode no
# 开启集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

七、应用方式

将上述内核参数写入 /etc/sysctl.conf

vm.overcommit_memory = 1
vm.swappiness = 1
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
fs.file-max = 2097152

然后执行:

sysctl -p

并设置 ulimit 和禁用 THP。


总结

类别 参数名 推荐值 说明
内存 vm.overcommit_memory 1 避免 fork 失败
内存 vm.swappiness 1 减少 swap 使用
内存 transparent_hugepage never 必须禁用 THP
网络 net.core.somaxconn 65535 提高连接队列
网络 tcp_keepalive_* 合理值 快速检测断连
文件句柄 nofile 65535 支持高并发
系统 fs.file-max 2097152 系统级限制

⚠️ 注意:在京东云等云服务器上操作前,建议备份系统并测试参数影响,避免影响线上服务。

如有使用容器(Docker/K8s),部分参数需在宿主机或容器启动时设置。

未经允许不得转载:云计算导航 » 京东云服务器部署Redis集群,需要调整哪些内核参数?