Tengine与OpenResty均为nginx的二次开发版本,主要核心区别如下:
| 特性 | Tengine | OpenResty | Nginx |
|---|---|---|---|
| 负载均衡 | 增强型算法,动态上游,主动健康检查 | 依赖第三方模块或 Lua 脚本实现 | 基础算法,需额外配置 |
| 动态编程 | 支持 Lua 模块 | 深度集成 LuaJIT,原生支持 | 需额外编译 Lua 模块 |
| 模块生态 | 内置大量实用模块 | 丰富的 Lua 库生态 | 庞大的第三方 C 模块生态 |
| 运维特性 | 动态模块,热补丁,完善监控 | 热重载,动态配置 | 基础配置,需手动调整 |
| 适用场景 | 超大规模网站,高并发流量 | API 网关,边缘计算,复杂业务逻辑 | 通用 Web 服务器,反向代理 |
一、Tengine的使用
1.Tengine 源码安装
(1)前置环境准备
bash
# 安装编译工具和依赖库
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel wget
(2)下载并解压 Tengine 源码
bash
# 下载源码包
wget https://tengine.taobao.org/download/tengine-2.4.0.tar.gz
# 解压
tar -zxvf tengine-2.4.0.tar.gz
cd tengine-2.4.0
(3)配置编译参数
bash
./configure \
--prefix=/usr/local/tengine \ # Tengine安装根目录(核心,后续所有文件都在这)
--with-http_gzip_static_module \ # 预压缩静态资源,Tengine直接返回压缩包,减少CPU消耗
--with-http_sub_module \ # 支持请求/响应头替换(如修改后端返回的URL、状态码)
--with-http_stub_status_module \ # 开启Tengine基础状态监控(连接数、请求数、活跃进程)
--with-http_ssl_module \ # 开启HTTPS/SSL,支持443端口负载均衡(生产环境强制)
--with-stream \ # 开启四层负载均衡(TCP/UDP,如转发MySQL/Redis/端口)
--with-stream_ssl_module \ # 四层负载均衡的SSL支持(如MySQL SSL、Redis SSL)
# 编译并安装(-j后接CPU核心数,加速编译)
make -j4 && make install
(4)配置系统服务(开机自启)
bash
cat > /usr/lib/systemd/system/tengine.service << EOF
[Unit]
Description=Tengine Web Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/tengine/logs/nginx.pid # PID文件路径,和安装目录对应
ExecStart=/usr/local/tengine/sbin/nginx # 启动命令
ExecReload=/usr/local/tengine/sbin/nginx -s reload # 重载配置
ExecStop=/usr/local/tengine/sbin/nginx -s quit # 优雅停止
PrivateTmp=true
User=root # master进程建议用root运行(绑定80/443端口需要root)
Group=root
[Install]
WantedBy=multi-user.target
EOF
# 重载服务配置,设置开机自启
systemctl daemon-reload
systemctl enable tengine --now
# 验证安装
/usr/local/tengine/sbin/nginx -v
# 输出:Tengine version: Tengine/2.4.0 (nginx/1.22.1) 即为成功
2.Tengine 负载均衡核心配置
Tengine 相比原生 Nginx,新增了主动健康检查、动态上游、VNSWRR 算法等核心能力,以下是最常用的 3 种负载均衡配置示例:
(1)基础配置:加权轮询 + 主动健康检查
编辑 Tengine 主配置文件/usr/local/tengine/conf/nginx.conf:
bash
# 全局块:自动匹配CPU核心数,充分利用多核性能
worker_processes auto;
# 错误日志:排查问题用,info级别足够,路径为Tengine安装目录下的logs
error_log logs/error.log info;
# events块:Linux高并发必配配置,强制必开
events {
use epoll; # Linux专属高性能I/O模型,大幅提升并发处理能力
worker_connections 1024; # 单个工作进程最大并发连接数,基础场景足够
multi_accept on; # 允许单进程同时接受多个新连接,减少连接延迟
}
# http全局配置块:所有HTTP相关配置都在此处
http {
include mime.types; # 引入MIME类型映射,让Tengine识别文件类型(如js/png)
default_type application/octet-stream; # 未知文件类型默认按下载处理
sendfile on; # 开启零拷贝技术,提升静态资源处理性能,减少CPU开销
keepalive_timeout 65; # 客户端与Tengine的TCP长连接保持时间,60-120秒为宜
server_tokens off; # 隐藏Tengine版本号,防止黑客针对性攻击,生产必开
# 反向代理缓冲优化:避免慢客户端(低网速)拖慢后端服务器,生产必配
proxy_buffering on;
proxy_buffer_size 4k; # 单个连接的响应头缓冲大小,匹配系统内存页
proxy_buffers 8 4k; # 响应体缓冲池,总大小32k,基础场景足够
proxy_busy_buffers_size 8k;# 缓冲池满时的繁忙缓冲上限,一般为buffer_size的2倍
# 负载均衡服务器池:定义后端所有业务服务器,名称与proxy_pass一致
upstream my_backend {
server 192.168.10.172:8080; # 后端服务器1:8080端口服务
server 192.168.10.181:8080; # 后端服务器2:8080端口服务
# 健康检查说明:3秒检测1次,连续2次成功则可用,连续3次失败则自动剔除
keepalive 32; # Tengine与后端的长连接数,减少TCP握手开销,20-50为宜
}
# 虚拟主机:监听80端口,绑定Tengine服务器IP,处理前端所有请求
server {
listen 80;
server_name 192.168.10.171; # 你的Tengine服务器IP,可加域名(如www.xxx.com)
# 所有前端请求:反向代理到后端服务器池,核心转发逻辑
location / {
proxy_pass http://my_backend; # 转发到定义的服务器池,名称必须完全一致
# 反向代理请求头:让后端服务器能获取客户端真实IP/请求协议,生产必配
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # 客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 多层代理时的真实IP
proxy_set_header X-Forwarded-Proto $scheme; # 请求协议(http/https)
# 代理超时配置:避免后端无响应导致Tengine连接泄漏,生产必配
proxy_connect_timeout 30s; # Tengine与后端建立连接的超时时间
proxy_send_timeout 30s; # Tengine向后端发送请求数据的超时时间
proxy_read_timeout 30s; # Tengine从后端读取响应数据的超时时间
}
}
}
(2)进阶配置:一致性哈希(会话保持)
若需要会话粘滞(同一用户请求固定到同一后端节点),修改upstream块:
bash
upstream backend_servers {
# 一致性哈希算法(基于客户端IP)
ip_hash; # 简单版:基于IP哈希
# 或Tengine增强版:一致性哈希(支持动态节点)
# consistent_hash $remote_addr;
server 192.168.1.100:80 weight=5;
server 192.168.1.101:80 weight=3;
server 192.168.1.102:80 backup;
# 保留健康检查配置
check interval=3000 rise=2 fall=3 timeout=2000 type=http;
}
(3)动态上游配置(无需重启 Tengine)
Tengine 支持动态修改上游节点(增删后端服务器),无需重启服务:
bash
# 1. 开启动态上游模块(编译时已开启,配置文件中添加)
# 在http块中添加:
dynamic_upstream_module;
# 2. 通过命令动态添加节点
/usr/local/tengine/sbin/nginx -s reload -c /usr/local/tengine/conf/nginx.conf \
--add-upstream=backend_servers --server=192.168.1.103:80 --weight=4
# 3. 动态删除节点
/usr/local/tengine/sbin/nginx -s reload -c /usr/local/tengine/conf/nginx.conf \
--del-upstream=backend_servers --server=192.168.1.102:80
(4)配置生效与验证
bash
# 检查配置语法
/usr/local/tengine/sbin/nginx -t
# 重载配置(无停机)
systemctl reload tengine
# 验证负载均衡状态
curl http://127.0.0.1/tengine_status
# 输出会包含:活跃连接数、后端节点健康状态、请求分发统计等
关键配置说明:
- 主动健康检查 :
check指令是 Tengine 核心优势,相比 Nginx 原生的被动健康检查(仅检测连接失败),能主动发送请求验证后端服务可用性,避免将请求转发到 "假活" 节点。- VNSWRR 算法:Tengine 优化的加权轮询算法,在后端节点数超过 100 个时,CPU 消耗比原生 Nginx 的 WRR 算法低 30% 以上,适合大规模集群。
- 动态上游:无需重启 Tengine 即可增删后端节点,是运维大规模集群的核心便利特性,原生 Nginx 需修改配置并 reload(虽无停机,但仍有配置解析开销)。