linux

MongoDB在Linux环境如何扩展存储

小樊
38
2025-11-06 19:07:11
栏目: 云计算

MongoDB在Linux环境下扩展存储的完整方案

一、基础准备:确认当前存储状态

在扩展前,需先明确MongoDB的数据存储路径及现有磁盘使用情况,避免操作失误。

  1. 查看数据目录:连接MongoDB Shell,执行db.getMongo().getState(),返回结果中的dbPath即为当前数据存储路径(默认多为/var/lib/mongo/data/db)。
  2. 检查磁盘空间:使用df -h命令查看磁盘使用率,确认是否需要扩展(若Use%接近100%,需扩容);若需定位MongoDB数据目录所在分区,可执行df -h /var/lib/mongo(替换为实际dbPath)。

二、物理磁盘/分区扩展(直接增加存储容量)

若服务器有额外未分配磁盘或现有分区可扩展,可通过以下方式增加物理存储:

1. 扩展物理磁盘(新磁盘场景)

2. 扩展现有分区(LVM逻辑卷场景)

若数据存储在LVM逻辑卷上,可通过lvextendresize2fs/xfs_growfs扩展容量:

3. 扩展现有分区(非LVM场景)

若数据存储在普通分区(如/dev/sda1),需使用growpart扩展分区,再扩展文件系统:

三、逻辑卷/分区扩展后验证

扩展完成后,需确认MongoDB是否识别新增空间:

  1. 检查磁盘空间df -h /mnt/data(替换为新挂载点),确认Use%下降。
  2. 检查MongoDB状态
    mongo --eval 'db.runCommand({ connectionStatus: 1 })'  # 确认服务正常
    mongo --eval "db.stats()"                             # 查看数据存储用量
    
    db.stats()中的dataSizestorageSize随数据增长而增加,说明扩展成功。

四、分片集群扩展(海量数据场景)

若单节点存储无法满足需求,可通过分片集群将数据分布到多个节点,实现横向扩展:

  1. 添加新分片服务器
    在新服务器上启动MongoDB分片实例(端口如27018):
    mongod --shardsvr --dbpath /data/db --port 27018
    
  2. 将分片添加到集群
    连接到配置服务器(端口27019),执行以下命令(替换为新分片地址):
    mongo --port 27019
    config = rs.conf()
    config.shards.push({ _id: "shard0001", host: "new_shard_host:27018" })
    rs.reconfig(config)
    
  3. 迁移数据到新分片
    使用moveChunk命令将指定集合的数据迁移到新分片(以test.users集合为例):
    mongo --port 27017
    sh.moveChunk("test.users", { _id: 1 }, "new_shard_host:27018")  # 按shardKey迁移
    

注意:分片前需启用分片功能(sh.enableSharding("数据库名")),并选择合适的shardKey(如_id或业务字段)。

五、挂载新磁盘到MongoDB数据目录(替代方案)

若不想修改现有分区,可将新磁盘挂载为MongoDB的新数据目录,实现存储分离:

  1. 停止MongoDB服务
    sudo systemctl stop mongod
    
  2. 移动数据文件
    将现有数据目录(如/var/lib/mongo)移动到新磁盘(如/mnt/data):
    sudo mv /var/lib/mongo /mnt/data/mongo
    
  3. 修改配置文件
    编辑/etc/mongod.conf,更新storage.dbPath为新路径:
    storage:
      dbPath: /mnt/data/mongo
    
  4. 启动MongoDB服务
    sudo systemctl start mongod
    
  5. 验证数据
    执行mongo --eval "db.stats()",确认数据正常访问。

关键注意事项

0
看了该问题的人还看了