Linux Node.js集群部署方法详解
在Linux上利用Node js内置cluster模块可按CPU核数fork多进程实现集群部署,主进程管理子进程,工作进程共享HTTP服务。生产环境推荐PM2工具,通过`pm2startapp js-imax`自动管理多进程,支持自动重启、日志收集和零停机重载。
在 Linux 环境下借助 Node.js 实现集群部署有多种方式,其中最为基础且常用的就是直接使用 Node.js 内置的 cluster 模块。下面将逐步拆解整个流程,并介绍如何通过 PM2 简化集群管理。

1. 安装 Node.js
第一步自然是安装 Node.js 环境。如果 Linux 系统中尚未安装,可通过 NodeSource 提供的脚本快速完成:
curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
这里以 Node.js 14.x 版本为例,你可以根据实际需求调整版本号。
2. 创建一个简单的 Node.js 应用
先编写一个最基础的 HTTP 服务,方便后续演示集群效果。将文件命名为 app.js:
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/');
});
此时在终端执行 node app.js 即可启动服务,但这仍然是单进程运行。
3. 使用 cluster 模块实现多进程
接下来是核心步骤——通过 cluster 模块将应用改造为多进程模式。修改 app.js,让主进程(Master)根据 CPU 核心数创建对等工作进程(Worker):
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// 按 CPU 核心数创建工作进程
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// 工作进程共享同一个 TCP 连接(即 HTTP 服务)
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello World\n');
}).listen(3000);
console.log(`Worker ${process.pid} started`);
}
这段代码的设计清晰明了:主进程仅负责管理和创建子进程,实际请求处理由 forked 的 Worker 进程完成。
4. 运行应用
在终端直接执行:
node app.js
控制台会输出 Master 及各个 Worker 的 PID,表明多进程集群已经启动。
5. 验证集群是否生效
通过 ps 命令查看进程列表,可以确认多个 Node.js 进程正在并行运行:
ps aux | grep node
你将看到 Master 进程与多个 Worker 进程同时存在,每个 Worker 通常对应一个 CPU 核心。
6. 使用 PM2 实现更高级的集群管理
cluster 模块虽然功能足够,但在生产环境中直接管理进程仍有诸多不便——例如进程崩溃后的自动重启、日志收集、负载均衡策略等。此时 PM2 是更加成熟的解决方案。
安装 PM2
npm install pm2 -g
启动应用(自动利用所有 CPU 核心)
pm2 start app.js -i max
-i max 参数使 PM2 根据 CPU 核心数自动启动相应数量的进程,效果与手动 fork 相同,但省去了自行编写 cluster 逻辑的麻烦。
查看应用运行状态
pm2 list
实时监控各项指标
pm2 monit
日志查看与管理
pm2 logs
使用 PM2 后,进程管理、健康检查、零停机重载等功能都简化为几条命令。整体来说,如果你是首次接触 Node.js 集群部署,建议先用 cluster 模块理解底层原理,再切换到 PM2 用于生产环境,这样既能掌握核心机制,又能获得工程化的便利。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
IDEA中SpringBoot项目热部署实现指南
Springboot项目在IDEA中实现热部署需依次完成:开启自动编译(静态与动态编译)、启用热部署策略、引入spring-boot-devtools依赖、关闭浏览器缓存,最后启动测试即可生效,省去手动重启时间,大幅提升开发效率。
Java实现Excel转JSON的代码详解
使用Java结合FreeSpire XLS库可自动将Excel转为JSON,通过读取工作表并映射为键值对,高效支持数据迁移、报表导出与系统对接,大幅提升效率并消除手动录入错误。
Golang高效布谷鸟过滤器多字符集字符串过滤
布谷鸟过滤器支持删除操作,通过指纹截断与双哈希定位实现多字符集高效过滤。指纹截断需采用fnv64a或xxhash快速哈希并取低8位,桶索引使用独立双哈希避免假阳性。并发安全需以固定数组配合sync atomic实现。
Java使用Poi-tl按Word模板生成动态表格
Poi-tl是Word导出工具,文档周全,支持多级合并表头生成。通过{{text}}、{{?var}}、{{ table}}标签处理模板,传入TableRenderData对象即可动态渲染表格。示例展示用户信息表格生成,并提供工具类消除表格首行缩进,确保格式正确。
Go语言微服务集成Swagger生成交互式API文档完整教程
在Go微服务中集成Swagger常见四大问题:swaginit初始化失败需确保存在packagemain及注释;SwaggerUI加载失败因路由映射错误或未导入docs;@Param注解必须严格遵循格式;部署后接口文档显示localhost因硬编码host,应删除或通过环境变量动态注入。
- 热门数据榜
相关攻略
2026-07-11 06:47
2026-07-11 06:47
2026-07-11 06:47
2026-07-11 06:47
2026-07-11 06:47
2026-07-11 06:46
2026-07-11 06:46
2026-07-11 06:46
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

