騰訊 Tars 基礎(chǔ)框架搭建過程

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è)置管理員密碼)


image.png

  1. 筆者這樣只有 1 核 2GB 云主機的,編譯時會出現(xiàn)卡頓的情況;有時直接卡出ERROR,如果不是編譯錯誤,直接不停的重新編譯就好了。
    由于內(nèi)存不足,啟動時數(shù)據(jù)庫直接爆了,后面添加了swap區(qū)域搶救了回來。 ?

  2. 筆者使用的是云主機,使用ifconfig查看的網(wǎng)卡 eth0為內(nèi)網(wǎng)地址,因此改用了lo網(wǎng)卡(127.0.0.1)曲線救國,從外部公網(wǎng)也可以訪問。 ?

  3. 注意:
    腳本會自動根據(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)限的問題 ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容