1. 前置环境准备
操作对象为Ubuntu 22.04系统,所有命令复制后直接执行即可,无需额外调整。
1.1 安装核心依赖工具
依次执行以下命令:
- 更新软件源:sudo apt update -y
- 安装Node.js与NPM:sudo apt install nodejs npm -y
- 安装Nginx:sudo apt install nginx -y
- 安装Docker(用于容器化拓展):curl -fsSL https://get.docker.com | sudo sh
验证安装结果:执行node -v、nginx -v、docker --version,均输出版本号即为成功。
2. 搭建基础业务服务实例
本步骤生成2个独立服务实例,用于后续负载均衡验证。
2.1 编写服务代码
创建目录并初始化项目:
- mkdir -p ~/expand-service && cd ~/expand-service
- npm init -y(自动生成package.json)
- npm install express --save(安装Web框架)
创建完整业务代码文件app.js:
```
const express = require('express');
const app = express();
const port = process.argv[2] || 3000;
// 健康检查接口
app.get('/health', (req, res) => res.status(200).send('ok'));
// 业务数据接口,返回服务实例标识
app.get('/api/data', (req, res) => res.json({service: `instance-${port}`, timestamp: Date.now()}));
app.listen(port, () => console.log(`Service running on port ${port}`));
```
2.2 启动双实例服务
在当前目录执行以下命令,启动2个端口不同的服务:
- node app.js 3001(第一个实例,端口3001)
- 新开终端执行node app.js 3002(第二个实例,端口3002)
验证实例正常:分别执行curl http://localhost:3001/api/data和curl http://localhost:3002/api/data,均返回带对应端口的JSON结果即为成功。
3. 配置Nginx负载均衡实现基础拓展

通过Nginx反向代理将请求分发到不同服务实例,实现水平拓展的核心逻辑。
3.1 编写Nginx负载均衡配置
创建独立配置文件避免修改主配置:
- sudo nano /etc/nginx/conf.d/load_balance.conf(用nano编辑器打开文件)
- 粘贴以下完整配置:
```
http {
upstream backend_servers {
server 127.0.0.1:3001;
server 127.0.0.1:3002;
后续新增实例直接在此添加,无需修改其他配置
}
server {
listen 80;
server_name _;
location /api/ {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /health {
proxy_pass http://backend_servers/health;
}
}
}
```
保存退出nano:按Ctrl+O回车,再按Ctrl+X。
3.2 加载并验证配置
- sudo nginx -t(测试配置是否合法)
- sudo systemctl restart nginx(重启Nginx生效)
验证负载均衡:执行curl http://localhost/api/data,连续多次执行,会交替返回instance-3001和instance-3002的结果,说明分发正常。
4. 容器化拓展(进阶实操)
将服务封装为Docker容器,实现新增实例仅需1条命令,进一步简化拓展流程。
4.1 编写Dockerfile
在~/expand-service目录创建文件Dockerfile,内容如下:
```
FROM node:18-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js", "3000"]
```
4.2 构建镜像并运行容器
- docker build -t expand-service .(构建服务镜像)
- 运行2个容器实例,端口映射到本地3001、3002:
- docker run -d -p 3001:3000 expand-service
- docker run -d -p 3002:3000 expand-service
验证容器状态:执行docker ps,看到2个运行中的容器,端口对应即为成功。此时Nginx配置无需修改,直接通过80端口请求即可实现负载均衡。
5. 核心拓展能力验证
新增第3个服务实例,验证水平拓展的便捷性:
- 运行第三个容器实例:docker run -d -p 3003:3000 expand-service
- 修改Nginx配置:打开
/etc/nginx/conf.d/load_balance.conf,在upstream块新增一行server 127.0.0.1:3003;
- 重新加载Nginx:sudo systemctl reload nginx
拓展验证:连续执行5次curl http://localhost/api/data,结果会出现instance-3001、3002、3003的交替返回,说明新增实例已自动加入负载均衡,水平拓展生效。
6. 实操关键注意事项
- 所有涉及权限的命令必须加sudo,避免执行失败
- Nginx配置修改后必须先执行nginx -t验证,再重启或重载
- Docker容器的主机端口(-p参数后)不能重复,否则会端口冲突
- 若拓展到多服务器,只需在upstream块添加对应服务器的公网IP和端口即可,无需修改服务代码
- 默认负载均衡为轮询策略,高并发场景可根据需求添加ip_hash策略,新手用默认即可