温馨提示×

MongoDB在Ubuntu上的部署与运维指南

小樊
62
2025-09-23 10:50:41
栏目: 云计算

MongoDB在Ubuntu上的部署与运维指南

一、MongoDB在Ubuntu上的部署流程

1. 准备工作

确保Ubuntu系统为18.04及以上版本(推荐22.04/24.04 LTS),并具备sudo权限。提前更新系统软件包:

sudo apt update && sudo apt upgrade -y

2. 添加MongoDB官方源

MongoDB官方为Ubuntu提供了优化的APT源,需先导入GPG密钥并添加源列表:

# 导入MongoDB公钥(适用于MongoDB 5.0+)
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -

# 创建MongoDB源列表文件(替换$(lsb_release -cs)为Ubuntu版本代号,如jammy=22.04)
echo "deb [arch=amd64,arm64] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

3. 安装MongoDB

更新APT包索引并安装mongodb-org(包含服务器、客户端及工具):

sudo apt update
sudo apt install -y mongodb-org

4. 启动与配置开机自启

启动MongoDB服务并设置开机自动启动:

sudo systemctl start mongod      # 启动服务
sudo systemctl enable mongod     # 设置开机自启
sudo systemctl status mongod     # 检查服务状态(显示"active (running)"即为成功)

5. 连接到MongoDB

使用内置mongo命令行工具连接本地实例:

mongo

进入Shell后,可执行基础操作(如创建数据库、插入文档)验证功能:

use testdb;                     // 创建/切换至testdb数据库
db.testcoll.insert({name: "Alice", age: 25}); // 插入文档至testcoll集合
db.testcoll.find();             // 查询集合中的文档

二、MongoDB在Ubuntu上的运维管理

1. 配置文件管理

MongoDB的主配置文件位于/etc/mongod.conf,常用配置项及调整方法:

  • 网络设置:修改net.bindIp(允许远程访问需设为0.0.0.0,仅本地访问则为127.0.0.1);调整net.port(默认27017,可根据需求修改)。
  • 存储设置:设置storage.dbPath(数据存储路径,默认/var/lib/mongodb);调整storage.wiredTiger.engineConfig.cacheSizeGB(WiredTiger缓存大小,建议为服务器内存的50%)。
  • 日志设置:配置systemLog.path(日志文件路径,默认/var/log/mongodb/mongod.log);设置systemLog.logAppendtrue(日志追加模式)。
  • 副本集设置:若需高可用,添加replication.replSetName(如rs0)。

修改配置文件后,需重启服务生效:

sudo systemctl restart mongod

2. 性能优化技巧

(1)硬件优化

  • 使用SSD:MongoDB对磁盘I/O要求高,SSD可显著提升读写性能。
  • 增加内存:WiredTiger存储引擎依赖内存缓存,建议内存容量大于数据量(或至少覆盖热点数据)。

(2)配置优化

  • 调整WiredTiger缓存:根据服务器内存设置storage.wiredTiger.engineConfig.cacheSizeGB(如8GB内存可设为4GB)。
  • 开启慢查询分析:在operationProfiling中设置mode: "slowOp"(阈值默认100ms),通过db.currentOp()查看慢查询。

(3)索引优化

  • 创建合适索引:为高频查询字段创建索引(如db.users.createIndex({email: 1})),避免全表扫描。
  • 避免过度索引:过多索引会增加写操作开销,定期用db.collection.stats()审查索引使用情况。

(4)分片集群(大数据量场景)

  • 配置分片:使用sh.shardCollection()命令对集合分片(如sh.shardCollection("mydb.mycoll", { "_id": 1 }))。
  • 添加分片节点:通过sh.addShard()将新节点加入集群(如sh.addShard("shard1:27017"))。

3. 监控与诊断

(1)自带工具

  • mongostat:实时显示操作次数、响应时间等统计信息(如mongostat)。
  • mongotop:展示每个集合的读写耗时(如mongotop)。
  • serverStatus:查看服务器状态(如mongo --eval 'db.runCommand({serverStatus: 1})')。

(2)第三方工具

  • Prometheus + Grafana:搭建可视化监控面板,监控内存、磁盘、连接数等指标。
  • MongoDB Atlas:托管服务提供的云端监控,支持告警、性能分析。

4. 备份与恢复

(1)数据备份

使用mongodump工具备份数据(如备份所有数据库至/backup目录):

mongodump --out /backup

(2)数据恢复

使用mongorestore工具恢复数据(如恢复/backup目录至本地数据库):

mongorestore /backup

5. 故障排查步骤

(1)查看服务状态

sudo systemctl status mongod

若服务未运行,检查日志定位原因。

(2)查看日志文件

MongoDB日志默认位于/var/log/mongodb/mongod.log,使用tail命令查看最新日志:

sudo tail -f /var/log/mongodb/mongod.log

(3)常见故障及解决方法

  • 无法启动服务
    • 检查配置文件语法:mongod --config /etc/mongod.conf --eval
    • 检查数据目录权限:sudo chown -R mongodb:mongodb /var/lib/mongodb
    • 删除锁文件(若服务异常终止):sudo rm /var/lib/mongodb/mongod.lock,然后修复数据:mongod --config /etc/mongod.conf --repair
  • 连接被拒绝
    • 确认服务运行:sudo systemctl status mongod
    • 检查防火墙设置:允许27017端口(sudo ufw allow 27017)。
    • 确认bindIp配置:若远程访问,需设为0.0.0.0
  • 权限问题
    • 确保MongoDB用户对数据目录有读写权限(sudo chown -R mongodb:mongodb /var/lib/mongodb)。

0