温馨提示×

MongoDB在Ubuntu上的存储如何配置

小樊
48
2025-10-08 06:14:48
栏目: 云计算

MongoDB在Ubuntu上的存储配置指南

一、基础存储路径配置

  1. 修改数据目录路径
    MongoDB的数据默认存储在/var/lib/mongodb,若需更换路径(如/data/db),需编辑配置文件/etc/mongod.conf
    • 使用sudo nano /etc/mongod.conf打开文件,找到storage部分;
    • 修改dbPath参数为自定义路径(如dbPath: /data/db);
    • 保存并退出编辑器(Ctrl+X→Y→Enter)。
  2. 准备数据目录
    • 创建目标目录:sudo mkdir -p /data/db(若目录已存在则跳过);
    • 修改目录权限(MongoDB进程用户为mongodb):sudo chown -R mongodb:mongodb /data/db
  3. 重启服务生效
    执行sudo systemctl restart mongod重启服务,通过sudo systemctl status mongod确认服务状态(显示“active (running)”即为成功)。

二、存储引擎配置

  1. 选择存储引擎
    MongoDB默认使用WiredTiger(推荐,支持文档级锁定、事务及高压缩率);若需兼容旧版本可选择mmapv1(仅支持读密集型场景)。
  2. 修改引擎配置
    /etc/mongod.confstorage部分添加/修改engine字段:
    storage:
      engine: wiredTiger  # 或 mmapv1
    
  3. 验证引擎生效
    连接MongoDB shell(mongo),执行db.runCommand({ connectionStatus: 1 }),在输出中查找storageEngine字段,确认当前使用的引擎。

三、性能优化配置

  1. 调整WiredTiger缓存大小
    WiredTiger的缓存大小直接影响性能,建议设置为物理内存的50%-75%(避免占用过多内存导致系统卡顿)。在/etc/mongod.conf中添加:
    storage:
      wiredTiger:
        engineConfig:
          cacheSizeGB: 4  # 根据服务器内存调整(如4GB)
    
  2. 启用磁盘日志
    日志(Journal)用于数据恢复,确保journal.enabled设置为true(默认开启):
    storage:
      journal:
        enabled: true
    
  3. 选择高性能文件系统
    推荐使用ext4(稳定)或XFS(高性能,适合大文件),格式化磁盘时指定文件系统:
    sudo mkfs.ext4 /dev/sdb1  # 示例:将/dev/sdb1格式化为ext4
    
  4. 使用SSD存储
    SSD的随机读写性能远优于HDD,建议将MongoDB数据目录放在SSD分区上,显著提升IO性能。

四、数据持久化保障

  1. 启用写入关注(Write Concern)
    通过应用程序驱动设置写入关注级别(如majority),确保数据写入到多数节点后才返回成功(适用于复制集):
    // Node.js示例
    const client = new MongoClient('mongodb://localhost:27017', { 
      writeConcern: { w: 'majority' } 
    });
    
  2. 定期备份数据
    使用mongodump工具定期备份(如每日备份到/backup/daily):
    # 创建备份脚本(/usr/local/bin/mongo_backup.sh)
    #!/bin/bash
    mongodump --out /backup/daily/$(date +%Y%m%d)
    # 添加执行权限并设置cron定时任务(每天凌晨2点执行)
    chmod +x /usr/local/bin/mongo_backup.sh
    echo "0 2 * * * /usr/local/bin/mongo_backup.sh" | sudo tee -a /etc/crontab
    
  3. 部署复制集或分片集群
    • 复制集:至少3个节点(1主2从),主节点宕机时自动切换到从节点,保证数据高可用;
    • 分片集群:将数据分散到多个分片(每个分片可配置复制集),提升存储容量和查询性能。

五、磁盘空间管理

  1. 监控磁盘使用情况
    • 使用df -h命令查看磁盘空间使用率;
    • 使用mongostat监控数据库操作(如插入、查询次数);
    • 使用MongoDB Atlas或Prometheus+Grafana搭建可视化监控面板。
  2. 清理无用数据
    • 删除过期数据:使用db.dropCollection()删除不再需要的集合,或db.collection.deleteMany({})删除集合中的文档;
    • 修复数据库:使用db.repairDatabase()回收损坏数据占用的空间(需停机执行);
    • 压缩集合:使用db.runCommand({ compact: "collectionName" })整理集合碎片(释放未使用空间)。
  3. 扩展存储空间
    • 使用LVM(逻辑卷管理)动态扩容:将数据目录放在LVM逻辑卷上,通过lvextend扩展卷大小;
    • 添加新硬盘:将新硬盘挂载到数据目录(如/data/db),修改权限后重启MongoDB服务。

0