在 Linux 上為 Node.js 應用實現負載均衡,可以使用多種方法。以下是幾種常見的方法:
Nginx 是一個高性能的 HTTP 和反向代理服務器,可以用來分發流量到多個 Node.js 實例。
sudo apt update
sudo apt install nginx
編輯 Nginx 配置文件 /etc/nginx/sites-available/default
或創建一個新的配置文件。
http {
upstream node_app {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
}
server {
listen 80;
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 restart nginx
HAProxy 是一個專業的負載均衡器和代理服務器,適用于高可用性和高性能的環境。
sudo apt update
sudo apt install haproxy
編輯 HAProxy 配置文件 /etc/haproxy/haproxy.cfg
。
global
log /dev/log local0
log /dev/log local1 notice
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server node1 127.0.0.1:3000 check
server node2 127.0.0.1:3001 check
server node3 127.0.0.1:3002 check
sudo systemctl restart haproxy
systemd 可以用來管理多個 Node.js 實例,并通過 systemd
的 socket
激活功能來實現負載均衡。
創建一個 systemd 服務文件 /etc/systemd/system/node_app@.service
。
[Unit]
Description=Node.js Application %i
After=network.target
[Service]
ExecStart=/usr/bin/node /path/to/your/app.js
Restart=always
User=your_user
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
創建一個 systemd socket 文件 /etc/systemd/system/node_app.socket
。
[Unit]
Description=Socket for Node.js Application
[Socket]
ListenStream=80
Service=node_app@%i
[Install]
WantedBy=sockets.target
sudo systemctl enable --now node_app.socket
如果你使用 Docker 來部署 Node.js 應用,可以使用 Docker Compose 來管理多個實例,并通過 Docker 的內置負載均衡功能來實現負載均衡。
創建一個 Dockerfile 來構建你的 Node.js 應用鏡像。
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
創建一個 docker-compose.yml
文件來定義多個 Node.js 實例。
version: '3'
services:
node_app:
build: .
ports:
- "3000"
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
docker-compose up -d
通過以上方法,你可以在 Linux 上為 Node.js 應用實現負載均衡。選擇哪種方法取決于你的具體需求和環境。