本方案将使用Docker容器化多个后端服务实例,并通过Nginx作为反向代理实现负载均衡。这是一种轻量级、易于部署的负载均衡解决方案,适合开发测试环境和小型生产环境。
确保已安装Docker和Docker Compose:
# 检查Docker版本
docker --version
docker-compose --version
load-balancer-demo/
├── docker-compose.yml
├── nginx/
│ ├── nginx.conf
│ └── Dockerfile
└── app/
├── Dockerfile
└── index.html (示例应用)
在app/Dockerfile
中:
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
创建简单的index.html
文件,可以包含不同内容以便区分实例。
在nginx/nginx.conf
中:
upstream backend {
server app1:80;
server app2:80;
server app3:80;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
在nginx/Dockerfile
中:
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
version: '3'
services:
nginx:
build: ./nginx
ports:
- "8080:80"
depends_on:
- app1
- app2
- app3
app1:
build: ./app
hostname: app1
app2:
build: ./app
hostname: app2
app3:
build: ./app
hostname: app3
docker-compose up --build -d
访问http://localhost:8080
,多次刷新页面,可以看到请求被分配到不同的后端实例。
Nginx默认使用轮询(round-robin)算法,可以修改为其他算法:
upstream backend {
least_conn; # 最少连接算法
server app1:80 weight=3; # 加权轮询
server app2:80;
server app3:80;
}
upstream backend {
server app1:80 max_fails=3 fail_timeout=30s;
server app2:80 max_fails=3 fail_timeout=30s;
server app3:80 max_fails=3 fail_timeout=30s;
}
可以随时扩展后端服务数量:
docker-compose up -d --scale app=5
然后在Nginx配置中添加相应的服务器条目。
查看运行中的容器:
docker-compose ps
查看Nginx日志:
docker-compose logs nginx
查看负载均衡状态(需要安装nginx-module-vts):
vhost_traffic_status_zone;
server {
listen 8081;
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
docker-compose down
这个方案提供了一个快速搭建负载均衡环境的方法,适合开发和测试使用。在生产环境中,可能需要考虑更复杂的配置,如SSL终止、会话保持、更精细的健康检查等。