首页主机资讯Ubuntu Nodejs如何集群部署

Ubuntu Nodejs如何集群部署

时间2025-12-12 10:08:03发布访客分类主机资讯浏览252
导读:Ubuntu 上 Node.js 集群部署实战 一 环境准备与 Node.js 安装 更新索引并安装基础工具: sudo apt update && sudo apt install -y curl 使用 NodeS...

Ubuntu 上 Node.js 集群部署实战

一 环境准备与 Node.js 安装

  • 更新索引并安装基础工具:
    • sudo apt update & & sudo apt install -y curl
  • 使用 NodeSource 安装指定版本(示例为 Node.js 24.x):
    • curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
    • sudo apt install -y nodejs
    • 验证:node -v 应返回 v24.x.x
  • 如需 LTS 版本,可将脚本替换为:https://deb.nodesource.com/setup_lts.x
  • 说明:NodeSource 提供多发行版脚本,便于在不同 Ubuntu 版本上获得一致的安装体验。

二 方案一 内置 Cluster 模块实现多进程

  • 适用场景:单机上利用多核 CPU,主进程(Master)管理工作进程(Worker),共享同一端口,Node.js 默认采用内核的轮询式分发,开销低。
  • 最小可用示例 app.js(将端口改为你的业务端口,如 3000):
    • const cluster = require(‘cluster’); const http = require(‘http’); const numCPUs = require(‘os’).cpus().length;

      if (cluster.isPrimary) { console.log(主进程 ${ process.pid} 正在运行); for (let i = 0; i < numCPUs; i++) cluster.fork(); cluster.on(‘exit’, (worker) => { console.log(工作进程 ${ worker.process.pid} 已退出,正在重启...); cluster.fork(); } ); } else { http.createServer((req, res) => { res.writeHead(200); res.end(Hello from worker ${ process.pid} \n); } ).listen(3000); console.log(工作进程 ${ process.pid} 已启动); }

  • 运行与验证:
    • node app.js
    • curl http://localhost:3000(多刷几次可见不同 PID 响应)
    • ps aux | grep node(应看到多个 Node 进程)
  • 提示:生产环境建议增加日志、优雅退出、内存阈值重启等能力。

三 方案二 使用 PM2 一键集群与守护

  • 安装与启动:
    • sudo npm install -g pm2
    • pm2 start app.js -i max(按 CPU 核心数 启动工作进程)
    • 常用:pm2 status、pm2 monit、pm2 logs、pm2 restart
  • 使用配置文件 ecosystem.config.js(推荐):
    • module.exports = { apps: [{ name: ‘my-cluster-app’, script: ‘app.js’, instances: ‘max’, exec_mode: ‘cluster’, autorestart: true, watch: false, max_memory_restart: ‘1G’, env: { NODE_ENV: ‘development’ } , env_production: { NODE_ENV: ‘production’ } } ] } ;
    • 启动:pm2 start ecosystem.config.js --env production
    • 设置开机自启:pm2 startup(按提示完成系统服务注册)
  • 说明:PM2 内置负载均衡、进程守护与日志管理,适合生产快速落地。

四 多实例与反向代理及高可用

  • 单机多实例 + Nginx 反向代理(示例将 4 个实例映射到同一域名/端口):
    • 安装:sudo apt install -y nginx
    • 配置 /etc/nginx/sites-available/default(或 /etc/nginx/nginx.conf 的 http 段内):
      • upstream node_app { server 127.0.0.1:3001; server 127.0.0.1:3002; server 127.0.0.1:3003; server 127.0.0.1:3004; } server { listen 80; server_name your_domain.com; location / { proxy_pass http://node_app; 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; } }
    • 生效:sudo systemctl reload nginx
  • 多机横向扩展与高可用:
    • 将多台 Ubuntu 节点分别运行 Node.js 集群(内置 cluster 或 PM2),在 NginxHAProxy 中配置 upstream 指向各节点,实现跨机器负载均衡与故障转移。
    • 进一步可用 Docker + Kubernetes 编排多实例,结合 Service 做负载均衡与自动恢复。

五 生产要点与常见问题

  • 端口与绑定:服务应监听 0.0.0.0 而非 127.0.0.1,以便外部访问与代理转发。
  • 优雅关闭:监听 SIGTERM,停止接收新请求,完成在途请求后再 exit,避免中断用户会话。
  • 有状态场景:集群下内存会话不共享,使用 Redis 等集中式会话/缓存;WebSocket 需“粘滞会话”或改用 pub/sub 解耦。
  • 健康检查与自恢复:PM2 的 max_memory_restart、定时重启策略与健康检查端点结合使用。
  • 日志与排障:集中日志(如写入文件并配合 logrotate),必要时接入 Prometheus + Grafana 做指标与告警。
  • 安全加固:限制进程权限、启用 Helm/系统服务 最小权限运行、对外仅暴露 80/443,内部端口不直连公网。

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


若转载请注明出处: Ubuntu Nodejs如何集群部署
本文地址: https://pptw.com/jishu/770257.html
ubuntu getconf有哪些应用场景 Ubuntu Nodejs如何备份数据

游客 回复需填写必要信息