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

在 AlmaLinux 9 上使用 Podman Quadlet 部署 MongoDB 6.0

 

 


 

 

在 AlmaLinux 9 上使用 Podman Quadlet 部署 MongoDB 6.0

 

 

在一台 1 核 2G 内存 + 3G swap 的小型云服务器上,我通过 Podman 5.4 + Quadlet 成功部署了 MongoDB 6.0。本文记录部署步骤、遇到的问题以及一些优化建议。

 


 

 

部署环境

 

 

  • 操作系统:AlmaLinux 9

  • 容器工具:Podman 5.4

  • 数据库版本:MongoDB 6.0 官方镜像

  • 数据盘:挂载在 /mnt/blockstorage,ext4 文件系统

 

 


 

 

Quadlet 配置文件

 

 

路径:/etc/containers/systemd/mongodb.container

[Unit]
Description=MongoDB 6.0 (Podman 5.4, LAN access, minimal)[Container]
Image=docker.io/library/mongo:6.0
ContainerName=mongodb
PublishPort=27017:27017
Volume=/mnt/blockstorage/mongo_data:/data/db:Z
Environment=TZ=America/New_York
Environment=MONGO_INITDB_ROOT_USERNAME=root
Environment=MONGO_INITDB_ROOT_PASSWORD=xx# 启动命令(单行)
Exec=/usr/bin/mongod --dbpath /data/db --wiredTigerCacheSizeGB 1.2 --bind_ip_all --auth[Service]
MemoryMax=1.4G
TasksMax=4096
LimitNOFILE=65536
Restart=always[Install]
WantedBy=multi-user.target

加载并启动:

systemctl daemon-reload
systemctl enable --now mongodb
systemctl status mongodb --no-pager

 


 

 

常见问题与排错

 

 

  1. invalid log driver 错误

     

    • Podman 5.4 并不支持 LogDriver=auto 和 LogOpt=...,需删除相关配置。

    • 使用默认 journald 日志即可。

     

  2. 日志查看

     

    • 容器内部日志:

     

 

podman logs -f mongodb

 

  1.  

    •  

    • systemd 日志(包含 Podman 启停信息):

     

 

journalctl -u mongodb -f

 

 


 

 

内核参数优化

 

 

MongoDB 启动时会给出以下警告:

 

  • You are running this process as the root user

  • /sys/kernel/mm/transparent_hugepage = always

  • vm.max_map_count is too low (current: 65530, recommended: 1677720)

 

 

 

含义说明

 

 

  • Transparent Huge Pages (THP)

    MongoDB 建议关闭,否则可能导致延迟抖动。

  • vm.max_map_count

     

    • 代表单进程最多能 mmap 的虚拟内存区域数。

    • Linux 默认值是 65530

    • MongoDB 官方推荐至少 1677720,以保证大数据量时不因 mmap() 失败而崩溃。

     

 

 

 

调整方法

 

# 立即生效
sysctl -w vm.max_map_count=1677720# 开机持久化
echo 'vm.max_map_count=1677720' >/etc/sysctl.d/99-mongodb.conf
sysctl --system

关闭 THP(持久化):

cat >/etc/systemd/system/disable-thp.service <<'EOF'
[Unit]
Description=Disable Transparent Huge Pages
After=multi-user.target[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled || true'
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag || true'
RemainAfterExit=yes[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl enable --now disable-thp

 


 

 

systemctl 常用命令

 

# 查看服务状态
systemctl status mongodb --no-pager# 启动服务
systemctl start mongodb# 停止服务
systemctl stop mongodb# 重启服务
systemctl restart mongodb# 开机自启
systemctl enable mongodb# 取消开机自启
systemctl disable mongodb# 查看最近日志
journalctl -u mongodb -n 50# 实时跟踪日志
journalctl -u mongodb -f

 


 

 

总结

 

 

  • 使用 Podman Quadlet 可以让 MongoDB 作为 systemd 服务运行,具备资源限制与开机自启能力。

  • 在 AlmaLinux 9 的小内存环境下(2G RAM),设置 wiredTigerCacheSizeGB=1.2,整体运行稳定。

  • 日志建议通过 journalctl -u mongodb 与 podman logs 双重查看。

  • 若数据库规模扩大,建议调高 vm.max_map_count 并关闭 THP。

 

 


 

要不要我再帮你加一张 systemctl 命令速查表(表格形式,左边命令,右边说明),更直观放到 Blog 里?

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

相关文章:

  • 《电视软件安装包》
  • Modbus开发不头疼:极简指南,半小时搞定基础配置
  • 通过命令行生成.url链接文件
  • 麒麟V10安装docker
  • Go-Kratos 项目 SonarQube、Jenkins 与 K8s CI/CD 实践
  • 漏洞实战--java反序列化--用友NC UserAuthenticationServlet
  • 以工业级可靠性护航智能制造:深入解析工业主板的关键价值与选型指南
  • 用 PJMan 模板导入,3 分钟搞定专业甘特图,项目规划效率翻倍
  • 湾区杯网络安全大赛 WEB方向WP 全
  • 《dll错误修复工具》
  • 如何使用像素坐标和相机内参来计算夹角
  • 合并代码异常
  • 8th-hello world
  • Normalization 相关问题解惑(BN/LN/IN/GN)
  • Apisix Lua 插件开发规范及指引
  • nim整活-道歉程序
  • 《ai工具合集》14G
  • jmeter-BeanShell PostProcessor
  • Python 函数(Function)核心知识点
  • WPF中的坐标系统
  • 关于Genieacs的配置
  • HyperWorks许可管理软件
  • JMeter通过正则表达式、JSON提取器获取变量
  • ARC176E题解
  • DP 总结(未完成)
  • Code and Data Relocation in Zephyr
  • 产品经理实战指南:用户需求分析全流程详解(含工具链整合)
  • 模板
  • kylin V11安装mysql8.0
  • 【Kubernetes】 PVC 和 PV