温馨提示×

centos怎么集群mongodb

小樊
41
2026-09-30 00:51:12
栏目: 云计算

在 CentOS 上搭建 MongoDB 集群,通常有几种常见方式,最主流的是 副本集(Replica Set) 和 分片集群(Sharded Cluster)。下面我分别给你讲,先从最常用、最推荐的 副本集 开始。


一、MongoDB 副本集(Replica Set)(推荐)

适用场景

  • 高可用
  • 自动故障转移
  • 读扩展

集群结构示例

3 台 CentOS 服务器:

192.168.1.10  mongo1
192.168.1.11  mongo2
192.168.1.12  mongo3

1. 每台机器安装 MongoDB(CentOS 7/8 通用)

# 添加 MongoDB YUM 源
cat > /etc/yum.repos.d/mongodb-org.repo <<EOF
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8/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

# 启动
systemctl enable mongod
systemctl start mongod

CentOS 7 把 redhat/8 改成 redhat/7


2. 修改配置文件(每台机器)

编辑 /etc/mongod.conf

net:
  port: 27017
  bindIp: 0.0.0.0

replication:
  replSetName: rs0

security:
  authorization: enabled

重启:

systemctl restart mongod

3. 初始化副本集(只需在一台执行)

登录:

mongo

执行:

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "192.168.1.10:27017" },
    { _id: 1, host: "192.168.1.11:27017" },
    { _id: 2, host: "192.168.1.12:27017" }
  ]
})

查看状态:

rs.status()

✅ 副本集完成


二、MongoDB 分片集群(Sharded Cluster)(生产大规模)

架构组成

  • Mongos(路由)
  • Config Server(配置服务器,3 台)
  • Shard(分片,每个分片是副本集)

示例结构

mongos: 192.168.1.20
config: 192.168.1.21~23
shard1: 192.168.1.30~32
shard2: 192.168.1.40~42

1. Config Server(3 台)

sharding:
  clusterRole: configsvr

replication:
  replSetName: configRepl

初始化:

rs.initiate({
  _id: "configRepl",
  members: [
    {_id:0, host:"192.168.1.21:27019"},
    {_id:1, host:"192.168.1.22:27019"},
    {_id:2, host:"192.168.1.23:27019"}
  ]
})

2. Shard(每个分片是副本集)

sharding:
  clusterRole: shardsvr

replication:
  replSetName: shard1

分别初始化 shard1 / shard2


3. Mongos(路由)

sharding:
  configDB: configRepl/192.168.1.21:27019,192.168.1.22:27019,192.168.1.23:27019

启动:

mongos -f /etc/mongos.conf

4. 添加分片

sh.addShard("shard1/192.168.1.30:27018,192.168.1.31:27018,192.168.1.32:27018")
sh.addShard("shard2/192.168.1.40:27018,192.168.1.41:27018,192.168.1.42:27018")

5. 开启分片

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

三、防火墙 & 常见问题

开放端口

firewall-cmd --add-port=27017/tcp --permanent
firewall-cmd --reload

常见坑

  • bindIp 不要只写 127.0.0.1
  • 副本集名字必须一致
  • 时间必须同步(NTP)
  • 生产环境一定要开 authorization

四、我该选哪种?

场景 推荐
小中型业务 副本集
单节点压力大 副本集
TB 级以上 分片集群
高可用 副本集

如果你愿意,可以告诉我:

  • CentOS 版本
  • MongoDB 版本
  • 机器数量
  • 是否生产环境

我可以直接帮你 写一套可执行的部署方案或脚本。

0 踩