温馨提示×

MongoDB Ubuntu版如何进行集群搭建

小樊
46
2025-10-02 00:23:34
栏目: 云计算

MongoDB Ubuntu版集群搭建指南(以副本集为例)

MongoDB的“集群”通常指副本集(Replica Set)(高可用性)或分片集群(Sharded Cluster)(水平扩展)。以下分别介绍两者的搭建步骤:

一、副本集集群搭建(基础高可用)

副本集通过多个节点同步数据,实现故障自动转移,适用于需要高可用的场景。

1. 前提条件
  • 至少3个Ubuntu节点(建议奇数个,如3/5个),节点间网络互通;
  • 所有节点安装相同版本的MongoDB(推荐4.4及以上);
  • 防火墙开放27017端口(默认MongoDB端口)。
2. 安装MongoDB

在所有节点执行以下命令,添加MongoDB官方源并安装:

# 导入MongoDB公钥
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
# 添加MongoDB源(以Ubuntu 22.04为例,若用其他版本替换“jammy”)
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
# 更新软件包并安装
sudo apt update
sudo apt install -y mongodb-org
3. 配置MongoDB副本集

编辑每个节点的MongoDB配置文件(/etc/mongod.conf),修改以下参数:

storage:
  dbPath: /var/lib/mongodb  # 数据存储路径(默认)
  journal:
    enabled: true           # 开启日志(确保数据持久化)

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log  # 日志路径

net:
  port: 27017               # 监听端口(默认)
  bindIp: 0.0.0.0           # 允许所有IP访问(生产环境建议限制为节点IP)

replication:
  replSetName: rs0          # 副本集名称(所有节点必须一致)

保存后重启MongoDB服务:

sudo systemctl restart mongod
sudo systemctl enable mongod  # 设置开机自启
4. 初始化副本集

连接到任意一个节点的MongoDB Shell(如节点1的27017端口),执行初始化命令:

mongo --host <节点1_IP> --port 27017

在Shell中输入以下命令(将<节点1_IP><节点2_IP><节点3_IP>替换为实际IP):

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "<节点1_IP>:27017" },
    { _id: 1, host: "<节点2_IP>:27017" },
    { _id: 2, host: "<节点3_IP>:27017" }
  ]
})

初始化成功后,会返回{ "ok" : 1 }

5. 验证副本集状态

在Shell中执行以下命令,查看节点角色(PRIMARY/SECONDARY):

rs.status()

正常情况下,会显示3个节点,其中1个为PRIMARY(主节点,处理写请求),2个为SECONDARY(从节点,同步主节点数据)。

二、分片集群搭建(水平扩展)

分片集群将数据分散到多个分片(Shard)上,解决单节点数据量过大的问题,适用于大规模数据存储。

1. 前提条件
  • 至少3个配置服务器(Config Server,用于存储元数据);
  • 至少2个分片服务器(Shard Server,用于存储实际数据);
  • 1个路由服务器(Mongos,用于转发请求);
  • 所有节点安装相同版本的MongoDB。
2. 配置配置服务器(Config Server)

配置服务器以副本集形式运行,确保元数据高可用。

  • 在3个配置服务器上创建数据目录:
    sudo mkdir -p /data/configdb
    sudo chown -R $(whoami) /data/configdb
    
  • 启动配置服务器(以节点1为例,其他节点替换IP):
    mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019
    
  • 初始化配置服务器副本集(连接到任意配置服务器):
    mongo --port 27019
    rs.initiate({
      _id: "configReplSet",
      configsvr: true,
      members: [
        { _id: 0, host: "<节点1_IP>:27019" },
        { _id: 1, host: "<节点2_IP>:27019" },
        { _id: 2, host: "<节点3_IP>:27019" }
      ]
    })
    
3. 配置分片服务器(Shard Server)

每个分片也是一个副本集(推荐),以节点1的分片为例:

  • 创建数据目录:
    sudo mkdir -p /data/shard1
    sudo chown -R $(whoami) /data/shard1
    
  • 启动分片服务器:
    mongod --shardsvr --replSet shard1ReplSet --dbpath /data/shard1 --port 27018
    
  • 初始化分片副本集(连接到分片节点):
    mongo --port 27018
    rs.initiate({
      _id: "shard1ReplSet",
      members: [
        { _id: 0, host: "<节点1_IP>:27018" },
        { _id: 1, host: "<节点2_IP>:27018" }
      ]
    })
    

重复上述步骤,配置其他分片服务器(如shard2ReplSet)。

4. 配置路由服务器(Mongos)

Mongos负责将请求路由到对应的分片,无需数据存储。

  • 启动Mongos(连接到配置服务器副本集):
    mongos --configdb configReplSet/<节点1_IP>:27019,<节点2_IP>:27019,<节点3_IP>:27019 --port 27017
    
5. 添加分片到集群

连接到Mongos Shell:

mongo --port 27017

添加分片(以shard1ReplSet为例):

sh.addShard("shard1ReplSet/<节点1_IP>:27018,<节点2_IP>:27018")

重复上述命令,添加其他分片。

6. 启用数据库和集合分片
  • 启用数据库分片(如mydb):
    sh.enableSharding("mydb")
    
  • 对集合启用分片(如mycollection),并指定分片键(分片键选择至关重要,需均匀分布数据):
    sh.shardCollection("mydb.mycollection", { "userId": 1 })  // 以userId字段分片
    
7. 验证分片状态

在Mongos Shell中执行以下命令,查看集群状态:

sh.status()

正常情况下,会显示配置服务器、分片服务器及分片信息。

注意事项

  • 副本集 vs 分片集群:副本集用于高可用,分片集群用于水平扩展,两者可结合使用(如分片集群的每个分片是副本集);
  • 分片键选择:避免选择单调递增的字段(如时间戳)作为分片键,否则会导致数据分布不均;
  • 安全配置:生产环境需开启身份验证--auth参数)和TLS加密,防止未授权访问;
  • 监控维护:使用MongoDB自带的mongostatmongotop工具监控性能,定期备份数据。

以上步骤覆盖了MongoDB Ubuntu版集群搭建的核心流程,可根据实际需求调整节点数量和配置参数。

0