溫馨提示×

Ubuntu Nodejs 集群搭建方法是什么

小樊
44
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. 注意事項

  • 內存隔離:工作進程之間無法共享內存,需通過Redis、數據庫等外部服務同步狀態(如用戶登錄態、緩存數據)。
  • 進程守護:主進程需監聽工作進程的exit事件,及時重啟崩潰的進程,避免服務中斷。
  • 進程數量:建議工作進程數量與CPU核心數一致,過多會導致上下文切換開銷增大。

二、使用PM2進程管理器(推薦方案)

PM2是Node.js生態中最流行的進程管理工具,內置集群模式,支持負載均衡、日志管理、自動重啟、零停機重啟等功能,適合生產環境使用。

1. 安裝PM2

通過npm全局安裝PM2:

sudo npm install pm2 -g

2. 啟動集群應用

有兩種方式通過PM2啟動集群:

  • 簡單模式:直接指定實例數量(如4個):
    pm2 start app.js -i 4
    
  • 配置文件模式(推薦):創建ecosystem.config.js文件,定義集群配置:
    module.exports = {
      apps: [
        {
          name: 'my-node-app',       // 應用名稱
          script: 'app.js',          // 入口文件
          instances: 'max',          // 實例數量(max表示CPU核心數)
          exec_mode: 'cluster',      // 集群模式
          autorestart: true,         // 自動重啟
          watch: false,              // 不監聽文件變化
          max_memory_restart: '1G',  // 內存超過1G時重啟
          env: {
            NODE_ENV: 'development'  // 開發環境變量
          },
          env_production: {
            NODE_ENV: 'production'   // 生產環境變量
          }
        }
      ]
    };
    
    啟動命令:
    pm2 start ecosystem.config.js
    

3. 常用管理命令

  • 查看所有進程:pm2 list
  • 查看進程詳情:pm2 show <app_name_or_id>
  • 停止進程:pm2 stop <app_name_or_id>
  • 重啟進程:pm2 restart <app_name_or_id>
  • 刪除進程:pm2 delete <app_name_or_id>
  • 監控實時狀態:pm2 monit(顯示CPU、內存、日志)
  • 查看日志:pm2 logs(實時日志流)

4. 生產環境優化

  • 零停機重啟:使用pm2 reload <app_name>代替restart,實現無縫重啟。
  • 日志管理:通過pm2 logs --merge合并所有進程日志,或配置logrotate定期歸檔日志。
  • 開機自啟動:運行pm2 startup生成啟動腳本,確保服務器重啟后自動啟動PM2及應用。

三、搭配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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女