Tars 简介
腾讯 Tars 是腾讯内部使用的 TAF(Tencent Application Framework)的对外开源版,去掉了许多冗杂多余的部分。该框架集开发、运维、微服务、RPC 等为一体。对程序员而言,这就是一个能够快速搭建整个微服务体系的开发框架。这个框架支持基于 C++、Node.js、PHP、Java 、最新版本已经支持后台开发语言新贵——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 服务。使用浏览器访问,可以看到管理界面。(首次登陆需要设置管理员密码)
-
笔者这样只有 1 核 2GB 云主机的,编译时会出现卡顿的情况;有时直接卡出ERROR,如果不是编译错误,直接不停的重新编译就好了。
由于内存不足,启动时数据库直接爆了,后面添加了swap区域抢救了回来。 ↩ -
笔者使用的是云主机,使用ifconfig查看的网卡 eth0为内网地址,因此改用了lo网卡(127.0.0.1)曲线救国,从外部公网也可以访问。 ↩
-
注意:
脚本会自动根据传入的MYSQL_USER和MYSQL_PASSWORD来登录数据库,创建TarsAdmin账号和授权Tars相关数据库供框架使用
如果是ubuntu, 需要sudo linux-install.sh …来执行
注意: 执行完毕以后, 可以检查nodejs环境变量是否生效: node –version
安装完成以后, 会在/etc/profile下写入nodejs相关的环境变量
如果没生效, 手动执行: source /etc/profile, 如果是ubuntu请注意权限的问题 ↩