Tars 簡介
騰訊 Tars 是騰訊內(nèi)部使用的 TAF(Tencent Application Framework)的對外開源版,去掉了許多冗雜多余的部分。該框架集開發(fā)、運維、微服務、RPC 等為一體。對程序員而言,這就是一個能夠快速搭建整個微服務體系的開發(fā)框架。這個框架支持基于 C++、Node.js、PHP、Java 、最新版本已經(jīng)支持后臺開發(fā)語言新貴——Go。
1.安裝
Tars 實際的應用場景是多機器、多節(jié)點部署的,不過從實驗驗證的角度,教程只是在單一一臺機器上,實現(xiàn) Tars 管理平臺部署,以及任務的發(fā)布。由于 Tars 版本一直在迭代,請讀者 follow 最新的 Tars 版本來。官方安裝文檔在這里。我們選擇源碼編譯的方式進行安裝。
環(huán)境準備
系統(tǒng)準備
部署實驗需要準備至少一臺 Linux 機器。這可以是一臺本地的實體機或虛擬機,也可以是一臺云主機。由于部署過程中,需要編譯 Tars 框架以及 MySQL 代碼(如果系統(tǒng)里沒裝 Oracle 的 MySQL 的話),強烈建議系統(tǒng)至少要求有 4GB 的內(nèi)存![1]系統(tǒng)建議采用 CentOS 或 Ubuntu。本文采用 CentOS 來安裝,但 Ubunto 差別不大,讀者可以參考執(zhí)行。
依賴環(huán)境
| 軟件 | 軟件要求 |
|---|---|
| linux內(nèi)核版本: | 2.6.18及以上版本(操作系統(tǒng)依賴) |
| 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管理系統(tǒng)依賴, 腳本安裝過程中自動安裝) |
| node版本: | 12.13.0及以上版本(web管理系統(tǒng)依賴, 腳本安裝過程中自動安裝) |
安全前做好對版本進行檢查,默認安裝版本可能會低于要求版本。
運行服務器要求:安裝linux系統(tǒng)的機器 or mac 機器
1.1. 編譯包依賴下載安裝介紹
源碼編譯過程需要安裝:gcc, glibc, bison, flex, cmake, ncurses-devel zlib-devel
例如,在Centos7下,執(zhí)行:
yum install glibc-devel gcc gcc-c++ bison flex cmake which psmisc ncurses-devel zlib-devel
如果安裝的cmake版本低于3.2 可以選擇cmake3安裝。然后使用創(chuàng)建鏈接:
ln -s /usr/bin/cmake3 /usr/bin/cmake
在ubuntu下執(zhí)行:
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中讀寫數(shù)據(jù), 因此需要安裝mysql, 如果你已經(jīng)存在mysql, 可以忽略該步驟.
安裝mysql請參考mysql安裝
1.3. Mysql client安裝
tars>=2.1.0 可以跳過這一步
注意請保證mysql在PATH環(huán)境變量的目錄下
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++開發(fā)環(huán)境(源碼安裝框架必備)
源碼安裝框架才需要做這一步, 如果只是用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用戶,創(chuàng)建安裝目錄
cd /usr/local
mkdir tars
mkdir app
安裝
cd build
make install
默認的安裝包路徑:/usr/local/tars/cpp, 即編譯完成的框架&安裝腳本在這個目錄 默認的安裝完成后的路徑為/usr/local/app, 即安裝完成后的路徑
install以后, 依賴的庫(mysql靜態(tài)庫)和頭文件也會安裝到該目錄下(/usr/local/tars/cpp/thirdparty), 如果開啟了ssl, nghttp2同理.
開啟了ssl, nghttp2請參見相關(guān)文章
如果你想調(diào)整安裝目錄(建議不要調(diào)整, 需要修改好幾個的地方, 容易出錯):
**需要修改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一鍵部署, 安裝過程中需要網(wǎng)絡(luò)從外部下載資源
- tars-framework>=2.1.0支持mac部署
- 制作成docker鏡像來完成安裝, 制作docker過程需要網(wǎng)絡(luò)下載資源, 但是啟動docker鏡像不需要外網(wǎng)
框架安裝注意事項:
- 安裝過程中, 由于tars-web依賴nodejs, 所以會自動下載nodejs, npm, pm2以及相關(guān)的依賴, 并設(shè)置好環(huán)境變量, 保證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, 執(zhí)行:
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數(shù)據(jù)庫的ip地址
MYSQL_PASSWORD: mysql數(shù)據(jù)庫的MYSQL_USER的密碼(注意密碼不要有太特殊的字符, 例如!, 否則shell腳本識別有問題, 因為是特殊字符)
INET: 網(wǎng)卡的名稱(ifconfig可以看到, 比如eth0), 表示框架綁定的本機IP, 注意不能是127.0.0.1[2]
REBUILD: 是否重建數(shù)據(jù)庫,通常為false, 如果中間裝出錯, 希望重置數(shù)據(jù)庫, 可以設(shè)置為true
SLAVE: 是否是從節(jié)點
MYSQL_USER: mysql用戶, 默認是root
MYSQL_PORT: mysql端口
舉例, 安裝兩臺節(jié)點, 一臺數(shù)據(jù)庫(假設(shè): 主[192.168.7.151], 從[192.168.7.152], mysql:[192.168.7.153])
主節(jié)點上執(zhí)行(192.168.7.151)
chmod a+x linux-install.sh
./linux-install.sh 192.168.7.153 tars2015 eth0 false false root 3306
主節(jié)點執(zhí)行完畢后, 從節(jié)點執(zhí)行:
chmod a+x linux-install.sh
./linux-install.sh 192.168.7.153 tars2015 eth0 false true root 3306
執(zhí)行過程中的錯誤參見屏幕輸出, 如果出錯可以重復執(zhí)行(一般是下載資源出錯)[3]
管理頁面
Tars web 管理平臺啟動后,如果按照默認設(shè)置的話,平臺會在 3000 端口建立 http 服務。使用瀏覽器訪問,可以看到管理界面。(首次登陸需要設(shè)置管理員密碼)

-
筆者這樣只有 1 核 2GB 云主機的,編譯時會出現(xiàn)卡頓的情況;有時直接卡出ERROR,如果不是編譯錯誤,直接不停的重新編譯就好了。
由于內(nèi)存不足,啟動時數(shù)據(jù)庫直接爆了,后面添加了swap區(qū)域搶救了回來。 ? -
筆者使用的是云主機,使用ifconfig查看的網(wǎng)卡 eth0為內(nèi)網(wǎng)地址,因此改用了lo網(wǎng)卡(127.0.0.1)曲線救國,從外部公網(wǎng)也可以訪問。 ?
-
注意:
腳本會自動根據(jù)傳入的MYSQL_USER和MYSQL_PASSWORD來登錄數(shù)據(jù)庫,創(chuàng)建TarsAdmin賬號和授權(quán)Tars相關(guān)數(shù)據(jù)庫供框架使用
如果是ubuntu, 需要sudo linux-install.sh …來執(zhí)行
注意: 執(zhí)行完畢以后, 可以檢查nodejs環(huán)境變量是否生效: node –version
安裝完成以后, 會在/etc/profile下寫入nodejs相關(guān)的環(huán)境變量
如果沒生效, 手動執(zhí)行: source /etc/profile, 如果是ubuntu請注意權(quán)限的問題 ?