先说结论:能装,但得抠着内存用;不优化,崩给你看!下面把“怎么装、怎么限、怎么活下去”一次讲透。
目录
- 资源现状与风险评估
- MongoDB 6.0 极简安装(2核2G特供版)
- 三大内存锁喉术:让MongoDB学会省着花
- 只给NodeBB开门:内网远程连接+账号白名单
- 日常监控脚本:一超标就报警
- 翻车FAQ
1. 资源现状与风险评估
组件 | 现状 | 占内存(约) |
---|---|---|
MySQL 8.0 | 已跑三个站,日IP 5k+ | 800 MB |
系统+其他 | Debian12.6最小化 | 400 MB |
剩余可用 | 理论≈800 MB | 留给MongoDB |
看见没?留给MongoDB的只有800 MB,必须阉割版上线。
2. MongoDB 6.0 极简安装(2核2G特供版)
# 1. 导入官方源
curl -fsSL https://pgp.mongodb.com/server-6.0.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-6.0.gpg
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] \
https://repo.mongodb.org/apt/debian bookworm/mongodb-org/6.0 main" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
# 2. 安装但不启动
sudo apt install -y mongodb-org
# 3. 先停服务,我们得改配置再开
sudo systemctl stop mongod
3. 三大内存锁喉术:让MongoDB学会省着花
编辑 /etc/mongod.conf
,把下面内容直接覆盖:
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.35 # 最多350 MB,剩给OS和MySQL
net:
port: 27017
bindIp: 127.0.0.1,10.0.0.0/8 # 仅内网段可连
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
security:
authorization: enabled
再建个大页内存禁用的小脚本,省得MongoDB偷偷吃:
echo 'never' | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo 'never' | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
启动并设为开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
4. 只给NodeBB开门:内网远程连接+账号白名单
4.1 建库+用户(最小权限)
mongosh --host 127.0.0.1 --port 27017
use nodebb
db.createUser({
user: "nb",
pwd: "Nb@2025!",
roles: [{ role: "readWrite", db: "nodebb" }]
})
exit
4.2 NodeBB连接串(config.json片段)
"mongo": {
"host": "10.0.12.34",
"port": "27017",
"username": "nb",
"password": "Nb@2025!",
"database": "nodebb",
"options": {
"authSource": "nodebb",
"connectTimeoutMS": 30000
}
}
4.3 防火墙只给NodeBB机放行
# 假设NodeBB跑在10.0.12.100
sudo ufw allow from 10.0.12.100 to any port 27017
sudo ufw enable
5. 日常监控脚本:一超标就报警
# /usr/local/bin/mongo_watch.sh
#!/bin/bash
MEM=$(ps -o rss= -p $(pgrep mongod))
LIMIT=400000 # 400MB
if [ "$MEM" -gt "$LIMIT" ]; then
echo "$(date) MongoDB memory $MEM KB exceeds limit" >> /var/log/mongo_alert.log
systemctl reload mongod
fi
加进crontab每10分钟跑一次:
*/10 * * * * /usr/local/bin/mongo_watch.sh
6. 翻车FAQ
症状 | 原因 | 解决 |
---|---|---|
MongoDB启动即OOM | cacheSizeGB设太大 | 调到≤0.35 GB |
NodeBB连不上 | bindIp没加NodeBB内网段 | bindIp追加对应IP段 |
MySQL报“cannot allocate memory” | 两DB抢内存 | 降低MongoDB cacheSizeGB,MySQL调低innodb_buffer_pool_size |
照做之后,2核2G+MySQL8.0+MongoDB6.0勉强能撑住NodeBB日IP 3k+的流量,但长期建议升级4G内存,不然早晚一起崩。
没有回复内容