各大云厂商目前都有 PAAS 层的负载均衡服务。
目前比较出名的七层负载均衡,如阿里的 Tengine,百度刚刚开源的 BFE(Baidu Front End)。
阿里 Tengine百度 BFE阿里云目前已经全部上了 Tengine,目前百度这边还不清楚,后面应该也会上 BFE。
这篇文章带大家来进行一下七层负载均衡 + Nginx 的动手实践。
虚机安装 Nginx
购买虚机需要注意的点:
- Region 和 可用区 的选择,这个一般选择了就不能更改了,慎重。
- VPC 和 安全组 的配置。一些云厂商不支持更改 VPC,这个也要提前选择好。
- 建议使用密钥登陆,密码登陆是容易被暴力破解的。
购买好之后,SSH 登陆虚机进行 Nginx 的安装。
环境:
CentOS 7.6
Nginx 1.13.7
- 安装相关依赖包
// 编译器gcc、数据压缩库zlib、编译依赖zlib-devel、安全依赖库openssl
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2. 下载并解压安装包
// 进入local目录、用户级的安装程序目录
cd /usr/local
// 下载tar包
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -zxvf nginx-1.13.7.tar.gz
3. 安装 Nginx
//进入nginx解压目录
cd /usr/local/nginx-1.13.7
//执行命令 配置 makefile 文件到 --prefix 目录下
./configure --prefix=/usr/local/nginx
//执行 make 命令,用来编译,它从Makefile中读取指令,然后编译
make
//执行make install命令,用来安装,它也从Makefile中读取指令,安装到指定的位置
make install
4. 配置 Nginx config 文件
vi /usr/local/nginx/conf/nginx.conf
配置监听8080,服务器地址为负载均衡的 EIP。
同时想看一下负载均衡对于 302 的转发情况,需要配置 redirect 目录
302 跳转到 upload 目录
5. 启动 Nginx
/usr/local/nginx/sbin/nginx -s reload
启动的时候有一个报错
Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid" failed(2:No such file or directory)
原因是因为找不到 pid 文件
使用 nginx -c的参数指定 nginx.conf 文件的位置即可解决
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
6. 查看进程
测试负载均衡
head 请求测试
GET 请求传输数据
由于七层负载均衡基于反向代理实现。Transfer-Encoding字段表示Web服务器如何对响应消息体编码,比如Transfer-Encoding: chunked表示Web服务器对响应消息体做了分块传输。
后端服务上进行抓包验证
// 监听8080端口,并且排查健康检查网段。
// 七层ELB使用DR模式,后端服务器的请求IP是ELB的VIP
tcpdump -i eth0 -nnn -ttt 'tcp port 8080 && ! net 100.79.0.0/16'