在 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
常见问题与排错
- 
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
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 里?
 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号