在Ubuntu上实现MongoDB自动化运维
自动化运维是保障MongoDB稳定运行、提升管理效率的关键,主要包括自动重启、自动故障转移、开机自启动、自动备份四大核心场景,以下是具体实现方法:
通过Shell脚本检测MongoDB进程状态,结合Cron定时任务实现自动重启,避免因进程意外终止导致服务中断。
mongodb_restart.sh,内容如下:#!/bin/bash
if pgrep "mongod" > /dev/null; then
echo "$(date): MongoDB is running." >> /var/log/mongodb_restart.log
else
echo "$(date): MongoDB is not running. Restarting..." >> /var/log/mongodb_restart.log
sudo systemctl restart mongod
fi
chmod +x mongodb_restart.sh。crontab -e,添加以下行(每天凌晨3点执行):0 3 * * * /path/to/mongodb_restart.sh
该配置会每日检查MongoDB进程,若未运行则自动重启,并将结果记录到/var/log/mongodb_restart.log。副本集是MongoDB实现高可用性的核心机制,通过多节点同步数据,主节点故障时自动选举新主节点。
sudo apt install mongodb-org)。/etc/mongod.conf,添加以下内容:replication:
replSetName: "rs0"
重启服务使配置生效:sudo systemctl restart mongod。mongo --eval 'rs.initiate({_id: "rs0", members: [{_id: 0, host: "localhost:27017"}]})'
mongo --eval 'rs.add("server2:27017")'(替换为实际节点地址);mongo --eval 'cfg = rs.conf(); cfg.members[0].priority = 2; rs.reconfig(cfg)'
mongo --eval 'rs.addArb("arbiter_host:27017")'
副本集会自动处理故障转移,无需人工干预。通过Systemd服务管理,确保MongoDB随Ubuntu系统启动自动运行。
/etc/systemd/system/mongod.service,内容如下:[Unit]
Description=MongoDB Database Server
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
PIDFile=/var/run/mongodb/mongod.pid
Type=forking
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable mongod
sudo systemctl start mongod
通过systemctl status mongod可查看服务状态,确认是否启动成功。结合Shell脚本与Cron定时任务,实现定期备份(全量/增量),并通过日志与报警机制监控备份状态。
sudo apt install mongodb-org-tools(包含mongodump工具)。/usr/local/bin/mongodb_backup.sh,内容如下:#!/bin/bash
BACKUP_DIR="/backup/mongodb"
DATE=$(date +%Y%m%d%H%M%S)
LOG_FILE="/var/log/mongodb_backup.log"
MONGO_USER="your_username"
MONGO_PASSWORD="your_password"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行备份(全量)
mongodump --host localhost --port 27017 --username $MONGO_USER --password $MONGO_PASSWORD --authenticationDatabase admin --out $BACKUP_DIR/$DATE >> $LOG_FILE 2>&1
# 压缩备份文件
tar -czvf $BACKUP_DIR/$DATE.tar.gz $BACKUP_DIR/$DATE >> $LOG_FILE 2>&1
# 删除原始备份目录
rm -rf $BACKUP_DIR/$DATE
# 删除7天前的备份(保留最近7天)
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -exec rm {} \;
echo "$(date): Backup completed successfully." >> $LOG_FILE
chmod +x /usr/local/bin/mongodb_backup.sh。crontab -e,添加以下行(每天凌晨2点执行):0 2 * * * /usr/local/bin/mongodb_backup.sh
/backup/mongodb目录下是否有新的.tar.gz文件,查看/var/log/mongodb_backup.log确认备份结果。mongostat、mongotop或第三方工具(如Prometheus+Grafana)监控MongoDB性能指标(连接数、内存使用、QPS),设置阈值报警(如连接数超过100时发送邮件)。grep、awk等工具分析MongoDB日志(/var/log/mongodb/mongod.log),识别慢查询、连接异常等问题。以上步骤覆盖了MongoDB在Ubuntu上的核心自动化运维需求,可根据实际场景调整脚本参数(如备份路径、Cron时间)与监控阈值,提升运维效率与系统可靠性。