DocumentDB
DocumentDB 是微软开源维护的 PostgreSQL 文档数据库扩展,FerretDB 是构建在其上的无状态协议转换代理。 两者组合,让标准 PostgreSQL 内核对外提供 MongoDB 线协议兼容端点——使用 MongoDB 驱动的应用程序可以直接对接,请求被转换为对 PostgreSQL 的操作。
与其他内核分支不同,这不是一个独立的 PostgreSQL 分叉:数据层运行原生 PostgreSQL 16 - 18 内核,由标准 PGSQL 模块管理,
持久化、事务、高可用、备份、监控与访问控制均由 PostgreSQL 侧负责;FerretDB 以 Pigsty Docker APP 的形式部署,只承担协议转换。
Pigsty 是 FerretDB 社区的合作伙伴,提供 FerretDB 与 DocumentDB 扩展的二进制打包,
并通过 mongo 配置模板开箱即用地交付整套组合。
快速开始
使用 Pigsty 的 标准安装流程 和 mongo 配置模板:
FerretDB 默认监听本机回环地址的 27017 端口,使用 mongosh 或任意 MongoDB 兼容客户端即可访问:
配置
源文件:pigsty/conf/mongo.yml,完整模板说明见 Mongo 配置模板 文档。
PostgreSQL 侧的关键配置是 documentdb 扩展及其预加载库,以及供 FerretDB 使用的后端超级用户:
FerretDB 作为 Docker APP 部署,参数是 apps.ferretdb.conf 下的普通覆盖项,
容器通过 host.docker.internal 连接本机 5436 主库直连服务:
高可用
因为 FerretDB 完全无状态,高可用拓扑与标准 PostgreSQL 集群一致:模板中保留了注释状态的三节点 pg-mongo 示例,
每个节点各跑一个 FerretDB 容器(绑定本机 27018),由 HAProxy 汇聚为浮动端点 10.10.10.4:27017(mongo.pigsty)对外服务。
PostgreSQL 侧的故障转移仍由 Patroni 与 etcd 负责,Mongo 端点在主库切换后自动恢复可用。
注意事项
- FerretDB 默认启用认证(
FERRETDB_AUTH: true),但尚未实现 MongoDB 授权角色体系,真正的安全边界仍是 PostgreSQL 的用户与 HBA 规则。 - 默认未启用客户端 MongoDB TLS,Mongo 端点也不会暴露到网络;确有远程访问需求时才应修改
FERRETDB_BIND_ADDR。 - 后端集群统一使用标准 PostgreSQL 参数、剧本与仪表盘,不存在独立的 FERRET 模块或
mongo_*参数组。 - FerretDB 或 DocumentDB 升级后,建议重新执行一次带认证的 CRUD 冒烟测试。