在 CentOS 上配置 Node.js 集群,通常有两种常见方式:
下面分别说明。
适合:一台 CentOS 服务器,多核 CPU
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`);
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 Node.js cluster\n');
}).listen(3000);
console.log(`Worker ${process.pid} started`);
}
node app.js
使用 pm2(生产环境强烈推荐):
npm install -g pm2
pm2 start app.js -i max
pm2 save
pm2 startup
适合:高可用、负载均衡
Nginx (负载均衡)
├── Node1 (CentOS A:3000)
├── Node2 (CentOS B:3000)
└── Node3 (CentOS C:3000)
# 安装 Node.js
curl -sL https://rpm.nodesource.com/setup_18.x | bash -
yum install -y nodejs
pm2 start app.js -i max
yum install -y nginx
upstream node_cluster {
server 192.168.1.10:3000;
server 192.168.1.11:3000;
server 192.168.1.12:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://node_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
systemctl start nginx
systemctl enable nginx
firewall-cmd --add-port=3000/tcp --permanent
firewall-cmd --reload
yum install redis
| 场景 | 方案 |
|---|---|
| 单服务器多核 | Node cluster / pm2 |
| 多服务器 | Nginx + Node + pm2 |
| 高可用 | Nginx + Redis + 多节点 |
如果你愿意,我可以:
你现在是 单机还是多台服务器?