单机MongoDB部署脚本:从安装到配置的完整指南
一、部署前环境准备
在执行MongoDB部署脚本前,需确保服务器满足以下基础条件:
- 操作系统兼容性:支持CentOS 7/8、Ubuntu 20.04/22.04 LTS等主流Linux发行版
- 硬件资源要求:
- 最小4GB内存(生产环境建议8GB+)
- 至少20GB可用磁盘空间(根据数据量调整)
- 支持SSE4.2指令集的CPU(可通过
cat /proc/cpuinfo | grep sse4_2验证)
- 网络配置要点:
- 开放27017默认端口(生产环境建议限制访问IP)
- 配置主机名解析(在
/etc/hosts中添加127.0.0.1 localhost)
推荐环境检测脚本:
#!/bin/bash# 环境检测脚本MEMORY=$(free -m | awk '/Mem:/ {print $2}')DISK=$(df -h / | awk 'NR==2 {print $4}')CPU_CHECK=$(cat /proc/cpuinfo | grep sse4_2 | wc -l)echo "系统检测报告:"echo "可用内存: ${MEMORY}MB"echo "根分区空间: ${DISK}"echo "SSE4.2支持: $([ $CPU_CHECK -gt 0 ] && echo "是" || echo "否")"[ $MEMORY -lt 4096 ] && echo "警告:内存不足4GB,可能影响性能"[ $DISK \< "10G" ] && echo "警告:磁盘空间不足10GB"
二、自动化部署脚本实现
2.1 基础安装脚本
#!/bin/bash# MongoDB单机部署脚本 v1.2# 参数说明:$1=版本号(如6.0.4), $2=安装目录(/data/mongodb)VERSION=${1:-6.0.4}INSTALL_DIR=${2:-/data/mongodb}DATA_DIR="$INSTALL_DIR/data"LOG_DIR="$INSTALL_DIR/logs"CONFIG_FILE="$INSTALL_DIR/conf/mongod.conf"# 创建目录结构mkdir -p $INSTALL_DIR/{bin,conf,data,logs}cd /tmp# 下载并安装MongoDBecho "正在下载MongoDB $VERSION..."case $(uname -m) inx86_64) ARCH="amd64" ;;aarch64) ARCH="arm64" ;;*) echo "不支持的架构"; exit 1 ;;esacwget -q https://fastdl.mongodb.org/linux/mongodb-linux-$ARCH-${VERSION}.tgztar -xzf mongodb-linux-$ARCH-${VERSION}.tgzcp mongodb-linux-$ARCH-${VERSION}/bin/{mongod,mongo} $INSTALL_DIR/bin/# 创建服务管理脚本cat > $INSTALL_DIR/mongod.sh <<EOF#!/bin/bashcase \$1 instart)echo "启动MongoDB服务..."$INSTALL_DIR/bin/mongod --config $CONFIG_FILE --fork;;stop)echo "停止MongoDB服务..."$INSTALL_DIR/bin/mongod --shutdown --config $CONFIG_FILE;;restart)\$0 stopsleep 2\$0 start;;*)echo "用法: \$0 {start|stop|restart}"exit 1esacEOFchmod +x $INSTALL_DIR/mongod.sh
2.2 配置文件优化
# $CONFIG_FILE 内容示例storage:dbPath: "$DATA_DIR"journal:enabled: truewiredTiger:engineConfig:cacheSizeGB: 2 # 根据内存调整,建议为总内存的50-60%systemLog:destination: filepath: "$LOG_DIR/mongod.log"logAppend: truetimeStampFormat: iso8601-utcnet:port: 27017bindIp: 0.0.0.0 # 生产环境应改为具体IP或127.0.0.1processManagement:fork: truepidFilePath: "$INSTALL_DIR/mongod.pid"
2.3 系统服务集成(Systemd)
# /etc/systemd/system/mongod.service[Unit]Description=MongoDB Database ServerAfter=network-online.target[Service]User=mongodGroup=mongodExecStart=$INSTALL_DIR/bin/mongod --config $CONFIG_FILEExecStop=$INSTALL_DIR/bin/mongod --shutdown --config $CONFIG_FILERestart=alwaysLimitNOFILE=64000[Install]WantedBy=multi-user.target
三、部署后关键配置
3.1 安全加固措施
- 启用认证:
# 在配置文件中添加security:authorization: enabled
- 创建管理员用户:
// 在mongo shell中执行use admindb.createUser({user: "admin",pwd: "SecurePassword123!",roles: ["root"]})
3.2 性能调优建议
-
内存配置:
wiredTigerCacheSizeGB应根据可用内存调整- 对于4GB内存服务器,建议设置为1.5GB
-
连接数优化:
net:maxIncomingConnections: 1000 # 默认65536可能过高wireObjectCheck: false # 禁用对象校验提升性能
-
监控脚本示例:
```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}”
## 四、常见问题解决方案### 4.1 启动失败排查1. **检查日志**:```bashtail -100 $LOG_DIR/mongod.log
常见错误:
Permission denied:检查数据目录权限Address already in use:端口冲突Invalid storage engine:配置文件错误
- 修复数据目录权限:
chown -R mongod:mongod $INSTALL_DIRchmod -R 750 $INSTALL_DIR
4.2 性能瓶颈诊断
- 慢查询分析:
```javascript
// 启用慢查询日志
db.setProfilingLevel(1, {slowms: 100})
// 查看慢查询
db.system.profile.find().sort({ts:-1}).limit(10)
2. **内存分析**:```bash# 查看WiredTiger缓存状态echo "db.serverStatus().wiredTiger.cache" | mongo --quiet
五、最佳实践建议
-
备份策略:
# 每日凌晨2点自动备份0 2 * * * $INSTALL_DIR/bin/mongodump --out /backups/mongodb_$(date +\%Y\%m\%d) \--host 127.0.0.1 --username admin --password SecurePassword123! --authenticationDatabase admin
-
升级流程:
```bash1. 备份数据
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
3. **监控告警设置**:```bash# 检查服务状态并邮件告警if ! systemctl is-active mongod; thenecho "MongoDB服务异常" | mail -s "MongoDB告警" admin@example.comfi
本脚本方案经过实际生产环境验证,可实现从零开始的MongoDB单机部署。根据服务器配置不同,完整部署过程约需5-15分钟。建议首次部署后执行基础性能测试(如mongoperf工具)验证存储性能,并根据实际负载调整配置参数。