27018 是什么
27018 不是 MongoDB 的官方默认端口,而是社区约定:在单机多实例部署里,第二个 mongod 常配 27018,用于练习副本集或运行测试实例,第三个实例则常用 27019。生产环境的真实端口以副本集配置里的成员地址为准。把约定当默认是这类端口最典型的误用,连错库的事故往往由此而来,而且现象通常是「数据对不上」而不是报错。
基本信息
| 服务 | MongoDB 第二实例(常见约定) |
|---|---|
| 协议 | TCP(MongoDB 线协议) |
| 用途 | 单机多实例、副本集演练 |
| 官方默认 | 27017 |
| 相关约定 | 27019(第三实例) |
| 安全等级 | 同 27017:认证加限网段 |
典型使用场景
- 本地演练:一台机器上跑多实例练习副本集
- 测试环境:与生产共用主机时按端口隔离实例
- 连接串核对:确认业务连的是哪一个实例
- 安全核查:确认每个实例都启用了认证
- 扩容评估:多实例对内存与 IO 的竞争关系
- 备份核对:确认备份脚本覆盖了全部实例
MongoDB 多实例常见约定
| 端口 | 角色 | 说明 |
|---|---|---|
| 27017 | 第一实例(默认) | 官方默认端口 |
| 27018 | 第二实例 | 副本集演练与测试库(约定) |
| 27019 | 第三实例 | 常被用作配置服务器(约定) |
| 27018 对应实例 | 数据目录与日志 | 必须与第一实例分开 |
副本集成员核对
副本集成员核对
mongosh admin --eval 'rs.status().members.forEach(m=>print(m.name+" "+m.stateStr))'
mongosh --port 27018 --eval 'db.adminCommand({hello:1}).setName' # 确认副本集名称
ss -lntp | grep 2701 # 实例监听概览
# 连接串: mongodb://host1:27018,host2:27018/?replicaSet=rs0多实例部署必须为每个实例分配独立的数据目录与日志文件:共用目录会直接导致启动失败甚至数据损坏。
副本集成员的地址由配置决定:改主机名或端口后需要重新配置,否则成员之间互相找不到,集群状态一直异常。
多实例会争抢内存与 IO:wiredTiger 缓存配置要按实例数分摊,否则单个实例在高负载下会被系统回收内存拖慢。
演练实例往往沿用默认端口与空口令:它一旦与生产同网段,就成了进入内网最省事的跳板。
备份脚本通常只写了默认端口:新增实例后要同步更新备份范围,否则演练数据与生产数据都可能漏备。