温馨提示×

Ubuntu Node.js集群如何搭建与管理

小樊
51
2025-08-19 07:26:15
栏目: 编程语言

一、搭建Ubuntu Node.js集群

1. 基础环境准备

  • 安装Node.js和npm

    sudo apt update
    sudo apt install nodejs npm
    

    验证安装:node -vnpm -v

  • 安装PM2(进程管理器)

    sudo npm install pm2 -g
    

    验证安装:pm2 -v

2. 集群模式配置

  • 方式一:使用Node.js内置cluster模块
    创建app.js,代码如下:

    const cluster = require('cluster');
    const http = require('http');
    const numCPUs = require('os').cpus().length;
    
    if (cluster.isMaster) {
      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`);
      });
    } else {
      http.createServer((req, res) => {
        res.writeHead(200);
        res.end('Hello World\n');
      }).listen(3000);
      console.log(`Worker ${process.pid} started`);
    }
    

    运行应用:node app.js,通过ps aux | grep node查看进程数是否等于CPU核心数。

  • 方式二:使用PM2集群模式
    创建ecosystem.config.js

    module.exports = {
      apps: [{
        name: 'node-app',
        script: 'app.js',
        instances: 'max', // 按CPU核心数自动启动实例
        exec_mode: 'cluster'
      }]
    };
    

    启动集群:pm2 start ecosystem.config.js

3. 负载均衡(可选)

  • 使用Nginx反向代理
    安装Nginx:sudo apt install nginx,编辑配置文件/etc/nginx/sites-available/default
    upstream node_backend {
      server 127.0.0.1:3000;
      server 127.0.0.1:3001;
      server 127.0.0.1:3002;
    }
    server {
      listen 80;
      location / {
        proxy_pass http://node_backend;
      }
    }
    
    重启Nginx:sudo systemctl restart nginx,需确保Node.js应用分别运行在不同端口(如3000、3001、3002)。

二、集群管理

1. 进程管理

  • 查看状态pm2 list
  • 停止/重启应用pm2 stop <app_name>pm2 restart <app_name>
  • 查看日志pm2 logs

2. 高可用与扩展

  • 容器化部署(Docker + Kubernetes)
    • 编写Dockerfile:基于Node.js镜像构建应用容器。
    • 使用Kubernetes编排集群,实现自动扩缩容和故障转移。
  • 监控与告警
    • 集成Prometheus + Grafana监控集群性能。
    • 配置PM2自动重启策略:pm2 save + pm2 startup(系统重启后自动恢复进程)。

三、注意事项

  • 端口冲突:确保集群中各实例端口不重复,或通过Nginx统一代理。
  • 数据一致性:若集群需共享数据,建议使用Redis等中间件。
  • 安全配置:生产环境需配置HTTPS、防火墙规则及定期更新依赖。

参考资料:

0