日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

腾讯 tars java_腾讯 Tars 基础框架手动搭建——填掉官方 Guide 的坑

發布時間:2024/10/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 腾讯 tars java_腾讯 Tars 基础框架手动搭建——填掉官方 Guide 的坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

Tars 簡介

騰訊 Tars 是騰訊內部使用的 TAF(Tencent Application Framework)的對外開源版,去掉了許多冗雜多余的部分。該框架集開發、運維、微服務、RPC 等為一體。對程序員而言,這就是一個能夠快速搭建整個微服務體系的開發框架。這個框架支持基于 C++、Node.js、PHP、Java 等語言開發,最新版本已經支持后臺開發語言新貴——Go。

系列文章

安裝任務

Tars 實際的應用場景是多機器、多節點部署的,不過從實驗驗證的角度,我做的只是在單一一臺機器上,實現 Tars 管理平臺部署,以及任務的發布。由于 Tars 版本一直在迭代,為防止文章過時誤導后來者,本文以 f3ef251013 節點為準,請讀者 follow 最新的 Tars 版本來。官方安裝文檔在這里。

然而,正如很多新的開源項目一樣,代碼很豐滿,文檔很骨感。一步一步跟著官方文檔走的話,是有可能無法一次走通的……本文跟隨文檔的安裝脈絡,進行了重新梳理,為讀者呈現一個盡量不挖坑的搭建過程。

請注意,“Tars” 這個概念,除了其基礎框架之外,還包含開發工具(如 TarsCpp、TarsJava 等等)、協議等等許多內容。不過本文主要講述 Tars 基礎框架,因此下文所提及的 “基礎框架”,如無特別說明,都專指 “Tars 基礎框架”。

本文解決的問題

前文提及,直接 follow 官方文檔,是無法完成服務部署的。因為過程中遇到很多坑,每一個坑都導致基礎框架無法搭建,或者是搭建后無法發布服務。筆者根據文檔搭建過程中遇到的坑有:

部分操作需要 sudo——文檔中有些溫馨地提醒了 sudo,但是另外一些未提醒

數據庫采用 MySQL 5.6 版,但部分說明不適用于 MariaDB

說明文字與配圖不完全一致

不同代碼處的數據庫用戶名和密碼不統一

啟動所需的數據庫表信息有缺失

環境準備

系統準備

部署實驗需要準備至少一臺 Linux 機器。這可以是一臺本地的實體機或虛擬機,也可以是一臺云主機。由于部署過程中,需要編譯 Tars 框架以及 MySQL 代碼(如果系統里沒裝 Oracle 的 MySQL 的話),強烈建議系統至少要求有 4GB 的內存!系統建議采用 CentOS 或 Ubuntu。本文采用 Ubuntu 來安裝,但 CentOS 差別不大,讀者可以參考執行。

此外,筆者不采用 root 賬戶,只有在需要 root 權限的時候才使用 sudo 操作。

像筆者這樣只有 1 核 1GB 云主機的,還需要在本地額外準備一臺 Linux 虛擬機用于編譯,再將編譯出來的目標文件轉移到云主機上。

軟件準備

使用 Ubuntu,基礎框架和 C++ 開發環境需要以下開發組件:

gcc g++(CentOS 則是 gcc-c++) flex bison make cmake perl gcc zlibc gzip git libncurses5-dev

protobuf-c-compiler protobuf-compiler libprotobuf-dev libprotobuf-c-dev libprotoc-dev

libmariadb-client-lgpl-dev mariadb-client mariadb-server

此外,還需要手動安裝的軟件或庫有:

mysql-server node.js(包括 npm)

TarsCloud/TarsFramework TarsCloud/TarsWeb TarsClous/TarsCpp

這些手動安裝的軟件會在后問說明。

MySQL 問題

官方文檔使用的 MySQL 版本是 5.6。但是這有兩個問題:

Oracle 維護的開源 MySQL 已經發展到 5.7 和 8.0 版了,Tars 是否向后兼容?

最新的 CentOS 和 Ubuntu 的軟件包中已移除 MySQL,以 MariaDB 取代,Tars 是否支持?

本人的答案是:

從網上的資料看,基礎框架支持 5.7,但需要修改 cmake 的選項,麻煩點;此外,在交流群中也有反饋 5.7 版有問題,但沒有深入了解。

支持,詳見后文操作。

筆者的方案是:

使用 mariadb 作為數據庫

使用 libmysqlclient.a 作為 TarsCpp 開發環境創建時鏈接的庫(基礎框架編譯時強制鏈接靜態庫)

使用 libmariadb.so 作為實際應用開發時用的庫

備份

安裝之前,強烈建議不熟悉 Tars 基礎框架的讀者先給自己的機器做下備份,比如打個快照或者做個鏡像之類的,這樣如果后面部署失敗了,也便于回滾系統,而不是一個一個抓蟲。

安裝支持軟件

筆者所使用的用戶名是 ubuntu,后文會有一些 shell 命令中采用了這個用戶名,請讀者留意替換成為自己的用戶名。

MySQL

安裝路徑準備

默認下載的 Tars 基礎框架需要鏈接 MySQL 的靜態庫 libmysqlclient.a,此外對庫所在的位置也寫死在了 Makefile 中。因此我們需要為 Tars 基礎框架準備環境。

首先創建供基礎框架鏈接的路徑:

$ sudo mkdir -p /usr/local/mysql

$ sudo chown ubuntu:ubuntu /usr/local/mysql

然后需要尋找一下 mariadb 的動態庫位置和頭文件位置:

$ sudo find / -name 'mariadb_com.h' 2>/dev/null

$ sudo find / -name 'libmariadbclient*' 2>/dev/null

筆者的環境中,兩者分別在 /usr/include/mariadb 和 /usr/lib/x86_64-linux-gnu 下,那么我們就創建兩個軟鏈接:

$ ln -s /usr/include/mariadb /usr/local/mysql/include

$ ln -s /usr/lib/x86_64-linux-gnu /usr/local/mysql/lib

再創建一個目錄給 MySQL 實際安裝用:

$ mkdir /home/ubuntu/mysql-5.6 # /home/ubuntu 是筆者系統的家目錄,讀者請注意替換。以下同理。

編譯安裝

直接從 GitHub 上 clone MySQL 的工程代碼后,選擇合適的版本:

$ mkdir -p ~/github.com/mysql/mysql-server

$ cd ~/github.com/mysql/mysql-server

$ git clone https://github.com/mysql/mysql-server.git ./

$ git checkout -b 5.6 origin/5.6 # 切換到 5.6 版

配置、編譯、安裝:

$ cmake . -DCMAKE_INSTALL_PREFIX=/home/ubuntu/mysql-5.6 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/home/ubuntu/others/boost

$ make && make install

通過之后,我們還需要將 mysql 的靜態庫復制(或者鏈接)到為 Tars 基礎框架準備的目錄下:

$ ln -s /home/ubuntu/mysql-5.6/libmysqlclient.a /usr/local/mysql/lib/

Node.js

Tars 管理平臺是使用 node.js 開發的,因此需要安裝 nvm。對不熟悉 node 的讀者,這里也簡單列下安裝方式(不建議使用 root 賬戶操作):

$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

$ source ~/.bashrc

$ nvm install v8.11.3

$ npm install -g pm2 --registry=https://registry.npm.taobao.org

Tars 基礎框架

首先,要下載 Tars 的基礎框架代碼:

$ mkdir -p /homes/ubuntu/github.com/TarsCloud/TarsFramework

$ cd /homes/ubuntu/github.com/TarsCloud/TarsFramework

$ git clone https://github.com/TarsCloud/TarsFramework.git ./

編譯之:

$ cd build

$ chmod +x build.sh

$ ./build.sh prepare

$ ./build.sh all

如果編譯失敗(一般是缺某些庫或組件),建議在解決問題后,清掉 TarsFramework 下的所有文件,重新 clone 后再編譯。

安裝的過程復雜一點,安裝路徑是固定的(雖然可以在工程文件中調整,為統一起見,不建議修改):

$ sudo mkdir -p /usr/local/tars

$ sudo chown ubuntu:ubuntu /usr/local/tars

$ cd /homes/ubuntu/github.com/TarsCloud/TarsFramework/build

$ ./build.sh install

準備 Tars 數據庫

Tars 使用用戶名 tars、密碼 tars2015 的組合,操作 MySQL 數據庫。高級玩法自然是修改 Tars 中的用戶名/密碼組合。這里為了簡單起見,干脆就直接采用默認的就好了。不過后文會介紹如何使用自定義的用戶名密碼。

筆者做驗證時的 MySQL 與 Tars 部署在同一臺機器上,IP 地址是 172.19.16.13。實際部署中,讀者請注意換成實際地址。

添加相關賬戶的命令如下:

$ mysql -u root -p

進入 mysql 命令行后:

MariaDB [(none)]> grant all privileges on *.* to tars@localhost identified by 'tars2015';

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> exit;

官方文檔說的配置備份什么的,就不用關心了。使用 Tars 的系統基本是部署在云上的,大都會用云服務商提供的自帶主備的數據庫服務(推薦騰訊云 TDSQL 哦,金融級 DB,但是價格和普通 DB 一個等級)。

接下來,我們通過執行 Tars 基礎框架的 sql 腳本來創建相應的數據庫結構:

$ cd /homes/ubuntu/github.com/TarsCloud/TarsFramework/sql/

$ sed -i "s/192.168.2.131/172.19.16.13/g" `grep 192.168.2.131 -rl ./*`

$ sed -i "s/db.tars.com/172.19.16.13/g" `grep db.tars.com -rl ./*`

$ sed -i "s/10.120.129.226/172.19.16.13/g" `grep 10.120.129.226 -rl ./*`

$ chmod +x exec-sql.sh

$ ./exec-sql.sh

其中,172.19.16.13 是筆者的 DB 的 IP 地址,讀者實際部署時請注意修改。

這些命令也給我們一個啟發:數據庫地址允許采用域名。

TIPS-1

如果讀者不使用 tars/tars2015 的用戶名/密碼組合來操作數據庫,那么可以自行修改上述的 sql 腳本:

$ cd /homes/ubuntu/github.com/TarsCloud/TarsFramework/sql/

$ git status .

On branch master

Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:

(use "git add ..." to update what will be committed)

(use "git checkout -- ..." to discard changes in working directory)

modified: db_tars.sql

modified: tarsconfig.sql

modified: tarslog.sql

modified: tarsnotify.sql

modified: tarspatch.sql

modified: tarsproperty.sql

modified: tarsqueryproperty.sql

modified: tarsquerystat.sql

modified: tarsstat.sql

可以看到被 sed 語句修改了的文件。讀者可以在這些文件中找到用戶名和密碼配置項進行修改后,再執行。

TIPS-2

MariaDB server 安裝之后默認監聽 127.0.0.1 地址,但官方文檔明確說明 DB 的 IP 地址不能使用 127.0.0.1。讀者需要修改 MariaDB 的配置文件中監聽地址的選項,否則后續 Tars 基礎框架啟動后,會遇到沒有權限訪問數據庫的錯誤。

部署 Tars 基礎框架

Tars 框架核心服務

Tars 核心基礎框架指的是 tarsAdminRegistry, tarsregistry, tarsnode, tarsconfig, tarspatch 五個。前面我們其實已經編譯好了,我們可以先把這些服務打包:

$ cd /homes/ubuntu/github.com/TarsCloud/TarsFramework/build

$ make framework-tar

這會在 build 目錄下生成 framework.tgz 文件。接下來我們需要做一些操作:

$ sudo mkdir -p /data/log/tars

$ sudo mkdir -p /home/tarsproto

$ sudo mkdir -p /usr/local/app/tars

$ sudo chown -R ubuntu:ubuntu /usr/local/app /data/log/tars /home/tarsproto

$ mv /homes/ubuntu/github.com/TarsCloud/TarsFramework/build/framework.tgz /usr/local/app/tars

$ cd /usr/local/app/tars

$ tar zxvf framework.tgz

這會在 /usr/local/app/tars/ 下面生成前述幾個核心基礎框架組件對應的文件夾。此外,還有 tars_install.sh 和 tarsnode_install.sh 兩個腳本。不過我們得先配置一下——

五個核心基礎框架組件的目錄下均有 conf 文件夾,可以看到各個組件的配置文件,比如 tars.tarsregistry.config.conf。對操作已經很熟悉了的讀者可以手動修改這些配置。不過也可以簡單點地進行以下修改:

$ cd /usr/local/app/tars

$ sed -i "s/192.168.2.131/172.19.16.13/g" `grep 192.168.2.131 -rl ./*`

$ sed -i "s/db.tars.com/172.19.16.13/g" `grep db.tars.com -rl ./*`

$ sed -i "s/registry.tars.com/172.19.16.13/g" `grep registry.tars.com -rl ./*`

$ sed -i "s/web.tars.com/172.19.16.13/g" `grep web.tars.com -rl ./*`

四個 sed 命令修改的地址,對應的是:

本機地址,不能寫 127.0.0.1;

前述數據庫的地址;

tarsregistry 的 部署地址,可以不是本機;

web.tars.com 是 rsync 服務和 web 管理平臺的部署地址。

修改了 IP 地址之后,還需要檢查 tars 訪問數據庫的用戶名和密碼。這里我們最好是手動 vim 去改,因為幾個文件的書寫格式不完全一致:

$ cd /usr/local/app/tars

$ grep dbpass -rl ./*

檢查搜索出來的 conf 文件中的 dbuser 和 dbpass 字段。

最后就是啟動核心框架服務和 rsync(好艱難):

$ cd /usr/local/app/tars

$ chmod +x tars_install.sh

$ ./tars_install.sh

$ sudo ./tarspatch/util/init.sh

$ chmod +x tarsnode_install.sh

$ ./tarsnode_install.sh

然后我們可以在 croncab 中配置核心基礎框架的監控項:

* * * * * /usr/local/app/tars/tarsnode/util/monitor.sh

這樣一來,五個框架核心服務就啟動起來了。

Tars web 管理平臺

Tars web 管理系統在另一個 Git repo 中:

$ mkdir -p /homes/ubuntu/github.com/TarsCloud/TarsWeb

$ cd /homes/ubuntu/github.com/TarsCloud/TarsWeb

$ git clone https://github.com/TarsCloud/TarsWeb.git ./

$ sed -i 's/db.tars.com/172.19.16.13/g' config/webConf.js

$ sed -i 's/registry.tars.com/172.19.16.13/g' config/tars.conf

其中 172.19.16.13 是筆者機器的 IP,讀者請注意

Tars web 是用 node.js 編寫的,不需要編譯。管理平臺默認監聽在 3000 端口上,可在 config/webConf.js 中修改 port 參數的值。

配置了端口之后,就可以啟動 Tars web 管理平臺了:

$ cd /homes/ubuntu/github.com/TarsCloud/TarsWeb

$ npm install --registry=https://registry.npm.taobao.org

$ npm run prd

可以查看 TarsWeb 目錄下的 package.json 文件可以看到更多的信息——畢竟并不是每個人都懂得 node.js 開發。

Tars 框架基礎服務

檢查核心服務狀態

Tars web 管理平臺啟動后,如果按照默認設置的話,平臺會在 3000 端口建立 http 服務。使用瀏覽器訪問,可以看到如下界面:

這三個組件,就是前文所述的 “tars 框架核心服務” ,如果按照前述邏輯部署后,在 web 頁面就可以看到的。可以依次點開這三個服務,確保服務的狀態都如下圖所示:

如果服務的狀態不對,那么可能是前面哪一步操作不恰當。可以查找 log 來定位(log 文件的路徑參見后文)。

部署其他基礎服務

剩下的幾個基礎框架服務就需要進行手動部署。但部署的方法其實還是蠻簡單的,這里挑一個出來細講,其他的類似。

首先,我們需要把其他的基礎框架打包出來:

$ cd /homes/ubuntu/github.com/TarsCloud/TarsFramework/build

$ make tarsstat-tar

$ make tarsnotify-tar

$ make tarsproperty-tar

$ make tarslog-tar

$ make tarsquerystat-tar

$ make tarsqueryproperty-tar

這樣會在 /homes/ubuntu/github.com/TarsCloud/TarsFramework/build 目錄下分別生成上述六個組件的 tgz 文件。

接下來我們以 tarsstat 為例說明部署方法:

創建服務

點擊 web 主頁的 “運維管理” 選項卡,進入服務界面:

各參數按照如下填寫:

應用:填 “tars”

服務名稱:填 “tarsstat”

服務類型:在下拉菜單中選 “tars_cpp”

模板:在下拉菜單中選 “tars.tarsstat”

節點:選擇本機的出口地址,像筆者的情況,就是 172.19.16.13

SET:現階段不用填,這是 tars 的進階功能

OBJ:填 “StatObj”

OBJ 綁定地址 和 端口:可以手動調整,也可以點 “獲取端口” 按鈕自動分配

端口類型:TCP

協議:TARS

其他默認即可。填好后,點 “確定” 即可部署。注意,此時的 “部署”,只是在 tars 內注冊了一個服務(占了個坑),但這個服務還沒有上線提供可用的功能。

發布服務

部署了服務后,需要刷新頁面,這樣就可以看到左邊 tars 的服務列表多了一項:“tarsstat”

現在,我們需要真正地發布這個服務了。

點擊 “tarsstat” 選項卡,可以看到上面有六個功能選項。點擊 “發布管理”,視圖如下:

勾選節點,然后點擊 “發布選中節點”,界面如下:

這個時候點 “發布版本” 的下拉菜單,是沒有內容的。我們需要點 “上傳發布包”,在新打開的窗口,選擇上一步 “創建服務” 時打包的 tarsstat.tgz 文件上傳即可。上傳成功后,我們再在 “發布版本” 下拉菜單中選擇剛剛上傳的包,然后點 “發布”。稍等一會后,我們只要看到 tarsstat 的狀態變成如下,就是發布成功了:

其他各個服務的特殊參數

除了不需要額外配置數據庫之外,接下來的五個服務的配置發布流程基本一致。但也有以下一些不同,讀者在發布剩余服務的時候請注意修改:

各服務的名稱不同,請相應地修改;

各服務的服務類型均為 “tars_cpp”,但是模板不同——每一個服務均有其對應的專用模板,比如 tarsconfig 對應 tars.tarsconfig 模板;

tarsquerystat 和 tarsqueryproperty 的 “協議” 應選 “非TARS”,其他服務為 “TARS”;

各服務對應的 Obj 名稱如下:

tarsnotify: NotifyObj

tarsproperty: PropertyObj

tarslog: LogObj

tarsquerystat: NoTarsObj(非 TARS 協議)

tarsqueryproperty: NoTarsObj(非 TARS 協議)

此外,以下這一步是 tarsstat 特有的步驟:在發布服務之前,需要進入數據庫進行以下操作,防止 tarsstat 啟動失敗:

MariaDB [(none)]> use db_tars;

MariaDB [db_tars]> CREATE TABLE `t_server_notifys` ( `id` int(11) NOT NULL AUTO_INCREMENT, `application` varchar(128) DEFAULT '', `server_name` varchar(128) DEFAULT NULL, `container_name` varchar(128) DEFAULT '' , `node_name` varchar(128) NOT NULL DEFAULT '', `set_name` varchar(16) DEFAULT NULL, `set_area` varchar(16) DEFAULT NULL, `set_group` varchar(16) DEFAULT NULL, `server_id` varchar(100) DEFAULT NULL, `thread_id` varchar(20) DEFAULT NULL, `command` varchar(50) DEFAULT NULL, `result` text, `notifytime` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `index_name` (`server_name`), KEY `servernoticetime_i_1` (`notifytime`), KEY `indx_1_server_id` (`server_id`), KEY `query_index` (`application`,`server_name`,`node_name`,`set_name`,`set_area`,`set_group`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

MariaDB [db_tars]> exit;

所有服務均發布完成并狀態正確之后,Tars 基礎框架就部署完成啦,恭喜你!

日志查詢

如果部署 Tars 框架服務過程中遇到什么錯誤,可以查閱的 log 在以下路徑:

/usr/local/app/TarsWeb/log

/usr/local/app/tars/app_log/tars

關于自動部署

Tars 其實還提供了一套比較簡易的快速部署腳本。那個腳本我沒有嘗試過,但據說也是有一些坑……這里我推薦 maq128 同學 的文章:tars小白安裝必成手冊,分別講述了快速部署、手工部署、docker 部署的內容。另外,如果有問題,讀者也可以加入 Tars 官方交流群,不保證所有問題都能夠精準回答,但是群里不少大神還是給了我不少啟發。群號參見 Tars 官方文檔。

下一步研究

按照官方的建議,Tars 的所有基礎服務都需要至少進行災備部署,但是部署方式如何實現,并沒有明確的說明或者建議。這是筆者后續準備實驗的。

參考資料

總結

以上是生活随笔為你收集整理的腾讯 tars java_腾讯 Tars 基础框架手动搭建——填掉官方 Guide 的坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。