腾讯 Tars 基础框架搭建过程

Tars 简介

腾讯 Tars 是腾讯内部使用的 TAF(Tencent Application Framework)的对外开源版,去掉了许多冗杂多余的部分。该框架集开发、运维、微服务、RPC 等为一体。对程序员而言,这就是一个能够快速搭建整个微服务体系的开发框架。这个框架支持基于 C++Node.jsPHPJava 、最新版本已经支持后台开发语言新贵——Go

1.安装

Tars 实际的应用场景是多机器、多节点部署的,不过从实验验证的角度,教程只是在单一一台机器上,实现 Tars 管理平台部署,以及任务的发布。由于 Tars 版本一直在迭代,请读者 follow 最新的 Tars 版本来。官方安装文档在这里。我们选择源码编译的方式进行安装。

环境准备

系统准备

部署实验需要准备至少一台 Linux 机器。这可以是一台本地的实体机或虚拟机,也可以是一台云主机。由于部署过程中,需要编译 Tars 框架以及 MySQL 代码(如果系统里没装 Oracle 的 MySQL 的话),强烈建议系统至少要求有 4GB 的内存![1]系统建议采用 CentOS 或 Ubuntu。本文采用 CentOS 来安装,但 Ubunto 差别不大,读者可以参考执行。

依赖环境

软件 软件要求
linux内核版本: 2.6.18及以上版本(操作系统依赖)
gcc版本: 4.8.2及以上版本、glibc-devel(c++语言框架依赖)
bison工具版本: 2.5及以上版本(c++语言框架依赖)
flex工具版本: 2.5及以上版本(c++语言框架依赖)
cmake版本: 3.2及以上版本(c++语言框架依赖)
mysql版本: 4.1.17及以上版本(框架运行依赖)
nvm版本: 0.35.1及以上版本(web管理系统依赖, 脚本安装过程中自动安装)
node版本: 12.13.0及以上版本(web管理系统依赖, 脚本安装过程中自动安装)

安全前做好对版本进行检查,默认安装版本可能会低于要求版本。
运行服务器要求:安装linux系统的机器 or mac 机器

1.1. 编译包依赖下载安装介绍

源码编译过程需要安装:gcc, glibc, bison, flex, cmake, ncurses-devel zlib-devel

例如,在Centos7下,执行:

yum install glibc-devel gcc gcc-c++ bison flex cmake which psmisc ncurses-devel zlib-devel

如果安装的cmake版本低于3.2 可以选择cmake3安装。然后使用创建链接:

ln -s /usr/bin/cmake3 /usr/bin/cmake

在ubuntu下执行:

sudo apt-get install build-essential bison flex cmake psmisc libncurses5-dev zlib1g-dev

在mac安装, 请先安装brew(如何在mac上安装brew, 请自行搜索)

brew install bison flex cmake

1.2. Mysql安装

正式部署时, 如果你的mysql可以安装在其他机器上.也可以使用mariadb。笔者使用的版本为

mysql  Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64) using readline 5.1

Tars框架安装需要在mysql中读写数据, 因此需要安装mysql, 如果你已经存在mysql, 可以忽略该步骤.

安装mysql请参考mysql安装

1.3. Mysql client安装

tars>=2.1.0 可以跳过这一步

注意请保证mysql在PATH环境变量的目录下

which mysql

如果你本机安装了mysql, 那么会自动安装mysql客户端, 这一步可以跳过.

如果你的mysql在其他机器, 那么本机安装Tars框架之前, 需要先安装mysql客户端(安装时需要探测mysql的连通性)

rpm -ivh https://repo.mysql.com/mysql57-community-release-el7.rpm
yum install -y mysql 

2. Tars C++开发环境(源码安装框架必备)

源码安装框架才需要做这一步, 如果只是用c++写服务, 只需要下载tarscpp代码即可

下载TarsFramework源码

git clone https://github.com/TarsCloud/TarsFramework.git --recursive

然后进入build源码目录

cd TarsFramework
git submodule update --remote --recursive
cd build
cmake ..
make -j4

也可以使用脚本一件编译安装

./build.sh all

默认情况下, 编译Tars会自动下载mysql-client源码, 并编译libmyqlclient.a

如果需要重新编译

cd build
make clean
make -j4

切换至root用户,创建安装目录

cd /usr/local
mkdir tars
mkdir app

安装

cd build
make install

默认的安装包路径:/usr/local/tars/cpp, 即编译完成的框架&安装脚本在这个目录 默认的安装完成后的路径为/usr/local/app, 即安装完成后的路径

install以后, 依赖的库(mysql静态库)和头文件也会安装到该目录下(/usr/local/tars/cpp/thirdparty), 如果开启了ssl, nghttp2同理.

开启了ssl, nghttp2请参见相关文章

如果你想调整安装目录(建议不要调整, 需要修改好几个的地方, 容易出错):

**需要修改tarscpp/cmake/Common.cmake文件中的安装路径。**
**需要修改tarscpp/servant/makefile/makefile.tars文件中的TARS_PATH的路径**
**需要修改tarscpp/servant/makefile/tars-tools.cmake文件中的TARS_PATH的路径**
**需要修改tarscpp/servant/script/*.sh文件中的DEMO_PATH的路径**

3.Tars框架安装

3.1. 框架安装模式

框架有两种模式:

  • centos/ubuntu/mac一键部署, 安装过程中需要网络从外部下载资源
  • tars-framework>=2.1.0支持mac部署
  • 制作成docker镜像来完成安装, 制作docker过程需要网络下载资源, 但是启动docker镜像不需要外网

框架安装注意事项:

  • 安装过程中, 由于tars-web依赖nodejs, 所以会自动下载nodejs, npm, pm2以及相关的依赖, 并设置好环境变量, 保证nodejs生效.
  • nodejs的版本目前默认下载的v12.13.0
  • 如果你本机装了低版本nodejs, 最好提前卸载掉

注意:需要完成TarsFramework的编译和安装

下载tarsweb并copy到/usr/local/tars/cpp/deploy目录下(注意目录名是web, 不要搞错!):

git clone https://github.com/TarsCloud/TarsWeb.git
mv TarsWeb web
cp -rf web /usr/local/tars/cpp/deploy/

如果访问github慢,可以使用gitee上的分支

git clone https://gitee.com/juffson/TarsWeb.git

例如, 这是/usr/local/tars/cpp/deploy下的文件:

[user@VM-0-55-centos]:/usr/local/tars/cpp/deploy$ ls -l
总用量 9940
-rw-r--r--  1 root root  443392 6月  18 17:07 busybox.exe
-rw-r--r--  1 root root    1922 6月  18 17:07 centos7_base.repo
-rw-r--r--  1 root root    1396 6月  18 17:07 Dockerfile
-rwxr-xr-x  1 root root    3291 6月  18 17:07 docker-init.sh
-rwxr-xr-x  1 root root     319 6月  18 17:07 docker.sh
drwxr-xr-x  7 root root    4096 6月  18 19:23 framework
-rwxr-xr-x  1 root root    4729 6月  18 17:07 linux-install.sh
-rwxr-xr-x  1 root root 9655568 6月  18 19:09 mysql-tool
-rwxr-xr-x  1 root root     882 6月  18 17:07 tar-server.sh
-rwxr-xr-x  1 root root   17042 6月  18 17:07 tars-install.sh
-rwxr-xr-x  1 root root     320 6月  18 17:07 tars-stop.sh
drwxr-xr-x  2 root root    4096 6月  18 19:23 tools
drwxr-xr-x 12 root root    4096 6月  18 19:28 web
-rwxr-xr-x  1 root root    3534 6月  18 17:07 web-install.sh
-rwxr-xr-x  1 root root    1476 6月  18 17:07 windows-install.sh

3.2 (centos/ubuntu/mac)一键部署

进入/usr/local/tars/cpp/deploy, 执行:

chmod a+x linux-install.sh
./linux-install.sh MYSQL_HOST MYSQL_PASSWORD INET REBUILD(false[default]/true) SLAVE(false[default]/true) 

MYSQL_USER MYSQL_PORT
MYSQL_HOST: mysql数据库的ip地址
MYSQL_PASSWORD: mysql数据库的MYSQL_USER的密码(注意密码不要有太特殊的字符, 例如!, 否则shell脚本识别有问题, 因为是特殊字符)
INET: 网卡的名称(ifconfig可以看到, 比如eth0), 表示框架绑定的本机IP, 注意不能是127.0.0.1[2]
REBUILD: 是否重建数据库,通常为false, 如果中间装出错, 希望重置数据库, 可以设置为true
SLAVE: 是否是从节点
MYSQL_USER: mysql用户, 默认是root
MYSQL_PORT: mysql端口

举例, 安装两台节点, 一台数据库(假设: 主[192.168.7.151], 从[192.168.7.152], mysql:[192.168.7.153])
主节点上执行(192.168.7.151)

chmod a+x linux-install.sh
./linux-install.sh 192.168.7.153 tars2015 eth0 false false root 3306

主节点执行完毕后, 从节点执行:

chmod a+x linux-install.sh
./linux-install.sh 192.168.7.153 tars2015 eth0 false true root 3306

执行过程中的错误参见屏幕输出, 如果出错可以重复执行(一般是下载资源出错)[3]

管理页面

Tars web 管理平台启动后,如果按照默认设置的话,平台会在 3000 端口建立 http 服务。使用浏览器访问,可以看到管理界面。(首次登陆需要设置管理员密码)


image.png

  1. 笔者这样只有 1 核 2GB 云主机的,编译时会出现卡顿的情况;有时直接卡出ERROR,如果不是编译错误,直接不停的重新编译就好了。
    由于内存不足,启动时数据库直接爆了,后面添加了swap区域抢救了回来。

  2. 笔者使用的是云主机,使用ifconfig查看的网卡 eth0为内网地址,因此改用了lo网卡(127.0.0.1)曲线救国,从外部公网也可以访问。

  3. 注意:
    脚本会自动根据传入的MYSQL_USER和MYSQL_PASSWORD来登录数据库,创建TarsAdmin账号和授权Tars相关数据库供框架使用
    如果是ubuntu, 需要sudo linux-install.sh …来执行
    注意: 执行完毕以后, 可以检查nodejs环境变量是否生效: node –version
    安装完成以后, 会在/etc/profile下写入nodejs相关的环境变量
    如果没生效, 手动执行: source /etc/profile, 如果是ubuntu请注意权限的问题

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350