商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何在Ubuntu上实现Node.js的集群模式

如何在Ubuntu上实现Node.js的集群模式

  发布于2026-07-08 阅读(0)

扫一扫,手机访问

说到Node.js的集群模式,其实核心目标很明确:让应用能真正“吃透”多核CPU的性能。毕竟Node.js默认是单线程的,跑在单核上总有种“明明有资源却用不上”的憋屈感。下面就是一套在Ubuntu上从零搭建集群模式的完整流程,包括代码和操作细节,关键步骤都配了示例。

如何在Ubuntu上实现Node.js的集群模式

1. 安装Node.js

先确保Ubuntu上已经装了Node.js,没装的话用下面这行经典命令搞定:

sudo apt update
sudo apt install nodejs npm

2. 创建Node.js应用

新建一个文件,比如叫app.js,里面写一个最朴素的HTTP服务器

const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200);
  res.end('Hello World\n');
});
server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

3. 使用Node.js的集群模块

Node.js的cluster模块允许我们创建多个工作进程,这些进程能共享同一个端口。下面这个例子展示了如何利用它让应用跑满所有CPU核心——先判断当前进程是主进程还是工作进程,主进程负责fork,工作进程则各自启动服务:

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);
  // Fork workers.
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
  });
} else {
  // Workers can share any TCP connection
  // In this case it is an HTTP server
  const server = http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello World\n');
  });
  server.listen(3000, () => {
    console.log(`Worker ${process.pid} started`);
  });
}

4. 运行应用

终端里直接执行:

node app.js

5. 验证集群模式

想知道是不是真的起了多个进程?用netstatlsof看一眼3000端口就知道:

sudo netstat -tuln | grep 3000

或者:

sudo lsof -i :3000

正常的话,你会看到多个进程同时在监听这个端口——没错,它们都是同一应用的不同实例。

6. 负载均衡

cluster模块默认采用轮询(round-robin)算法来分配请求。如果业务场景特殊,需要自定义负载均衡策略?没问题,但默认方式在大多数场景下已经够用了。

7. 监控和管理

生产环境里不可能只靠手工重启,所以需要工具来管理集群中的工作进程。pm2是这里的老面孔了,安装和使用都非常直接:

npm install pm2 -g

pm2启动应用并自动根据CPU核心数创建对应数量的进程:

pm2 start app.js -i max

-i max这个参数就是关键——它会自动检测CPU核心数并启动相应数量的工作进程,省去手动fork的功夫。

按照这套流程操作,Node.js应用就能真正利用起Ubuntu服务器的多核能力,并发处理性能和可靠性都会上升一个台阶。当然,集群模式只是高可用的第一步,后续还可以结合反向袋里、日志、健康检查等手段进一步完善。

本文转载于:https://www.yisu.com/ask/22511986.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注