CentOS 上搭建 MongoDB 分片集群的标准步骤
一 架构与端口规划
- 组件与角色
- Config Server(CSRS):存储集群元数据,建议3 节点副本集,端口示例:27019。
- Shard:实际存储数据,每个分片为副本集,常用端口示例:27018。
- mongos:查询路由,入口服务,常用端口:27017,可按需部署多个。
- 典型端口与目录
- 配置服务器:dbPath /var/lib/configdb,日志 /var/log/mongodb/configsvr.log
- 分片服务器:dbPath /var/lib/mongo,日志 /var/log/mongodb/mongod.log
- mongos:日志 /var/log/mongodb/mongos.log
- 系统前置
- 建议开启 NTP 时间同步、关闭 SELinux、配置 /etc/hosts 解析、放通防火墙端口(见下文命令)。
二 安装 MongoDB
- 添加 YUM 源(以 4.4 为例,可按需调整版本)
- 新建文件:/etc/yum.repos.d/mongodb-org-4.4.repo
- 内容:
- [mongodb-org-4.4]
- name=MongoDB Repository
- baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
- gpgcheck=1
- enabled=1
- gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
- 安装与目录权限
- 安装:sudo yum install -y mongodb-org
- 建议创建 mongod 系统用户并调整目录属主(/var/lib/mongo、/var/log/mongodb 等)。
三 部署与初始化
-
- 配置服务器副本集(CSRS)
- 配置文件示例(/etc/mongod.conf 或分文件):
- storage.dbPath: /var/lib/configdb
- net.port: 27019;net.bindIp: 0.0.0.0(或内网 IP)
- replication.replSetName: configReplSet
- sharding.clusterRole: configsvr
- 启动每个节点后连接任一节点初始化:
- mongo --port 27019
- rs.initiate({
_id: “configReplSet”,
configsvr: true,
members: [
{ _id: 0, host: “cfg1_ip:27019” },
{ _id: 1, host: “cfg2_ip:27019” },
{ _id: 2, host: “cfg3_ip:27019” }
]
})
-
- 分片副本集(示例创建 3 个分片,每个分片 3 节点)
- 分片配置文件示例(/etc/mongod-shardX.conf):
- storage.dbPath: /var/lib/mongo
- net.port: 27018;net.bindIp: 0.0.0.0
- replication.replSetName: shardX(X=1,2,3)
- sharding.clusterRole: shardsvr
- 启动各分片节点后,连接任一节点初始化(以 shard1 为例):
- mongo --port 27018
- rs.initiate({
_id: “shard1”,
members: [
{ _id: 0, host: “s1a_ip:27018” },
{ _id: 1, host: “s1b_ip:27018” },
{ _id: 2, host: “s1c_ip:27018” }
]
})
- 重复为 shard2、shard3 执行相同步骤(注意 replSetName 与端口不同)。
-
- mongos 路由
- 启动命令(示例):
- mongos --configdb configReplSet/cfg1_ip:27019,cfg2_ip:27019,cfg3_ip:27019 --port 27017 --bind_ip 0.0.0.0
- 连接 mongos:mongo --port 27017
- 添加分片:
- sh.addShard(“shard1/s1a_ip:27018,s1b_ip:27018,s1c_ip:27018”)
- sh.addShard(“shard2/s2a_ip:27018,s2b_ip:27018,s2c_ip:27018”)
- sh.addShard(“shard3/s3a_ip:27018,s3b_ip:27018,s3c_ip:27018”)
- 启用数据库与集合分片(示例库 test,集合 t1,按 id 哈希分片):
- sh.enableSharding(“test”)
- sh.shardCollection(“test.t1”, { id: “hashed” })
-
- 验证
- 查看分片状态:sh.status()
- 查看各副本集:rs.status()(在各分片/配置服务器上执行)。
四 防火墙与系统优化
- 防火墙放通(CentOS 7+ firewalld)
- 放通端口:27017(mongos)、27018(shard)、27019(configsvr)
- 命令示例:
- firewall-cmd --zone=public --add-port=27017/tcp --permanent
- firewall-cmd --zone=public --add-port=27018/tcp --permanent
- firewall-cmd --zone=public --add-port=27019/tcp --permanent
- firewall-cmd --reload
- 系统资源与内核参数(示例)
- limits.conf:
-
- soft nofile 1048576;* hard nofile 1048576
-
- soft nproc 524288;* hard nproc 524288
- 可选:/etc/profile 增加 ulimit -s 1024;必要时安装 numactl 并校验 ulimit -a 输出。
五 生产环境安全与运维要点
- 安全加固
- 启用 keyFile 实现内部认证(各 mongod/mongos 一致),并开启 authorization: enabled;key 文件权限 600,属主 mongod:mongod。
- 建议启用 TLS/SSL 加密节点间与客户端通信;限制 bindIp 为内网网段;为管理员设置强口令与最小权限角色。
- 高可用与容量
- Config Server 与每个 Shard 均使用 3 节点副本集;可按需部署多个 mongos 作为入口,避免单点。
- 合理选择 分片键(shard key) 与 hashed 分片 策略,避免热点与跨分片排序/聚合性能劣化;上线前评估均衡器与迁移窗口。
- 监控与备份
- 常用工具:mongostat、mongotop、MongoDB Compass;结合 日志轮转 与 备份策略(如文件系统快照/逻辑备份)。