Ubuntu Nodejs如何集群部署
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),在 Nginx 或 HAProxy 中配置 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
