如何在centos上配置nodejs的高可用架构
导读:在 CentOS 上构建 Node.js 高可用架构 一、总体架构与组件 前端入口:使用 Nginx 作为反向代理与负载均衡,将请求分发到多个后端实例,并统一处理 HTTP/HTTPS、压缩、缓存、静态资源。 应用层高可用:每台应用服务器...
在 CentOS 上构建 Node.js 高可用架构
一、总体架构与组件
- 前端入口:使用 Nginx 作为反向代理与负载均衡,将请求分发到多个后端实例,并统一处理 HTTP/HTTPS、压缩、缓存、静态资源。
- 应用层高可用:每台应用服务器启用 多进程集群(Node.js cluster 或 PM2 cluster),充分利用多核,并在进程异常退出时自动重启。
- 进程管理:使用 PM2 进行进程守护、零停机重启、日志聚合与启动自恢复(配合 systemd 或云端自启动脚本)。
- 数据与状态:后端依赖的 数据库/缓存 需具备高可用(如 MySQL 主从复制、MongoDB 副本集),会话等状态尽量外置(如 Redis),避免单点。
- 监控与告警:接入 Prometheus + Grafana 监控进程与系统指标,结合日志系统实现故障定位与容量规划。
- 可选容器化:使用 Docker + Kubernetes 编排多副本与自动扩缩容,进一步简化部署与故障转移。
二、单机多进程与进程管理
- 安装 Node.js LTS(推荐):
- 使用 NodeSource 仓库安装:
- 安装命令:
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash - - 安装包:
sudo yum install -y nodejs - 验证:
node -v、npm -v
- 安装命令:
- 使用 NodeSource 仓库安装:
- 使用 PM2 启动集群:
- 全局安装:
sudo npm install -g pm2 - 启动应用(按 CPU 核数):
pm2 start app.js -i max --name my-app - 常用运维:
pm2 list、pm2 monit、pm2 logs、pm2 restart my-app - 开机自启:
pm2 startup(按提示生成 systemd 服务并pm2 save)
- 全局安装:
- 内置 Cluster 示例(可选):
- 利用 cluster 模块 fork 多个 worker,主进程监听退出事件并重新 fork,提升容错与吞吐。
三、多机横向扩展与负载均衡
- 部署拓扑:准备 ≥2 台应用服务器(每台运行 PM2 集群),前端部署 ≥2 台 Nginx 做入口高可用(可配合 Keepalived 做 VIP)。
- Nginx 负载均衡示例(/etc/nginx/conf.d/myapp.conf):
- 配置片段:
upstream myapp { server 10.0.1.11:3000; server 10.0.1.12:3000; server 10.0.1.13:3000; # 可按需开启:least_conn; 或 ip_hash; } server { listen 80; server_name myapp.example.com; location / { proxy_pass http://myapp; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 60s; } } - 生效:
sudo systemctl enable --now nginx
- 配置片段:
- 健康检查与故障转移:Nginx 默认支持被动健康检查(失败请求会临时摘除节点);如需更强能力,可结合 Nginx Plus 主动健康检查或 HAProxy。
- 数据库高可用:
- MySQL 主从复制:主库开启 binlog,从库设置
server-id与复制账号,建立复制链路,实现读写分离与故障切换基础。 - MongoDB 副本集:部署 3/5/7 节点副本集,自动选举与故障转移。
- MySQL 主从复制:主库开启 binlog,从库设置
四、容器化与 Kubernetes 编排(可选)
- Docker 镜像示例(Dockerfile):
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["node","server.js"]- 构建与运行:
docker build -t myapp:latest .;docker run -p 3000:3000 myapp:latest
- 构建与运行:
- Kubernetes 最小可用清单:
- Deployment(副本数 ≥3,滚动更新策略):
apiVersion: apps/v1 kind: Deployment metadata: name: nodejs-app spec: replicas: 3 selector: matchLabels: app: nodejs strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 template: metadata: labels: app: nodejs spec: containers: - name: app image: myapp:latest ports: - containerPort: 3000 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "500m" memory: "256Mi" --- apiVersion: v1 kind: Service metadata: name: nodejs-svc spec: selector: app: nodejs ports: - protocol: TCP port: 80 targetPort: 3000 type: LoadBalancer - 应用与运维:
kubectl apply -f deployment.yaml;按需配置 HPA 自动扩缩容。
- Deployment(副本数 ≥3,滚动更新策略):
五、监控、日志与运维要点
- 监控与告警:
- 使用 PM2 自带监控:
pm2 monit、pm2 list; - 系统与应用指标接入 Prometheus + Grafana,对 CPU、内存、事件循环延迟、HTTP 5xx、响应时延 设置告警阈值。
- 使用 PM2 自带监控:
- 日志管理:
- PM2 日志聚合:
pm2 logs; - 结构化日志(JSON)与落盘,结合 fluentd/filebeat + Elasticsearch/Kafka 做检索与分析。
- PM2 日志聚合:
- 安全与性能:
- 全站 HTTPS/TLS;启用 防火墙(firewalld) 仅开放 80/443;
- 静态资源走 Nginx 缓存;合理配置 连接超时、keepalive、压缩;
- 依赖与系统定期更新,回滚方案与灰度发布流程就绪。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在centos上配置nodejs的高可用架构
本文地址: https://pptw.com/jishu/776660.html
