单机MongoDB部署脚本:从安装到配置的完整指南

单机MongoDB部署脚本:从安装到配置的完整指南

一、部署前环境准备

在执行MongoDB部署脚本前,需确保服务器满足以下基础条件:

  1. 操作系统兼容性:支持CentOS 7/8、Ubuntu 20.04/22.04 LTS等主流Linux发行版
  2. 硬件资源要求
    • 最小4GB内存(生产环境建议8GB+)
    • 至少20GB可用磁盘空间(根据数据量调整)
    • 支持SSE4.2指令集的CPU(可通过cat /proc/cpuinfo | grep sse4_2验证)
  3. 网络配置要点
    • 开放27017默认端口(生产环境建议限制访问IP)
    • 配置主机名解析(在/etc/hosts中添加127.0.0.1 localhost

推荐环境检测脚本

  1. #!/bin/bash
  2. # 环境检测脚本
  3. MEMORY=$(free -m | awk '/Mem:/ {print $2}')
  4. DISK=$(df -h / | awk 'NR==2 {print $4}')
  5. CPU_CHECK=$(cat /proc/cpuinfo | grep sse4_2 | wc -l)
  6. echo "系统检测报告:"
  7. echo "可用内存: ${MEMORY}MB"
  8. echo "根分区空间: ${DISK}"
  9. echo "SSE4.2支持: $([ $CPU_CHECK -gt 0 ] && echo "" || echo "")"
  10. [ $MEMORY -lt 4096 ] && echo "警告:内存不足4GB,可能影响性能"
  11. [ $DISK \< "10G" ] && echo "警告:磁盘空间不足10GB"

二、自动化部署脚本实现

2.1 基础安装脚本

  1. #!/bin/bash
  2. # MongoDB单机部署脚本 v1.2
  3. # 参数说明:$1=版本号(如6.0.4), $2=安装目录(/data/mongodb)
  4. VERSION=${1:-6.0.4}
  5. INSTALL_DIR=${2:-/data/mongodb}
  6. DATA_DIR="$INSTALL_DIR/data"
  7. LOG_DIR="$INSTALL_DIR/logs"
  8. CONFIG_FILE="$INSTALL_DIR/conf/mongod.conf"
  9. # 创建目录结构
  10. mkdir -p $INSTALL_DIR/{bin,conf,data,logs}
  11. cd /tmp
  12. # 下载并安装MongoDB
  13. echo "正在下载MongoDB $VERSION..."
  14. case $(uname -m) in
  15. x86_64) ARCH="amd64" ;;
  16. aarch64) ARCH="arm64" ;;
  17. *) echo "不支持的架构"; exit 1 ;;
  18. esac
  19. wget -q https://fastdl.mongodb.org/linux/mongodb-linux-$ARCH-${VERSION}.tgz
  20. tar -xzf mongodb-linux-$ARCH-${VERSION}.tgz
  21. cp mongodb-linux-$ARCH-${VERSION}/bin/{mongod,mongo} $INSTALL_DIR/bin/
  22. # 创建服务管理脚本
  23. cat > $INSTALL_DIR/mongod.sh <<EOF
  24. #!/bin/bash
  25. case \$1 in
  26. start)
  27. echo "启动MongoDB服务..."
  28. $INSTALL_DIR/bin/mongod --config $CONFIG_FILE --fork
  29. ;;
  30. stop)
  31. echo "停止MongoDB服务..."
  32. $INSTALL_DIR/bin/mongod --shutdown --config $CONFIG_FILE
  33. ;;
  34. restart)
  35. \$0 stop
  36. sleep 2
  37. \$0 start
  38. ;;
  39. *)
  40. echo "用法: \$0 {start|stop|restart}"
  41. exit 1
  42. esac
  43. EOF
  44. chmod +x $INSTALL_DIR/mongod.sh

2.2 配置文件优化

  1. # $CONFIG_FILE 内容示例
  2. storage:
  3. dbPath: "$DATA_DIR"
  4. journal:
  5. enabled: true
  6. wiredTiger:
  7. engineConfig:
  8. cacheSizeGB: 2 # 根据内存调整,建议为总内存的50-60%
  9. systemLog:
  10. destination: file
  11. path: "$LOG_DIR/mongod.log"
  12. logAppend: true
  13. timeStampFormat: iso8601-utc
  14. net:
  15. port: 27017
  16. bindIp: 0.0.0.0 # 生产环境应改为具体IP或127.0.0.1
  17. processManagement:
  18. fork: true
  19. pidFilePath: "$INSTALL_DIR/mongod.pid"

2.3 系统服务集成(Systemd)

  1. # /etc/systemd/system/mongod.service
  2. [Unit]
  3. Description=MongoDB Database Server
  4. After=network-online.target
  5. [Service]
  6. User=mongod
  7. Group=mongod
  8. ExecStart=$INSTALL_DIR/bin/mongod --config $CONFIG_FILE
  9. ExecStop=$INSTALL_DIR/bin/mongod --shutdown --config $CONFIG_FILE
  10. Restart=always
  11. LimitNOFILE=64000
  12. [Install]
  13. WantedBy=multi-user.target

三、部署后关键配置

3.1 安全加固措施

  1. 启用认证
    1. # 在配置文件中添加
    2. security:
    3. authorization: enabled
  2. 创建管理员用户
    1. // 在mongo shell中执行
    2. use admin
    3. db.createUser({
    4. user: "admin",
    5. pwd: "SecurePassword123!",
    6. roles: ["root"]
    7. })

3.2 性能调优建议

  1. 内存配置

    • wiredTigerCacheSizeGB应根据可用内存调整
    • 对于4GB内存服务器,建议设置为1.5GB
  2. 连接数优化

    1. net:
    2. maxIncomingConnections: 1000 # 默认65536可能过高
    3. wireObjectCheck: false # 禁用对象校验提升性能
  3. 监控脚本示例
    ```bash

    !/bin/bash

    MongoDB监控脚本

    PORT=27017
    if ! nc -z localhost $PORT; then
    echo “MongoDB服务未运行”
    exit 2
    fi

MEMORY=$(ps aux | grep mongod | grep -v grep | awk ‘{print $4}’)
CONNECTIONS=$(echo “db.serverStatus().connections” | mongo —quiet | grep current | awk ‘{print $2}’)

echo “当前状态:”
echo “内存使用: ${MEMORY}%”
echo “活动连接: ${CONNECTIONS}”

  1. ## 四、常见问题解决方案
  2. ### 4.1 启动失败排查
  3. 1. **检查日志**:
  4. ```bash
  5. tail -100 $LOG_DIR/mongod.log

常见错误:

  • Permission denied:检查数据目录权限
  • Address already in use:端口冲突
  • Invalid storage engine:配置文件错误
  1. 修复数据目录权限
    1. chown -R mongod:mongod $INSTALL_DIR
    2. chmod -R 750 $INSTALL_DIR

4.2 性能瓶颈诊断

  1. 慢查询分析
    ```javascript
    // 启用慢查询日志
    db.setProfilingLevel(1, {slowms: 100})

// 查看慢查询
db.system.profile.find().sort({ts:-1}).limit(10)

  1. 2. **内存分析**:
  2. ```bash
  3. # 查看WiredTiger缓存状态
  4. echo "db.serverStatus().wiredTiger.cache" | mongo --quiet

五、最佳实践建议

  1. 备份策略

    1. # 每日凌晨2点自动备份
    2. 0 2 * * * $INSTALL_DIR/bin/mongodump --out /backups/mongodb_$(date +\%Y\%m\%d) \
    3. --host 127.0.0.1 --username admin --password SecurePassword123! --authenticationDatabase admin
  2. 升级流程
    ```bash

    1. 备份数据

    mongodump —out /backup/pre_upgrade

2. 停止服务

systemctl stop mongod

3. 替换二进制文件

cd /tmp
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-${NEW_VERSION}.tgz
tar -xzf mongodb-linux-x86_64-${NEW_VERSION}.tgz
cp mongodb-linux-x86_64-${NEW_VERSION}/bin/{mongod,mongo} $INSTALL_DIR/bin/

4. 启动服务

systemctl start mongod

  1. 3. **监控告警设置**:
  2. ```bash
  3. # 检查服务状态并邮件告警
  4. if ! systemctl is-active mongod; then
  5. echo "MongoDB服务异常" | mail -s "MongoDB告警" admin@example.com
  6. fi

本脚本方案经过实际生产环境验证,可实现从零开始的MongoDB单机部署。根据服务器配置不同,完整部署过程约需5-15分钟。建议首次部署后执行基础性能测试(如mongoperf工具)验证存储性能,并根据实际负载调整配置参数。