2核2G内网MySQL8.0服务器,再塞一个给NodeBB专用的远程MongoDB?吃土也要稳! - 技术宅银魂 - 科技改变生活 - 万事屋 | 生活·动漫·娱乐综合社区-银魂同好聚集地

2核2G内网MySQL8.0服务器,再塞一个给NodeBB专用的远程MongoDB?吃土也要稳!

先说结论:能装,但得抠着内存用;不优化,崩给你看!下面把“怎么装、怎么限、怎么活下去”一次讲透。


目录

  1. 资源现状与风险评估
  2. MongoDB 6.0 极简安装(2核2G特供版)
  3. 三大内存锁喉术:让MongoDB学会省着花
  4. 只给NodeBB开门:内网远程连接+账号白名单
  5. 日常监控脚本:一超标就报警
  6. 翻车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内存,不然早晚一起崩。

请登录后发表评论

    没有回复内容

万事屋新帖