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 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实例的初始状态。可以是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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491371.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MybatisPlus-配置加密

配置加密 目前配置文件中的很多参数都是明文,如果开发人员发生流动,很容易导致敏感信息的泄露。所以MybatisPlus支持配置文件的加密和解密功能。 我们以数据库的用户名和密码为例。 生成秘钥 首先,我们利用AES工具生成一个随机秘钥&#…

【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版 (2)11

文章目录 一、算法概念11一、算法原理(一)分类算法基本思路1、训练集和权重初始化2、弱分类器的加权误差3、弱分类器的权重4、Adaboost 分类损失函数5、样本权重更新6、AdaBoost 的强分类器 (二)回归算法基本思路1、最大误差的计算…

前端入门之VUE--ajax、vuex、router,最后的前端总结

前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。本人不是学前端的,这个是大一的时候上学的和做的笔记,那个时候学的也蒙,故这里对前端做一个总…

GB28181系列三:GB28181流媒体服务器ZLMediaKit

我的音视频/流媒体开源项目(github) GB28181系列目录 目录 一、ZLMediaKit介绍 二、 ZLMediaKit安装、运行(Ubuntu) 1、安装 2、运行 3、配置 三、ZLMediaKit使用 一、ZLMediaKit介绍 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架,项目地址&#xf…

人工智能增强的音频和聊天协作服务

论文标题:AI-enabled Audio and Chat Collaboration Services 中文标题:人工智能增强的音频和聊天协作服务 作者信息: Emil P. Andersen, Norwegian Defence Research Establishment (FFI), Kjeller, NorwayJesper R. Goksr, Sindre E. Ha…

构建树莓派温湿度监测系统:从硬件到软件的完整指南

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

企业内训|阅读行业产品运营实战训练营-某运营商数字娱乐公司

近日,TsingtaoAI公司为某运营商旗下数字娱乐公司组织的“阅读行业产品运营实战训练营”在杭州落下帷幕。此次训练营由TsingtaoAI资深互联网产品专家程靖主持。该公司的业务骨干——来自内容、市场、业务、产品与技术等跨部门核心岗位、拥有8-10年实战经验的中坚力量…

vue+node+mysql8.0,详细步骤及报错解决方案

1.下载需要安装的插件 下载express npm install express下载cors,用于处理接口跨域问题 npm install cors下载mysql npm install mysql 2.配置服务器 可以在vue项目的src同级创建server文件夹(这里的位置可随意选择) 然后依次创建&#…

C语言刷题(2)

5. 题目描述 KIKG今年5岁了,已经能够认识100以内的非负整数,并且并目能够 进行 100 以内的非负整数的加法计算,不过,老师发现KIK在进行大于等于100的正整数的计算时,规则如下: 1.只保留该数的最后两位,例…

360智脑张向征:共建可信可控AI生态 应对大模型安全挑战

发布 | 大力财经 人工智能的加速发展,有力推动了社会的数智化转型;与此同时,带来的相关安全风险也日益凸显。近日,在北京市举办的通明湖人工智能开发与应用大会上,360智脑总裁张向征以“大模型安全研究与实践”为主题&…

相机标定中的相机模型

一、相机标定基本原理 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数。在大多数条件下这些参数必须通过实验与计算才能得到&…

【大模型微调学习6】-实战Hugging Face Transformers工具库

【大模型微调学习6】-实战Hugging Face Transformers工具库 实战Hugging Face Transformers工具库1.Hugging Face Transformers 库是什么?2.HF Transformers 核心模块学习:Pipelines(1)如何下载hugging face的数据集和模型权重&am…

【AIGC进阶-ChatGPT提示词副业解析】探索生活的小确幸:在平凡中寻找幸福

引言 在这个快节奏的现代社会中,我们常常被各种压力和焦虑所困扰,忘记了生活中那些细小而珍贵的幸福时刻。本文将探讨如何在日常生活中发现和珍惜那些"小确幸",以及如何通过尝试新事物来丰富我们的生活体验。我们还将讨论保持神秘感和期待感对于维持生活乐趣的重要性…

使用 rvest 包快速抓取网页数据:从入门到精通

介绍 随着大数据和数据科学的迅速发展,互联网数据的抓取已经成为重要的信息获取手段之一。网页抓取(Web Scraping)可以帮助我们自动化地从网页中提取有价值的数据,应用广泛,包括新闻热点分析、金融数据采集等。在本篇…

在 DDD 中优雅的发送 Kafka 消息

前言 1:host 映射 下载 SwitchHost 配置一个映射地址。点击 添加一个本地环境,之后配置你的 IP kafka 这样就能找这个地址了。IP 为你本地的IP,如果是云服务器就是公网IP地址 使用docker-compose.yml进行一键部署安装 version: 3.0 # docker-compose …

c#上班,上学,交通方式接口

using System;namespace INTERFACE {abstract class Person{public string Name { get; set; }public int Age { get; set; }public virtual void ShowInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}}// 接口 IWorkinterface IWork{void GotoCompany();}/…

Halcon 直连相机

一、相机类别 1、大恒示例 DahengCAM 使用大华相机,待补充... 2、大华例程 GigEVision 2.1 关键算子 1、查询指定图像采集接口信息。 info_framegrabber (GigEVision, info_boards, Information, ValueList) 获取结果 unique_name:302fac01cd50_MachineVision_MVA5B57MG20…

RPC 服务与 gRPC 的入门案例

RPC 协议 RPC(Remote Procedure Call Protocol)即远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务的协议,允许一个计算机程序可以像调用本地服务一样调用远程服务 。 RPC的主要作用是不同的服务间方法调用就像本地…

机器学习-正则化技术

文章目录 拟合正则化正则项L1 正则化(Lasso)L2 正则化(Ridge) 多元线性回归的正则化回归形式代码 拟合 过拟合:参数(特征)过多(理解为考虑很多因素)或者说过多专注于原来的训练数据…

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果(网页显示&#…