Tengine 搭建手册

简介

官网: 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 添加自定义的模块,这边我们添加了健康检查模块

配置完成后,执行 makemake 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 5
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  # 终止 Keepalived进程
  killall keepalived
  fi
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_7
   script_user root
   enable_script_security
}


vrrp_script chk_nginx {
    script  "/etc/keepalived/check_tengine.sh"
    interval 2
    weight 10
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33# 网络接口
    virtual_router_id 51
    priority 101  # 主节点优先级
    advert_int 1  

    # 认证授权, 防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        192.168.200.10  # 虚拟 IP 地址
    }

    track_script {
      chk_nginx
    }
}

对于第二个 Tengine 节点,将 state 改为 BACKUP 并调整 priority 为较低的值,例如:

global_defs {
   # 路由ID, 当前安装Keepalived节点主机的标识符, 全局唯一
   router_id keep_8
   script_user root
   enable_script_security
}


vrrp_script chk_nginx {
    script  "/etc/keepalived/check_tengine.sh"
    interval 2
    weight 10
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33# 网络接口
    virtual_router_id 51
    priority 100  # 主节点优先级
    advert_int 1  

    # 认证授权, 防止非法节点的进入
    authentication {
        auth_type PASS
        auth_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实例的初始状态。可以是MASTERBACKUPMASTER表示主节点,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isuweijie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值