温馨提示×

ubuntu nodejs如何开启集群

小樊
58
2026-09-12 18:01:50
栏目: 编程语言

在 Ubuntu 上用 Node.js 开启集群(Cluster),本质是利用 Node.js 自带的 cluster 模块,让多个进程共享同一个端口,从而充分利用多核 CPU。

下面从 基础示例 → 生产建议 → PM2 方式 逐步说明。


一、使用 Node.js 自带 cluster 模块(原生方式)

1. 创建集群示例

新建文件 server.js:

const cluster = require('cluster');
const http = require('http');
const os = require('os');

// 主进程
if (cluster.isMaster) {
  const numCPUs = os.cpus().length;
  console.log(`Master ${process.pid} is running`);

  // 根据 CPU 核心数 fork 子进程
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker) => {
    console.log(`Worker ${worker.process.pid} died`);
    cluster.fork(); // 自动重启
  });
} else {
  // 工作进程
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello from worker ' + process.pid + '\n');
  }).listen(3000);

  console.log(`Worker ${process.pid} started`);
}

2. 运行

node server.js

访问:

curl http://localhost:3000

你会看到不同 pid 的响应,说明集群已生效。


二、Ubuntu 上常见运行方式

1. 后台运行

nohup node server.js &

2. 使用 systemd(推荐生产)

创建服务文件:

sudo nano /etc/systemd/system/node-cluster.service

内容示例:

[Unit]
Description=Node Cluster App
After=network.target

[Service]
ExecStart=/usr/bin/node /home/ubuntu/server.js
Restart=always
User=ubuntu
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

启用:

sudo systemctl daemon-reload
sudo systemctl start node-cluster
sudo systemctl enable node-cluster

三、使用 PM2(最常用、最简单)

1. 安装 PM2

sudo npm install -g pm2

2. 启动集群(自动按 CPU 核心数)

pm2 start server.js -i max

或指定进程数:

pm2 start server.js -i 4

3. 常用命令

pm2 list
pm2 logs
pm2 restart all
pm2 stop all

4. 开机自启

pm2 startup
pm2 save

四、注意事项

✅ Cluster 只适合 CPU 密集型 或 多请求并发
✅ 子进程之间 不共享内存
✅ 如果有 session,需用 Redis 等外部存储
✅ WebSocket / Socket.io 需启用 sticky sessions


五、总结

方式 适合场景
cluster 模块 学习 / 自定义控制
systemd 原生服务管理
PM2 生产环境首选

如果你愿意,我可以:

  • 帮你写 Express / Koa 集群示例
  • 配置 Nginx + Node 集群
  • 解决 Socket.io 集群问题

告诉我你的使用场景即可。

0 踩