Linux Node.js 集群部署实战
一 核心原理与适用场景
二 方案一 原生 Cluster 最小可用示例
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
node -v # 应输出 v24.x.x
import cluster from 'node:cluster';
import http from 'node:http';
import { availableParallelism } from 'node:os';
import process from 'node:process';
const numCPUs = availableParallelism();
if (cluster.isPrimary) {
console.log(`Primary ${process.pid} is running`);
for (let i = 0; i < numCPUs; i++) cluster.fork();
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died (code=${code}, signal=${signal})`);
// 简单自恢复:异常退出时重启
cluster.fork();
});
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end(`Hello from Worker ${process.pid}\n`);
}).listen(8000, () => {
console.log(`Worker ${process.pid} listening on 8000`);
});
}
node cluster.js
curl http://localhost:8000
ps aux | grep node # 应看到多个 node 进程
三 方案二 使用 PM2 快速集群化
sudo npm install -g pm2
pm2 start app.js -i max # 按 CPU 核心数启动 Worker
pm2 status # 查看集群状态
pm2 logs # 查看日志
pm2 restart|stop app # 重启/停止
四 生产要点与常见问题