一、基础环境部署
1. 系统准备
bash
# 更新系统
sudo apt-get update
sudo apt-get upgrade
# 安装必要依赖
sudo apt-get install -y curl gnupg2 software-properties-common
2. MongoDB安装
bash
# 导入MongoDB GPG Key
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
# 添加MongoDB源
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse"| sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
# 安装MongoDB
sudo apt-get update
sudo apt-get install -y mongodb-org
二、基础配置优化
1. mongod.conf配置
yaml
# 编辑 /etc/mongod.conf
storage:
dbPath:/var/lib/mongodb
journal:
enabled:true
wiredTiger:
engineConfig:
cacheSizeGB:4
systemLog:
destination: file
logAppend:true
path:/var/log/mongodb/mongod.log
net:
port:27017
bindIp:0.0.0.0
security:
authorization: enabled
2. 系统参数优化
bash
# 编辑 /etc/sysctl.conf
vm.swappiness =1
vm.dirty_ratio =15
vm.dirty_background_ratio =5
# 优化文件句柄限制
echo "mongodb soft nofile 64000">>/etc/security/limits.conf
echo "mongodb hard nofile 64000">>/etc/security/limits.conf
三、性能优化配置
1. WiredTiger存储引擎优化
yaml
storage:
wiredTiger:
engineConfig:
cacheSizeGB:4
journalCompressor: snappy
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression:true
2. 索引优化
javascript
// 创建复合索引
db.collection.createIndex({"field1":1,"field2":-1})
// 创建文本索引
db.collection.createIndex({"content":"text"})
// 创建地理空间索引
db.collection.createIndex({"location":"2dsphere"})
四、集群配置
1. 副本集配置
yaml
replication:
replSetName:"rs0"
security:
keyFile:"/etc/mongodb/keyfile"
2. 分片集群配置
javascript
// 配置分片
sh.enableSharding("database")
sh.shardCollection("database.collection",{"shardKey":1})
五、监控与维护
1. 性能监控
javascript
// 查看数据库状态
db.serverStatus()
// 查看集合统计信息
db.collection.stats()
// 查看慢查询
db.getProfilingStatus()
2. 备份策略
bash
# 创建备份
mongodump --db database --out/backup/
# 定时备份脚本
#!/bin/bash
backup_date=`date +%Y%m%d`
mongodump --db database --out/backup/$backup_date
六、常见问题优化
1. 内存优化
合理设置WiredTiger缓存
避免数据超出物理内存
监控内存使用情况
2. CPU优化
七、安全加固
1. 访问控制
javascript
// 创建管理员用户
use admin
db.createUser({
user:"adminUser",
pwd:"password",
roles:[{ role:"userAdminAnyDatabase", db:"admin"}]
})
2. 网络安全
bash
# 配置防火墙规则
ufw allow from192.168.1.0/24 to any port 27017