Linux下部署MongoDB分片集群需配置Config Server副本集、Shard Server副本集及mongos路由服务,三者协同实现TB级数据分布式存储与高可用;安装同版本MongoDB、开放端口、初始化副本集、注册分片并启用分片键。

在 Linux 下部署 MongoDB 分片集群,核心是把数据分散到多个物理节点,解决单机存储瓶颈和性能瓶颈。它不是简单装几个 mongod 就行,而是由配置服务器(Config Server)、分片服务器(Shard Server)和路由服务(mongos)三类角色协同工作。只要网络通、端口开、副本集建好、元数据注册正确,集群就能承载 TB 级数据。
准备环境与安装 MongoDB
所有节点(config、shard、mongos)都要安装相同版本的 MongoDB(推荐 6.0+ 或长期支持版 5.0/4.4),避免兼容问题。以 Ubuntu 22.04 为例:
- 导入官方 GPG 密钥并添加源:curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-6.0.gpg
- 添加仓库:echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
- 更新并安装:sudo apt update && sudo apt install -y mongodb-org
- 关闭防火墙或放行关键端口(如 27017–27019、28018、29017 等),确保各节点间 能 ping 通、telnet 端口通
搭建高可用配置服务器集群
Config Server 存储整个集群的路由元数据(比如哪个 chunk 在哪个 shard),必须是副本集,且至少 3 个节点(生产环境不建议少于 3 个)。启动时加 --configsvr 参数,并指定副本集名:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 创建数据目录:mkdir -p /data/configdb
- 启动 config 节点(以 192.168.1.10:27019 为例):mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019 --bind_ip 0.0.0.0 --fork --logpath /var/log/mongodb/config.log
- 连接任一 config 节点:mongo --host 192.168.1.10 --port 27019
- 初始化副本集(含全部三个节点):rs.initiate({ _id: "configReplSet", configsvr: true, members: [ { _id: 0, host: "192.168.1.10:27019" }, { _id: 1, host: "192.168.1.11:27019" }, { _id: 2, host: "192.168.1.12:27019" } ] })
部署分片节点(带副本集)
每个 shard 推荐用副本集(至少 1 主 2 从),避免单点故障。启动时加 --shardsvr 标识:
- 为 shard1 创建目录:mkdir -p /data/shard1
- 启动 shard1 成员(如 192.168.1.10:27018):mongod --shardsvr --replSet shard1ReplSet --dbpath /data/shard1 --port 27018 --bind_ip 0.0.0.0 --fork --logpath /var/log/mongodb/shard1.log
- 同理部署 shard2、shard3 等,端口和路径需区分
- 分别连接各 shard 的主节点,执行 rs.initiate(...) 初始化对应副本集(注意 _id 和 members 地址要匹配)
启动 mongos 并添加分片
mongos 是无状态路由进程,不存数据,但必须连上 config server 才能工作。它监听应用请求,再转发到对应 shard:
- 启动 mongos:mongos --configdb configReplSet/192.168.1.10:27019,192.168.1.11:27019,192.168.1.12:27019 --port 27017 --bind_ip 0.0.0.0 --fork --logpath /var/log/mongodb/mongos.log
- 连接 mongos:mongo --host 127.0.0.1 --port 27017
- 添加分片(以 shard1 副本集为例):sh.addShard("shard1ReplSet/192.168.1.10:27018")
- 对目标数据库启用分片:sh.enableSharding("myappdb")
- 对集合设置分片键并分片:sh.shardCollection("myappdb.users", { "uid": "hashed" })(哈希分片更均衡)
完成之后,插入数据会自动按分片键路由、切分、迁移。监控可用 sh.status() 查看 chunk 分布,用 db.printShardingStatus() 看详细拓扑。运维中重点关注 config server 可用性、shard 同步延迟、以及 mongos 连接池是否饱和。

















