首页主机资讯Node.js在CentOS上的集群部署方案

Node.js在CentOS上的集群部署方案

时间2025-10-13 11:39:03发布访客分类主机资讯浏览1360
导读:Node.js在CentOS上的集群部署方案 在CentOS系统上部署Node.js集群,核心目标是提升应用性能(多进程处理请求)、保证高可用性(进程崩溃自动恢复)及简化管理(自动化运维)。以下是几种常用且成熟的部署方案,涵盖从基础到进阶的...

Node.js在CentOS上的集群部署方案

在CentOS系统上部署Node.js集群,核心目标是提升应用性能(多进程处理请求)、保证高可用性(进程崩溃自动恢复)及简化管理(自动化运维)。以下是几种常用且成熟的部署方案,涵盖从基础到进阶的实现方式:

一、使用Node.js内置Cluster模块(基础方案)

Node.js内置的cluster模块允许创建主进程(Master)和多个工作进程(Worker),主进程负责管理子进程生命周期,工作进程共享同一端口处理请求(Node.js自动负载均衡)。

1. 准备工作:安装Node.js

通过NodeSource官方源安装稳定版Node.js(以Node.js 14为例):

curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
sudo yum install -y nodejs

2. 修改应用代码(以app.js为例)

使用cluster模块创建集群,主进程根据CPU核心数(os.cpus().length)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工作进程
  for (let i = 0;
     i <
     numCPUs;
 i++) {
    
    cluster.fork();

  }
    
  // 监听工作进程崩溃事件
  cluster.on('exit', (worker, code, signal) =>
 {

    console.log(`Worker ${
worker.process.pid}
     died. Restarting...`);
    
    cluster.fork();
 // 自动重启崩溃的进程
  }
    );

}
 else {
    
  // 工作进程启动HTTP服务
  http.createServer((req, res) =>
 {

    res.writeHead(200, {
'Content-Type': 'text/plain'}
    );

    res.end(`Hello from Worker ${
process.pid}
    \n`);

  }
    ).listen(3000, () =>
 {

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

  }
    );

}

3. 启动集群

直接运行应用,主进程会自动创建工作进程:

node app.js

优缺点

  • 优点:无需额外工具,适合理解集群原理;自动负载均衡(Node.js内置)。
  • 缺点:缺乏高级管理功能(如日志集中、内存监控、一键重启);工作进程崩溃需手动处理(代码中已添加自动重启逻辑,但仍需人工干预)。

二、使用PM2进程管理器(推荐方案)

PM2是Node.js生态中最流行的进程管理工具,支持集群模式日志管理内存监控自动重启等功能,大幅简化集群运维。

1. 安装PM2

通过npm全局安装PM2(需提前安装Node.js):

sudo npm install pm2 -g

2. 启动集群

使用pm2 start命令启动应用,并指定集群模式(-i参数):

pm2 start app.js -i max  # max表示根据CPU核心数自动启动实例(如4核CPU启动4个实例)

或指定具体实例数(如启动4个实例):

pm2 start app.js -i 4

3. 常用管理命令

  • 查看集群状态:pm2 status(显示实例列表、状态、内存占用等);
  • 监控实时指标:pm2 monit(查看CPU、内存、请求量等实时数据);
  • 查看日志:pm2 logs(实时查看所有实例日志);
  • 重启集群:pm2 restart app
  • 停止集群:pm2 stop app
  • 删除集群:pm2 delete app

4. 配置文件管理(可选)

创建ecosystem.config.js文件(项目根目录),定义集群配置(更适合生产环境):

module.exports = {

  apps: [{

    name: 'my-node-app',       // 应用名称
    script: 'app.js',          // 入口文件
    instances: 'max',          // 实例数(max或具体数字)
    exec_mode: 'cluster',      // 执行模式(集群模式)
    autorestart: true,         // 应用崩溃自动重启
    watch: false,              // 是否监听文件变化(开发环境设为true)
    max_memory_restart: '1G',  // 内存超过1G时重启实例
    env: {

      NODE_ENV: 'development'  // 开发环境变量
    }
,
    env_production: {

      NODE_ENV: 'production'   // 生产环境变量
    }

  }
]
}
    ;

通过配置文件启动集群:

pm2 start ecosystem.config.js --env production  # 指定生产环境

优缺点

  • 优点:功能全面(进程管理、日志、监控、自动重启);配置简单(支持命令行或配置文件);适合生产环境。
  • 缺点:需额外学习PM2命令;依赖PM2守护进程(需保持PM2运行)。

三、手动创建多个进程(简单但不推荐)

通过Shell脚本手动启动多个Node.js进程,适合测试或简单场景,但缺乏进程管理和自动恢复功能。

1. 创建启动脚本(start_cluster.sh)

#!/bin/bash
# 启动4个Node.js进程(后台运行)
for i in {
1..4}
    ;
     do
  node app.js >
     "logs/worker_$i.log" 2>
    &
    1 &

done
echo "Cluster started with 4 workers."

2. 赋予执行权限

chmod +x start_cluster.sh

3. 启动集群

./start_cluster.sh

4. 查看进程状态

ps aux | grep node

优缺点

  • 优点:无需额外工具,适合快速测试。
  • 缺点:无法自动重启崩溃的进程;无负载均衡(需自行实现);管理麻烦(需手动杀进程、查日志)。

四、搭配Nginx反向代理(增强方案)

无论使用上述哪种集群方案,都可以通过Nginx作为反向代理,实现请求分发SSL终止静态文件缓存等功能,提升应用性能和安全性。

1. 安装Nginx

sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

2. 配置Nginx反向代理

编辑Nginx配置文件(/etc/nginx/conf.d/node_app.conf):

upstream node_cluster {
    
  # 将请求分发到PM2集群的各个实例(端口需与app.js一致)
  server 127.0.0.1:3000;
    
  server 127.0.0.1:3001;
    
  server 127.0.0.1:3002;
    
  server 127.0.0.1:3003;

}


server {
    
  listen 80;
    
  server_name your_domain.com;
  # 替换为你的域名

  location / {
    
    proxy_pass http://node_cluster;
      # 转发到Node.js集群
    proxy_http_version 1.1;
    
    proxy_set_header Upgrade $http_upgrade;
    
    proxy_set_header Connection 'upgrade';
    
    proxy_set_header Host $host;
    
    proxy_cache_bypass $http_upgrade;

  }

}
    

3. 重启Nginx

sudo systemctl restart nginx

作用

  • 负载均衡:Nginx将请求均匀分发到多个Node.js实例,避免单实例过载;
  • SSL终止:Nginx处理HTTPS加密,减轻Node.js负担;
  • 静态文件缓存:Nginx缓存静态文件(如图片、CSS),减少Node.js处理压力。

方案选择建议

  • 开发/测试环境:使用内置Cluster模块手动创建进程,快速验证集群功能;
  • 生产环境:优先选择PM2+配置文件方案,兼顾功能全面性和管理便捷性;
  • 高并发场景:搭配Nginx反向代理,提升应用性能和安全性。

以上方案均能在CentOS上实现Node.js集群部署,根据团队技术栈和业务需求选择合适的方案即可。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Node.js在CentOS上的集群部署方案
本文地址: https://pptw.com/jishu/724552.html
centos redis数据淘汰策略怎么选 如何在CentOS上解决Node.js的跨域问题

游客 回复需填写必要信息