MongoDB 架构
安全
防止被黑客攻击 主要措施
- 启动认证登录
- 设定复杂密码
- 修改端口
- 限制内网访问
通过 MongoDB 自带的 bindip 参数在我的实践中并不管用,这里采用的是 Linux 自带的iptables 功能,限制允许访问 MongoDB 端口的IP地址:
# 拒绝所有访问27027端口的请求 $ sudo iptables -I INPUT -p tcp --dport 27027 -j DROP # 允许本地访问mongo端口 $ sudo iptables -I INPUT -s 127.0.0.1 -p tcp --dport 27027 -j ACCEPT $ sudo iptables-save
搭建副本
参考文章: MongoDB 副本集之入门
主机设定
设定主机名字:hostnamectl set-hostname serverpi 为serverpi ,存储在 /etc/hostname
编辑 /etc/hosts 使得服务器之间互相认识
217.160.61.19 serverionos 192.168.0.136 servcerpi ...
配置用例
修改mongod.conf 文件,并启动案例。详细请参阅以下上篇文章:文章一 文章二 文章三
/usr/bin/mongod -f /home/mongodb/33720/etc/mongod.conf
/usr/bin/mongod -f /home/mongodb/33721/etc/mongod.conf
db.shutdownServer({force: <boolean>,timeoutSecs: <int>}) #关闭服务, 这种方式启动的案例 systemctl 不认识
此文章提及到主节点人工降级为副本集。
数据备份
mongodump
mongodump --uri="mongodb://user:[email protected]:33720" --authenticationDatabase admin -d Stock -o ~/projects/Backup mongorestore --uri="mongodb://user:[email protected]:33720" --authenticationDatabase admin -d Stock ~/projects/Backup/Stock
注意备份前锁写操作 db.fsyncLock() 以及备份结束后开通写操作 db.fsyncUnlock()
压缩文件备份
将目录压缩到一个文件当中 tar -czf /home/ubuntu/Backup/`date +%F`_mongo_all.tar.gz /home/ssd/mongodb
解压到原来的目录 tar -xzf /home/ubuntu/Backup/2021-07-17_mongo_all.tar.gz -C /
解压的参数写根目录就可以了,它会按照压缩时的目录解压 。
利用系统 crontab 定时任务,制定一个每周和每月的备份计划。编写备份数据的脚本如下,
- dobachup.sh
#/usr/bin/sh! mongo --port 33720 -u goldentianya -p 's#;zb_OfJW]P' <<EOF db.fsyncLock() EOF tar -czf /home/mongobackup/`date +%F`_mongo_all.tar.gz /home/ssd/mongodb mongo --port 33720 -u goldentianya -p 's#;zb_OfJW]P' <<EOF db.fsyncUnlock() EOF # 删除6天以前的文件 find /home/ubuntu/apis/test/temp/ -mtime +6 | xargs rm
然后制定计划任务
crontab -e # 系统会建立/修改一个临时脚本文件。在文件中输入 # 每周日或每月1号的凌晨2点执行数据库备份 0 2 1 * 0 /home/mongobackup/dobachup.sh
