Linux 上搭建 MongoDB 集群的实用指南
一、架构选型与规划
- 常见形态有两种:
- 副本集 Replica Set:提供数据冗余与自动故障转移,适合大多数业务起步与中小规模场景。
- 分片集群 Sharded Cluster:在副本集基础上横向扩展容量与吞吐,由 Shard(分片)、Config Server(配置服务器)、mongos(路由) 三大组件构成。自 MongoDB 3.4 起,Config Server 必须为副本集;自 3.6 起,每个 Shard 也建议/必须为副本集。典型实践是:3 台 Config Server 副本集、每个 Shard 为 3 节点副本集、2 个及以上 mongos 路由器。
二、通用前置准备
- 系统与安全:
- 建议 NTP 时间同步、关闭 SELinux 或放行端口、按需开放防火墙端口(如 27017/27018/27019/20000/21000 等)。
- 规划 /etc/hosts 或使用 DNS,保证节点间可解析。
- 资源与内核:
- 官方建议在 Linux 上禁用 透明大页 THP,并调高 文件句柄数(如 nofile ≥ 64000;MongoDB 4.4 起低于 64000 可能报错)。
- 目录与权限:
- 为 dbPath、logPath 预建目录并设定属主(常见为 mongod 用户)。
- 安装方式:
- 使用发行版官方仓库或 MongoDB 官方安装包安装对应版本,保持集群节点版本一致。
三、方案一 副本集快速落地(高可用起步)
- 安装与配置(每台机器一个实例,示例端口 27017):
- 配置文件 /etc/mongod.conf(关键项):
- storage.dbPath、systemLog.path
- net.port、net.bindIp(建议绑定内网地址或 0.0.0.0 并配合防火墙)
- replication.replSetName: rs0
- 启动与初始化:
- 启动:mongod --config /etc/mongod.conf(或 systemctl start mongod)
- 连接任一节点初始化:
- rs.initiate({ _id: “rs0”, members: [{_id:0,host:“host1:27017”},{_id:1,host:“host2:27017”},{_id:2,host:“host3:27017”}] })
- 验证:rs.status()、rs.conf()
- 扩容:rs.add(“host4:27017”);如需仲裁:rs.addArb(“host5:27017”)
- 客户端连接:
- 连接字符串示例:mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=rs0
四、方案二 分片集群部署(规模化与高吞吐)
- 组件与端口规划(示例):
- Config Server 副本集:3 节点,端口 20001
- Shard1/2/3 副本集:每分片 3 节点,端口 20002/20003/20004
- mongos 路由器:2 节点,端口 27017
- 部署步骤:
- 部署并初始化 Config Server 副本集(mongod 配置中启用 configsvr: true,并以副本集方式启动与初始化)。
- 部署各 Shard 副本集(mongod 配置中设置 sharding.clusterRole: shardsvr,分别初始化各分片副本集)。
- 启动 mongos(–configdb 指向 Config Server 副本集连接串)。
- 连接 mongos 添加分片:sh.addShard(“shard1/host1:20002,host2:20002,host3:20002”)(对 shard2/shard3 同理)。
- 启用数据库与集合分片:
- sh.enableSharding(“mydb”)
- sh.shardCollection(“mydb.users”, { “user_id”: 1 })(请结合查询模式谨慎选择分片键)
- 验证:sh.status()、rs.status() 查看集群与副本集健康状态。
五、安全与运维要点
- 认证与密钥:
- 生成 keyFile 并分发到所有 mongod/mongos,配置 security.keyFile 与 authorization: enabled;应用通过 mongos 访问集群。
- 网络与防火墙:
- 仅开放必要端口,限制来源网段;跨机房部署时优先内网互联。
- 监控与备份:
- 使用 mongostat/mongotop、日志与监控平台观察连接、QPS、复制延迟;定期物理/逻辑备份(如 mongodump、文件系统快照)。
- 连接与读写:
- 应用统一连接 mongos;副本集读偏好可按需设置(如 secondaryPreferred),关键业务默认走 primary。
- 常见排错:
- 节点无法加入副本集:核对 replSetName、网络连通性、防火墙、keyFile 一致性;
- 分片不均衡:检查 分片键 基数与分布,必要时使用 moveChunk/balancer 调整。