当前位置: 首页 > news >正文

在 AlmaLinux 9 使用 Podman 部署 Redis 7.4.5 并优化内核参数

👌 好的,我帮你把 关闭交换分区 (Swap)vm.overcommit_memory=1 一起加进最终的 blog 文章里。这样记录下来就是一份生产可用的完整方案。

 


 

 

在 AlmaLinux 9 使用 Podman 部署 Redis 7.4.5 并优化内核参数

 

 

在生产环境中运行 Redis 时,除了容器编排和持久化配置,还需要注意宿主机的内核参数调优。本文记录了我在 AlmaLinux 9 上使用 Podman 5.4.0 部署 Redis 7.4.5 的过程,并解决了 Redis 启动时出现的 Memory overcommit 警告,同时关闭了交换分区 (Swap),提升稳定性。

 


 

 

系统与版本信息

 

 

  • 操作系统:AlmaLinux 9

  • Podman 版本:5.4.0

  • Redis 镜像:docker.io/library/redis:7.4.5

 

 


 

 

使用 Quadlet 管理 Redis 容器

 

 

Podman 提供了 Quadlet,可以直接通过 systemd 管理容器。

 

在 /etc/containers/systemd/redis7.container 中写入如下配置文件:

[Unit]
# 服务描述
Description=Redis 7.4.5 (Podman, LAN access, no password)
# 等待网络上线后再启动
After=network-online.target
Wants=network-online.target[Container]
# 指定 Redis 镜像,固定版本号,避免升级导致兼容性问题
Image=docker.io/library/redis:7.4.5# 容器名称(systemd/Podman 内部引用)
ContainerName=redis7# 端口映射:宿主机 6379 → 容器 6379
# 如只允许本机访问,可写成 127.0.0.1:6379:6379
PublishPort=6379:6379# 数据持久化目录映射
# 宿主机 /opt/redis/data → 容器 /data
# 选项 :Z 确保 SELinux 下正确挂载
Volume=/opt/redis/data:/data:Z# Redis 启动命令与参数(必须写在一行)
# --bind 0.0.0.0        → 监听所有网卡(允许外部访问;建议配合防火墙限制来源 IP)
# --protected-mode no   → 关闭保护模式(默认无密码仅允许本机访问,这里显式关闭)
# --appendonly yes      → 开启 AOF 持久化,保证写入数据可恢复
# --appendfsync everysec → AOF 每秒 fsync 一次,兼顾性能与可靠性
# --save 900 1          → 900 秒内至少 1 次写操作时生成 RDB 快照
# --save 300 10         → 300 秒内至少 10 次写操作时生成 RDB 快照
# --save 60 10000       → 60 秒内至少 10000 次写操作时生成 RDB 快照
Exec=redis-server --bind 0.0.0.0 --protected-mode no \--appendonly yes --appendfsync everysec \--save 900 1 --save 300 10 --save 60 10000[Install]
# 指定默认目标,保证开机自启
WantedBy=multi-user.target

启用服务:

systemctl daemon-reload
systemctl enable --now redis7

 


 

 

内核调优:vm.overcommit_memory 与关闭 Swap

 

 

 

1. 解决 Redis 警告:vm.overcommit_memory

 

 

Redis 启动时如果看到:

WARNING Memory overcommit must be enabled!

说明内核参数 vm.overcommit_memory 还是默认的 0,这会导致 Redis 在做 RDB/AOF/复制时 fork() 失败。

 

解决办法:写入 sysctl 配置并加载。

echo "vm.overcommit_memory = 1" > /etc/sysctl.d/99-redis.conf
sysctl --system

验证:

sysctl vm.overcommit_memory
# 输出应为:vm.overcommit_memory = 1

 

2. 关闭 Swap(推荐)

 

 

Redis 官方建议不要使用交换分区,否则可能造成极端性能抖动。

 

临时关闭:

swapoff -a

永久关闭:编辑 /etc/fstab,注释掉 swap 行,例如:

#/dev/mapper/alma-swap none swap defaults 0 0

然后再次执行:

swapoff -a

验证:

free -h
# Swap 一栏应为 0

 


 

 

验证 Redis 是否正常

 

redis-cli -h 127.0.0.1 -p 6379 PING
# 输出:PONG

查看日志:

journalctl -u redis7 -n 50 --no-pager

确认没有 Memory overcommit 警告,Redis 进入 Ready to accept connections 状态。

 


 

 

总结

 

 

  • 使用 Quadlet 结合 systemd 管理 Redis 容器,方便服务启停与日志查看。

  • 调整 vm.overcommit_memory=1,避免 Redis 在持久化或复制时 fork() 失败。

  • 关闭 Swap,减少 Redis 被调度到磁盘导致的性能抖动。

 

 

最终环境:

 

  • AlmaLinux 9

  • Podman 5.4.0

  • Redis 7.4.5

  • Quadlet 管理 + 内核优化(overcommit_memory=1 + 无 Swap)

 

 

这一组合适合直接用于生产环境。

 


 

要不要我在这篇 blog 里顺便加一节 firewalld 配置示例(比如只允许内网网段访问 6379),让它更贴近实际生产安全要求?

http://www.hskmm.com/?act=detail&tid=335

相关文章:

  • 抖音批量视频下载工具源码C#源码|自动提取DY视频的软件工具
  • AI 检测:精准攻克米饭盒质检难题,赋能食品生产
  • 2025年9月北京中学集训随笔
  • 最新可用Docker镜像加速站点
  • 第一周作业
  • 基于调度场算法将中缀表达式转换为后缀表达式
  • 来此加密实现SSL证书自动申请+自动部署
  • lc1022-从根到叶的二进制数之和
  • 2025.9.9——1橙
  • SIM /api/function/execute 代码执行漏洞
  • C#/.NET/.NET Core技术前沿周刊 | 第 53 期(2025年9.1-9.7)
  • 3
  • linux下安装pycharm时,中文无法显示的问题
  • 学习
  • Docker,Containerd配置私有Harbor仓库和Notary服务器
  • Ubuntu安装notary
  • Ubuntu安装containerd
  • 你的错误处理一团糟-是时候修复它了-️
  • TRVCOST - Travelling cost 题解
  • 我重新制作动画系统的思路
  • 第一次作业:自我介绍+软工5问
  • 第一篇练习博客
  • 原型设计实用干货!3款热门AI生成原型图软件横向测评
  • Python Flask框架入门_3.通过token认证验证API的访问权限(数据库版本)
  • 港科 Tower A 宿舍凝水之谜
  • Transformer 模型(能理解“句子顺序”和“上下文”的神经网络架构)
  • 题解:P3546 [POI 2012] PRE-Prefixuffix
  • 自然语言处理(NLP)发展脉络
  • 错误报警:“该 CPU 或当前的库版本不支持数据类型”
  • redis各种数据类型