在 CentOS 上构建 Node.js 高可用架构
一、总体架构与组件
二、单机多进程与进程管理
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -sudo yum install -y nodejsnode -v、npm -vsudo npm install -g pm2pm2 start app.js -i max --name my-apppm2 list、pm2 monit、pm2 logs、pm2 restart my-apppm2 startup(按提示生成 systemd 服务并 pm2 save)三、多机横向扩展与负载均衡
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 nginxserver-id 与复制账号,建立复制链路,实现读写分离与故障切换基础。四、容器化与 Kubernetes 编排(可选)
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:latestapiVersion: 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 自动扩缩容。五、监控、日志与运维要点
pm2 monit、pm2 list;pm2 logs;