简介
官网: tengine.taobao.org/
Tengine是由[淘宝](http://en.wikipedia.org/wiki/Taobao)发起的Web服务器项目。它在[Nginx](https://nginx.org/)的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如[淘宝](https://www.taobao.com/),[天猫](https://www.tmall.com/),[优酷](https://www.youku.tv/),[全球速卖通](https://www.aliexpress.com/),[Lazada](https://www.lazada.com/),[阿里云](https://www.aliyun.com/)等得到了很好的检验。Tengine将向通用API网关方向持续演进和发展,在HTTP应用流量入口网关的基础上,逐步支持4/7层TLS,TCP,UDP和GRPC多协议路由能力,适配不同终端和不同应用,打造全场景通用网关,持续保持Tengine业界领先地位。简单来说就是基于Nginx二次开发的一个web服务器。
安装包下载地址 https://tengine.taobao.org/download/tengine-3.1.0.tar.gz
单节点部署
1、安装依赖包
首先,安装构建 Tengine 所需要的依赖包。你需要确保系统已经安装了以下工具和库:
sudo yum install -y gcc make pcre-devel zlib-devel openssl-devel
2、下载安装包
这边可以直接上传下载好的压缩包,或者直接使用 wget 命令
创建临时工作目录
mkdir /opt/temp && cd /opt/temp
wget https://tengine.taobao.org/download/tengine-3.1.0.tar.gz
解压
tar -zxvf tengine-3.1.0.tar.gz
cd tengine-3.1.0/
3、配置和编译
在配置跟编译之前我们先下载一下健康检测的源代码。启用这个功能。这个功能主要在搭建集群的时候会用到。
创建存放源码的目录
mkdir /opt/temp/check
到官网下载源码或者直接用我提供的阿里云盘
官网下载地址: GitHub - alibaba/tengine: A distribution of Nginx with some advanced features
阿里云盘: 阿里云盘分享
下载完之后,把下载的源码上传到这个 /opt/temp/check 文件夹下面
然后进入 Tengine 源码目录后,使用 ./configure
命令来配置编译选项。可以根据需要修改选项。一般来说,可以采用以下配置命令:
./configure --prefix=/opt/tengine --with-http_ssl_module --with-pcre-jit --add-module=/opt/temp/check
--prefix=/opt/tengine
指定 Tengine 安装目录。--with-http_ssl_module
启用 SSL 支持。--with-pcre-jit
启用 PCRE JIT。--add-module
添加自定义的模块,这边我们添加了健康检查模块
配置完成后,执行 make
和 make install
来编译和安装。
make -j$(nproc) # 使用所有可用的 CPU 核心来加速编译
sudo make install
4、启动Tengine
安装完成后,Tengine 默认的配置文件位于 /opt/tengine/conf/nginx.conf
,你可以修改此配置文件以满足你的需求。
sudo /opt/tengine/sbin/nginx
5、验证
在浏览器中输入服务器的 IP 地址(如果是本地服务器,使用 http://localhost
),应该能够看到 Tengine 的欢迎页面,表示安装成功。
6、配置开机启动
vim /etc/systemd/system/tengine.service
添加以下内容
[Unit]
Description=Tengine
After=network.target[Service]
ExecStart=/opt/tengine/sbin/nginx
ExecReload=/opt/tengine/sbin/nginx -s reload
ExecStop=/opt/tengine/sbin/nginx -s stop
PIDFile=/opt/tengine/logs/nginx.pid
Restart=always[Install]
WantedBy=multi-user.target
执行以下命令
sudo systemctl daemon-reload
sudo systemctl start tengine
sudo systemctl enable tengine
这样,Tengine 就会在系统启动时自动启动。
7、检查Tengine状态
sudo systemctl status tengine
这样子单节点部署就ok了。
集群部署
1、准备多个 Tengine节点
先根据单节点部署的方式在每个服务器上安装好tegine。
配置 Tengine 节点为负载均衡服务器
/opt/tengine/conf/nginx.conf的内容如下
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";#pid logs/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;#access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;include all.conf/*.conf;
}
在这里,backend
代表了多个应用服务器的 IP 或域名。你可以根据需要设置更多的选项(如健康检查、负载均衡算法等)。
新建all.conf目录
mkdir -p /opt/tengine/conf/all.conf
vim /opt/tengine/conf/all.conf/init.conf
init.conf配置内容如下
upstream backend {server 192.168.200.7:8080 weight=1;server 192.168.200.8:8080 weight=1;# 启用健康检查check interval=3000 rise=2 fall=5 timeout=1000 type=http;check_http_send "HEAD / HTTP/1.0\r\n\r\n";check_http_expect_alive http_2xx http_3xx;
}server {listen 8080;#charset koi8-r;# 静态文件的目录location / {root /opt/tengine/html;index index.html index.htm;}
}server {listen 80;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}x
2、配置高可用(HA)
安装Keepalived
在每台Tengine负载均衡器上安装 keepalived
sudo yum install -y keepalived
配置keepalived
新建健康检测脚本
mkdir /etc/keepalived
vim /etc/keepalived/check_tengine.sh
内容如下:
#!/bin/bash# 用于检测Nginx进程
A=`ps -C nginx --no-header |wc -l`
# 判断Nginx是否宕机, 如果宕机, 尝试重启
if [ $A -eq 0 ];then# 启动Nginx 为了防止pid问题, 指定配置文件/opt/tengine/sbin/nginx# 等待一会再次检查Nginx, 如果没有启动成功, 则停止Keepalived, 使其启动备用机sleep 5if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then# 终止 Keepalived进程killall keepalivedfi
fi
给脚本执行权限
chmod 755 /etc/keepalived/check_tengine.sh
在每个 Tengine 节点的 /etc/keepalived/keepalived.conf
文件中配置:
vim /etc/keepalived/keepalived.conf
global_defs {# 路由ID, 当前安装Keepalived节点主机的标识符, 全局唯一router_id keep_7script_user rootenable_script_security
}vrrp_script chk_nginx {script "/etc/keepalived/check_tengine.sh"interval 2weight 10
}vrrp_instance VI_1 {state MASTERinterface ens33# 网络接口virtual_router_id 51priority 101 # 主节点优先级advert_int 1 # 认证授权, 防止非法节点的进入authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.200.10 # 虚拟 IP 地址}track_script {chk_nginx}
}
对于第二个 Tengine 节点,将 state
改为 BACKUP
并调整 priority
为较低的值,例如:
global_defs {# 路由ID, 当前安装Keepalived节点主机的标识符, 全局唯一router_id keep_8script_user rootenable_script_security
}vrrp_script chk_nginx {script "/etc/keepalived/check_tengine.sh"interval 2weight 10
}vrrp_instance VI_2 {state BACKUPinterface ens33# 网络接口virtual_router_id 51priority 100 # 主节点优先级advert_int 1 # 认证授权, 防止非法节点的进入authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.200.10 # 虚拟 IP 地址}track_script {chk_nginx}
}
1. global_defs { ... }
- 作用:全局配置定义,影响到整个Keepalived配置的行为。
-
router_id
:标识当前节点的唯一ID,通常用于VRRP协议中的路由器标识。script_user
:指定执行脚本的用户,通常为root或其他特权用户。enable_script_security
:启用脚本安全性检查,限制脚本的权限。
2. vrrp_script { ... }
- 作用:定义一个脚本,用于健康检查和判定虚拟路由器的状态。
-
script
:指定一个脚本路径,通常是检查某个服务是否正常运行,例如Web服务器或数据库服务。interval
:指定脚本执行的时间间隔,以秒为单位。weight
:根据健康检查的结果,动态调整虚拟路由器优先级。比如,如果脚本检查失败,减少优先级。
3. vrrp_instance { ... }
- 作用:定义一个VRRP(Virtual Router Redundancy Protocol)实例,这是Keepalived的核心部分,用于设置虚拟路由器的行为和状态。
-
state
:设置VRRP实例的初始状态。可以是MASTER
或BACKUP
。MASTER
表示主节点,BACKUP
表示备份节点。interface
:指定参与VRRP协议的网络接口,例如eth0或ens33。virtual_router_id
:虚拟路由器的ID,确保同一虚拟路由器具有唯一标识符。priority
:优先级,决定主备节点的切换顺序。主节点的优先级较高,备节点的优先级较低。advert_int
:通告间隔,决定虚拟路由器状态通告的时间间隔,单位为秒。
4. authentication { ... }
- 作用:用于配置VRRP协议的认证机制,防止非授权节点加入虚拟路由器组。
-
auth_type
:认证方式,可以是PASS
(简单密码)或其他类型。auth_pass
:认证密码,确保只有知道密码的节点才能加入虚拟路由器组。
5. virtual_ipaddress { ... }
- 作用:指定虚拟路由器所拥有的虚拟IP地址。当主节点宕机时,虚拟IP将自动切换到备份节点上。
-
- 该IP地址对外是可访问的,不论哪个节点处于主状态,虚拟IP都保持不变。
6. track_script { ... }
- 作用:关联一个脚本,用于监控某个服务的健康状况。
-
chk_nginx
:这是上面定义的健康检查脚本,如果该脚本检测失败,将影响VRRP的优先级,可能导致主备节点的切换。
启动Keepalived
systemctl enable keepalived
systemctl start keepalived