温馨提示×

centos mongodb如何配置分片

小樊
45
2026-10-20 10:06:38
栏目: 云计算

下面以 CentOS 7/8 为例,说明 MongoDB 分片集群(Sharded Cluster) 的基本配置步骤。MongoDB 分片集群通常包含三类角色:

  • Config Server(配置服务器):存储集群元数据
  • Shard(分片):实际存储数据(每个分片通常是一个副本集)
  • Mongos(路由):客户端访问入口

一、环境规划(示例)

假设 3 台服务器(也可单机多端口模拟):

角色 主机 端口
Config Server 192.168.1.10 27019
Shard1 192.168.1.11 27018
Shard2 192.168.1.12 27018
Mongos 192.168.1.10 27017

生产环境建议:

  • Config Server 用 副本集(3节点)
  • 每个 Shard 用 副本集

二、安装 MongoDB(所有节点)

# 以 MongoDB 6.x 为例
cat > /etc/yum.repos.d/mongodb-org.repo <<EOF
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
EOF

yum install -y mongodb-org

三、配置 Config Server(副本集)

1. 修改配置文件 /etc/mongod.conf

storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true

net:
  port: 27019
  bindIp: 0.0.0.0

replication:
  replSetName: configReplSet

sharding:
  clusterRole: configsvr

2. 启动服务

systemctl start mongod
systemctl enable mongod

3. 初始化副本集

mongosh --port 27019
rs.initiate({
  _id: "configReplSet",
  configsvr: true,
  members: [
    { _id: 0, host: "192.168.1.10:27019" }
  ]
})

四、配置 Shard(副本集示例)

Shard1 配置 /etc/mongod.conf

storage:
  dbPath: /var/lib/mongo
systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
net:
  port: 27018
  bindIp: 0.0.0.0
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr

启动并初始化:

systemctl start mongod
mongosh --port 27018
rs.initiate({
  _id: "shard1",
  members: [
    { _id: 0, host: "192.168.1.11:27018" }
  ]
})

Shard2 同理(replSetName 改为 shard2)


五、配置 Mongos(路由)

1. 创建 mongos 配置文件 /etc/mongos.conf

systemLog:
  destination: file
  path: /var/log/mongodb/mongos.log
net:
  port: 27017
  bindIp: 0.0.0.0
sharding:
  configDB: configReplSet/192.168.1.10:27019

2. 启动 mongos

mongos -f /etc/mongos.conf

六、添加 Shard 到集群

mongosh --port 27017
sh.addShard("shard1/192.168.1.11:27018")
sh.addShard("shard2/192.168.1.12:27018")

查看状态:

sh.status()

七、启用数据库和集合分片

sh.enableSharding("testdb")

sh.shardCollection(
  "testdb.user",
  { user_id: "hashed" }
)

八、验证

use testdb
for (let i=0;i<10000;i++){
  db.user.insert({user_id:i, name:"user"+i})
}
db.user.getShardDistribution()

九、常见问题

  • 端口未开放:检查 firewall / SELinux
  • bindIp 错误:建议内网 IP
  • 副本集未初始化:shard / config 必须先 rs.initiate
  • 版本不一致:所有节点 MongoDB 版本尽量一致

如果你需要:

  • ✅ 单机多实例分片示例
  • ✅ 副本集完整 3 节点配置
  • ✅ 生产环境参数优化

可以直接告诉我你的实际环境。

0 踩