部署 MongoDB
自托管 MongoDB,Docker、副本集和分片水平扩展。
平台高级
为什么
自托管 MongoDB 控制副本集拓扑、分片和存储引擎(WiredTiger)。分片跨 shard 水平扩展。
平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。
何时使用
文档工作负载、分片和自定义聚合用自托管 MongoDB。托管优先 Atlas。
如何做
1. Docker — mongo:7 镜像加 volume
2. 副本集 — 生产 HA 最少 3 节点
3. 初始化 — mongosh 中 rs.initiate()
4. 分片 — sh.addShard() 水平扩展
5. 认证 — 启用 auth,建用户
6. 备份 — mongodump 或 mongosync 持续
7. 监控 — mongostat、mongotop、免费监控
示例
# docker-compose.yml — 副本集
services:
mongo1: { image: mongo:7, command: --replSet rs0, ports: ["27017:27017"] }
mongo2: { image: mongo:7, command: --replSet rs0 }
mongo3: { image: mongo:7, command: --replSet rs0 }
# 初始化副本集
docker exec mongo1 mongosh --eval '
rs.initiate({
members: [
{ _id: 0, host: "mongo1:27017" },
{ _id: 1, host: "mongo2:27017" },
{ _id: 2, host: "mongo3:27017" }
]
})'
# 连接字符串
mongodb://mongo1:27017,mongo2:27017,mongo3:27017/mydb?replicaSet=rs0
# 备份
mongodump --uri="mongodb://mongo1:27017" --out=/backup
常见问题
- ⚠单节点无 HA — 仅开发,生产需 3 节点副本集
- ⚠未启用 auth — 任何人可连,启用 auth 建管理员
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓始终用副本集(3 节点)— HA、自动故障转移、读扩展
- ✓启用 auth 用 SCRAM-SHA-256 — MongoDB 7 默认
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求