在 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
EOF

systemctl 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 里?

posted @ 2025-09-09 18:29  就是想学习  阅读(16)  评论(0)    收藏  举报