在 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
常见问题与排错
-
invalid log driver 错误
-
Podman 5.4 并不支持 LogDriver=auto 和 LogOpt=...,需删除相关配置。
-
使用默认 journald 日志即可。
-
-
日志查看
-
容器内部日志:
-
podman logs -f mongodb
-
-
-
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 里?