ubuntu

Ubuntu Nodejs 集群搭建方法是什么

小樊
51
2025-09-18 10:59:18
栏目: 编程语言

Ubuntu系统下搭建Node.js集群的常用方法

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

Cluster模块是Node.js原生提供的多进程管理工具,允许主进程创建多个工作进程(Worker),所有工作进程共享同一个端口,通过操作系统的负载均衡(如Linux的Round-Robin算法)分发请求,充分利用多核CPU资源。

1. 基础环境准备

确保Ubuntu系统已安装Node.js和npm(Node.js包管理器)。若未安装,可通过以下命令快速安装:

sudo apt update
sudo apt install nodejs npm
# 验证安装
node -v  # 查看Node.js版本
npm -v   # 查看npm版本

2. 编写集群化应用代码

创建一个项目目录(如node-cluster-demo),初始化项目并编写集群配置代码:

mkdir node-cluster-demo && cd node-cluster-demo
npm init -y  # 初始化package.json

创建cluster-app.js文件,内容如下:

const cluster = require('cluster');
const http = require('http');
const os = require('os');

const numCPUs = os.cpus().length; // 获取CPU核心数

if (cluster.isPrimary) {
  // 主进程逻辑:创建工作进程
  console.log(`主进程 ${process.pid} 正在运行`);
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork(); // 创建子进程
  }

  // 监听工作进程退出事件,自动重启
  cluster.on('exit', (worker, code, signal) => {
    console.log(`工作进程 ${worker.process.pid} 退出,正在重启...`);
    cluster.fork();
  });
} else {
  // 工作进程逻辑:创建HTTP服务器
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end(`响应来自工作进程:${process.pid}\n`);
  }).listen(3000);

  console.log(`工作进程 ${process.pid} 启动`);
}

3. 启动集群应用

在项目目录下运行以下命令启动集群:

node cluster-app.js

访问http://localhost:3000,多次刷新页面会发现响应来自不同的工作进程(PID不同),证明集群已生效。

4. 注意事项

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

PM2是Node.js生态中最流行的进程管理工具,内置集群模式,支持负载均衡、日志管理、自动重启、零停机重启等功能,适合生产环境使用。

1. 安装PM2

通过npm全局安装PM2:

sudo npm install pm2 -g

2. 启动集群应用

有两种方式通过PM2启动集群:

3. 常用管理命令

4. 生产环境优化

三、搭配Nginx反向代理(增强生产环境能力)

虽然Cluster模块和PM2已能实现集群,但搭配Nginx可作为反向代理,提供负载均衡、SSL终止、静态文件缓存、限流等功能,进一步提升应用的可用性和安全性。

1. 安装Nginx

sudo apt update
sudo apt install nginx

2. 配置Nginx负载均衡

编辑Nginx配置文件(通常位于/etc/nginx/sites-available/default),添加以下内容:

http {
  upstream node_cluster {
    server 127.0.0.1:3000;  # Node.js集群地址(PM2启动的端口)
    server 127.0.0.1:3001;  # 若有多个实例,可添加更多
  }

  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

4. 验证效果

访问http://your_domain.com,Nginx会将请求分发到后端的Node.js集群,提升并发处理能力和容错性。

0
看了该问题的人还看了