工做須要,提早熟悉下部署過程,若有錯誤還望指點。node
Dcache使用騰訊Tars框架開發,屬於分佈式的NoSQL存儲系統。數據存儲在內存中,還能夠鏈接後端DB作數據的持久化。python
Linuxmysql
高性能存儲引擎linux
集羣模式c++
經過名字訪問git
高效運維平臺(提供WebUI)github
操做系統web
C++語言框架依賴sql
tars框架運行依賴數據庫
web管理系統依賴
$ yum -y install gcc gcc-c++ cmake yasm glibc-devel flex bison ncurses-devel zlib-devel autoconf python-requests
複製代碼
$ wget "https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.44.tar.gz"
複製代碼
# 建立普通用戶
$ useradd -m -d /home/mysql mysql
# 解壓源碼包
$ tar zxf mysql-5.6.44.tar.gz
# 建立mysql安裝目錄, 並作軟鏈接
$ mkdir /usr/local/mysql-5.6.44
$ ln -s /usr/local/mysql-5.6.44 /usr/local/mysql
# 修改屬主屬組
$ chown mysql:mysql /usr/local/mysql-5.6.44 /usr/local/mysql
# 切換到源碼目錄,編譯安裝
$ cd mysql-5.6.44
$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.44 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
$ make && make install
複製代碼
# 刪除原始數據目錄, 在數據盤建立數據目錄,進行軟連
$ rm -rf /usr/local/mysql/data
$ mkdir -p /data/mysql-data
$ ln -s /data/mysql-data /usr/local/mysql/data
# 修改屬主屬組
$ chown -R mysql:mysql /data/mysql-data /usr/local/mysql/data
# 配置啓動腳本
$ cd /usr/loca/mysql/
$ cp support-files/mysql.server /etc/init.d/mysql
# 初始化數據庫
$ rm -rf /etc/my.cnf
$ yum -y install perl
$ yum install -y perl-Module-Install.noarch
$ perl scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --pid-file=/var/run/mysql/mysql.pid --socket=/tmp/mysql.sock
# 修改配置文件
$ vim /usr/local/mysql/my.cnf
''' [mysqld] # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. innodb_buffer_pool_size = 128M # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. log_bin # These are commonly set, remove the # and set as required. basedir = /usr/local/mysql datadir = /usr/local/mysql/data # port = ..... # server_id = ..... socket = /tmp/mysql.sock bind-address={$your machine ip} # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. join_buffer_size = 128M sort_buffer_size = 2M read_rnd_buffer_size = 2M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES '''
# 啓動服務,設置開機自啓
$ service mysql start
$ chkconfig mysql on
複製代碼
$ echo -e 'PATH=$PATH:/usr/local/mysql/bin\nexport PATH' > /etc/profile.d/mysql_env.sh
$ source /etc/profile
複製代碼
$ mysqladmin -u root password 'root@appinside'
$ mysql -uroot -p
mysql> grant all on *.* to "root"@"%" identified by 'root@appinside' with grant option;
mysql> grant all on *.* to "root"@"localhost" identified by 'root@appinside' with grant option;
mysql> grant all on *.* to "root"@"10.80.137.193" identified by 'root@appinside' with grant option;
mysql> grant all on *.* to "root"@"platformxxxx.cdn.idc.com" identified by 'root@appinside' with grant option;
複製代碼
tars 內部程序經過'root@{主機名}'登陸數據庫,須要受權。主機名能夠經過/etc/hosts查看。
$ vim /etc/ld.so.conf
/usr/local/mysql/lib/
ldconfig
複製代碼
測試環境暫不須要,待正式部署後再作補充。#TODO
# 使用遞歸方式clone
$ git clone https://github.com/TarsCloud/Tars.git --recursive
複製代碼
$ cd Tars/deploy
# 修改數據庫信息
$ vim comm.propertys
host = 10.80.137.139
port = 3306
pwd = root@appinside
# 受權tars用戶權限
mysql> grant all on *.* to 'tars'@'%' identified by 'tars2015' with grant option;
mysql> grant all on *.* to 'tars'@'localhost' identified by 'tars2015' with grant option;
mysql> grant all on *.* to 'tars'@'platformxxxx.cdn.idc.com' identified by 'tars2015' with grant option;
# 執行腳本
$ python deploy.py all
複製代碼
- deploy.py腳本在執行過程當中,會報錯tars用戶的'Access denied', 可是在部署腳本中有tars用戶的受權操做。目前觀察問題現象是受權未執行成功,且沒有報錯,具體緣由未查明,先手動受權預防報錯。
- 該執行腳本不具備冪等性,不能重複執行。若必須從新執行的狀況,須要修改腳本,註釋掉已完成的函數部分,還要根據狀況對應修改腳本。
- 腳本執行完成後,會自啓動web服務,若端口衝突,須要修改/usr/local/app/web/config/webConf.js文件,將port端口號修改。詳細操做能夠見下面的步驟。
## 切換DCache的web分支。
## 目前web管理界面,DCache服務暫時只提供體驗版,須要在部署過程當中手動切換分支(後期能夠考慮修改部署腳本,直接指定tag來clone)。
# 備份文件 config/webConf.js, config/tars.conf
$ cp config/webConf.js ~
$ cp config/tars.conf ~
$ cp package-lock.json ~
# 暫存當前master分支, 切換alpha分支。
$ rm -rf package-lock.json
$ git stash
$ git checkout -b dcache-alpha origin/dcache-alpha
# 恢復文件
$ cp ~/webConf.js config/webConf.js
$ cp ~/tars.conf config/tars.conf
# 端口衝突解決
$ vim config/webConf.js
webConf: {
port: 33000, //服務啓動端口, 默認3000
loggerPath: path.join(__dirname, '../log'), //本地日誌的目錄
logFileKeepDays: '1', //日誌保留時間
defaultLanguage: 'cn', //cn 或 en ,用戶默認的語言環境
},
# 修改dcache配置
$ vim config/dcacheConf.js
module.exports = {
enableDcache: true //啓動dcache界面,默認false
}
# 重新安裝npm依賴包
$ npm install --registry=https://registry.npm.taobao.org
# web啓停
# 啓動web(prd爲腳本名,詳細查看package.json)
$ npm run prd
# 中止全部web
$ pm2 kill
# 使用別名啓停單個web
$ pm2 stop tars-node-web
$ pm2 start tars-node-web
# 命令行啓動界面
┌───────────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬──────┬────────────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├───────────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼──────┼────────────┼──────┼──────────┤
│ tars-node-web │ 0 │ 0.1.0 │ fork │ 29648 │ online │ 0 │ 27h │ 0.5% │ 103.1 MB │ root │ disabled │
└───────────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴──────┴────────────┴──────┴──────────┘
# Web端訪問地址
http://10.80.137.193:33000
# tars核心或普通服務端口占用修改
1. 登陸web端界面
2. 依次點擊 -> 須要修改的服務 -> 服務管理 -> 管理Servants -> 編輯 -> 綁定地址框 -> 修改'-p'後參數 -> 確認
3. 重啓 -> 服務管理 -> 重啓按鈕
複製代碼
登陸和管理權限模塊,測試環境未部署,待補充。#TODO [官方文檔]
[坑] web 管理系統中有一處 BUG,將致使「接口測試」功能老是報錯。
$ sed -i "s/setName ? setName : '')/setName ? setName : '', {})/g" web/app/service/infTest/TarsClient.js
# 啓動基礎服務
$ cd /usr/local/app/tars
$ tarsregistry/util/start.sh
$ tarsAdminRegistry/util/start.sh
$ tarsnode/util/start.sh
$ tarsconfig/util/start.sh
$ tarspatch/util/start.sh
# 中止基礎服務
$ cd /usr/local/app/tars
$ tarsregistry/util/stop.sh
$ tarsAdminRegistry/util/stop.sh
$ tarsnode/util/stop.sh
$ tarsconfig/util/stop.sh
$ tarspatch/util/stop.sh
複製代碼
* * * * * /usr/local/app/tars/tarsnode/util/monitor.sh
複製代碼
主要涉及tarsnode服務的手動安裝,測試環境暫無須要,後續補充。#TODO
Tars框架部分,部署完成。
1. 準備工做
# 克隆DCache項目
$ git clone https://github.com/Tencent/DCache.git
# 下載第三方依賴代碼
$ cd src/thirdParty
$ chmod +x thirdparty.sh
$ ./thirdparty.sh
# 編譯
# [坑]自動部署腳本將tarscpp編譯到framework目錄下,與DCache項目指定的路徑不一致
# 須要在Tars/cpp目錄下重新編譯。(說明DCache是按照tarscpp子項目路徑規則來指定的,沒毛病。)
$ cd Tars/cpp/
$ cmake . && make && make install
# 編譯DCache服務
$ cd src/
$ make release
$ make all
# 分別進入如下目錄,生成發佈包
$ cat dir_list.txt
src/OptServer/
src/ConfigServer/
src/PropertyServer/
src/Router/
src/Proxy/
src/KVCacheServer/
src/MKVCacheServer/
$ cat dir_list.txt |while read line; do cd ${line}; make tar; cd -; done
# 將全部tar包都下載到本地
# 幾種方式(看我的喜愛)
- sz
- wget (python -m SimpleHTTPServer 8080)
- scp
- git
複製代碼
2. 公共服務部署
## 數據庫環境初始化
# 受權帳戶
mysql> grant all on *.* to 'dcache'@'%' identified by 'dcache2019' with grant option;
mysql> grant all on *.* to 'dcache'@'localhost' identified by 'dcache2019' with grant option;
mysql> grant all on *.* to 'dcache'@'platformxxxx.cdn.idc.com' identified by 'dcache2019' with grant option;
mysql> flush privileges;
# 建立數據庫
$ vim src/OptServer/sql/exec-sql.sh
db_install_ip="10.80.137.193"
root="root@appinside"
mysql -h $db_install_ip -uroot -p$root -e "drop database if exists db_dcache_relation; create database db_dcache_relation"
mysql -h $db_install_ip -uroot -p$root --default-character-set=utf8 db_dcache_relation < db_dcache_relation.sql
複製代碼
如下爲服務部署,圖片及說明大部分來源於官方文檔。
1 ) 在Tars管理平臺主頁點擊「運維管理」,而後填寫必要的信息,以下圖:
以上信息除「節點」、「OBJ綁定地址」和「端口號」外,其餘必須和上圖保持一致;
「節點」填寫欲安裝OptServer服務的機器IP,「OBJ綁定地址」和「節點」一致,「端口號」可點擊右下角「獲取端口」按鈕自動獲取。 一路點擊「肯定」,等待服務部署完成,最後回到Tars管理平臺主頁,可看到OptServer已經成功部署,以下圖:
2 ) 上傳發布包
根據上圖數字序號,依次點擊,獲得以下提示框:
點擊「上傳發布包」,在新的提示頁面上傳DCacheOptServer.tgz發佈包,獲得以下頁面:
點擊「發佈版本」下的輸入框,選擇目標發佈包,而後點擊「發佈」,如發佈成功,會顯示以下頁面:
3 ) 添加配置文件
<Main>
# admin registry obj
AdminRegObj = tars.tarsAdminRegistry.AdminRegObj
<DB>
<tars>
charset = utf8
dbname = db_tars
dbhost = 10.80.137.193
dbport = 3306
dbuser = root
dbpass = root@appinside
</tars>
<relation>
charset = utf8
dbname = db_dcache_relation
dbhost = 10.80.137.193
dbport = 3306
dbuser = dcache
dbpass = dcache2019
</relation>
</DB>
# 建立路由數據庫的用戶名和密碼
<CreateRouterDb>
dbuser = router_dcache
dbpass = router_dcache_2019
</CreateRouterDb>
<Release>
# 發佈服務線程數
ThreadCount = 5
</Release>
<Uninstall>
# 通知node下線服務超時時間(秒)
Timeout = 20
# 下線服務備份目錄
BakPath = /data/dcacheuninstall/
# 下線服務線程數
ThreadCount = 2
</Uninstall>
</Main>
複製代碼
根據上圖,依次點擊,獲得下圖:
其中文件名稱填「DCacheOptServer.conf」, 文件內容按照上面格式填寫
4 ) 重啓OptServer
根據上圖,依次點擊,重啓OptServer,重啓成功後,「當前狀態」從「Off」變成「Active」,以下圖所示:
安裝ConfigServer的步驟和安裝OptServer的步驟相似,除了不須要建立數據庫外
添加配置時,能夠參考DCache服務配置說明。
如下爲個人測試配置示例:
### config
#db_dcache_relation的數據庫信息
<Main>
<DB>
dbhost=10.80.137.193
dbpass=dcache2019
dbuser=dcache
dbname=db_dcache_relation
charset=utf8
dbport=3306
</DB>
</Main>
複製代碼
安裝PropertyServer的步驟和安裝OptServer的步驟相似,除了不須要建立數據庫外。 添加配置時,能夠參考DCache服務配置說明。
如下爲個人測試配置示例:
<Main>
<DB>
Sql=CREATE TABLE `${TABLE}` (`stattime` timestamp NOT NULL default CURRENT_TIMESTAMP,`f_date` date NOT NULL default '1970-01-01',`f_tflag` varchar(8) NOT NULL default '',`app_name` varchar(20) default NULL,`module_name` varchar(50) default NULL,`group_name` varchar(100) default NULL,`idc_area` varchar(10) default NULL,`server_status` varchar(10) default NULL,`master_name` varchar(128) NOT NULL default '',`master_ip` varchar(16) default NULL,`set_name` varchar(15) NOT NULL default '',`set_area` varchar(15) NOT NULL default '',`set_id` varchar(15) NOT NULL default '',`value1` varchar(255) default NULL,`value2` varchar(255) default NULL,`value3` varchar(255) default NULL,`value4` varchar(255) default NULL,`value5` varchar(255) default NULL,`value6` varchar(255) default NULL,`value7` varchar(255) default NULL,`value8` varchar(255) default NULL,`value9` varchar(255) default NULL,`value10` varchar(255) default NULL,`value11` varchar(255) default NULL,`value12` varchar(255) default NULL,`value13` varchar(255) default NULL,`value14` varchar(255) default NULL,`value15` varchar(255) default NULL,`value16` varchar(255) default NULL,`value17` varchar(255) default NULL,`value18` varchar(255) default NULL,`value19` varchar(255) default NULL,`value20` varchar(255) default NULL,`value21` varchar(255) default NULL,`value22` varchar(255) default NULL,`value23` varchar(255) default NULL,`value24` varchar(255) default NULL,`value25` varchar(255) default NULL,`value26` varchar(255) default NULL,`value27` varchar(255) default NULL,`value28` varchar(255) default NULL,`value29` varchar(255) default NULL,`value30` varchar(255) default NULL,`value31` varchar(255) default NULL,`value32` varchar(255) default NULL,`value33` varchar(255) default NULL,`value34` varchar(255) default NULL,`value35` varchar(255) default NULL,KEY(`f_date`,`f_tflag`,`master_name`,`master_ip`),KEY `IDX_MASTER_NAME` (`master_name`),KEY `IDX_MASTER_IP` (`master_ip`),KEY `IDX_TIME` (`stattime`),KEY `IDX_F_DATE` (`f_date`))ENGINE\=MyISAM
TbNamePre=t_property_realtime
AppName=dcache_idc5min_147
<property>
dbhost=10.80.137.193
dbname=taf_property_147
dbuser=dcache
dbpass=dcache2019
dbport=3306
charset=gbk
</property>
<relation>
charset=gbk
dbname=db_dcache_relation
dbhost=10.80.137.193
dbpass=dcache2019
dbport=3306
dbuser=dcache
</relation>
</DB>
<HashMap>
InsertInterval=1
</HashMap>
<NameMap>
BakCenterError = property1
BinLogErr = property2
BinLogSyn = property3
CacheError = property4
Chunks/OnceElement = property5
BackUpObjAdapter.connectRate = property6
BackUpObjAdapter.queue = property7
BinLogObjAdapter.connectRate = property8
BinLogObjAdapter.queue = property9
CacheObjAdapter.connectRate = property10
CacheObjAdapter.queue = property11
RouterClientObjAdapter.connectRate = property12
RouterClientObjAdapter.queue = property13
WCacheObjAdapter.connectRate = property14
WCacheObjAdapter.queue = property15
asyncqueue = property16
memsize = property17
DataMemUsedRatio = property18
DbError = property19
DbException = property20
DirtyNum = property21
DirtyRatio = property22
ElementCount = property23
Exception = property24
HitCount = property25
MemSize = property26
getBatchCount = property27
setBatchCount = property28
MKMemUsedRatio = property29
eraseCount = property30
eraseCountUnexpire = property31
asyncqueue0 = property32
Jmem0DataUsedRatio = property33
Jmem1DataUsedRatio = property34
ColdDataRatio = property35
expireCount = property36
OnlyKeyCount = property37
BigChunk = property38
</NameMap>
</Main>
複製代碼
3. DCache管理平臺安裝
# 修改web配置文件(前面已經作過了)
$ cat /usr/local/app/web/config/dcacheConf.js
# 安裝 tars-dcache 模塊
$ cd /usr/local/app/web/
$ npm install tars-dcache --save
# 新建 db_cache_web 數據庫, 並執行 Tars web service 項目sql文件夾下的db_cache_web.sql腳本,建立DCache web所須要的表。
mysql> CREATE DATABASE db_cache_web;
mysql> use db_cache_web;
mysql> source sql/db_cache_web.sql;
# 啓動或者重啓管理平臺便可在管理平臺看到 Dcache 管理平臺的入口。
$ pm2 kill
$ npm run prd
複製代碼
4. 建立DCache應用
DCache建立應用操做
- 上傳發布包
- 上線模塊
- 模塊配置
名詞解釋:
- 模塊:能夠理解爲mysql中table表的概念,須要建立對應模塊來存儲數據。兩種Cache模塊對應功能,上面已有說明再也不贅述。
- 應用:既多個模塊的集合,該應用下的全部模塊共享Proxy和Router服務,能夠理解爲mysql中db的概念。
上傳Proxy,Router,Cache對應的發佈包是部署對應服務的前提。
1 ) Proxy發佈包上傳
依次點擊,而後在彈出的提示框頁面選擇Proxy服務的發佈包,上傳。點擊「默認」,將該發佈包設置爲Proxy服務的默認發佈包,以下圖:
2 ) Router發佈包上傳
Router發佈包的上傳和Proxy發佈包的上傳步驟相同。
3 ) Cache發佈包上傳
Cache發佈包的上傳和Proxy發佈包上傳步驟相似,只不過Cache有兩種不一樣類型(KVCache和MKVCache)的發佈包(本地也需分目錄保存包文件),在「上傳提示框」頁面要注意類型匹配,以下圖:
上傳完兩種不一樣類型的發佈包並分別設置爲默認,獲得下圖:
根據上圖,依次點擊「DCache」和「運維管理」,其中「應用」和「管理員」必填,可自定義,而後點擊「建立應用」,獲得下圖:
在輸入框填寫相關信息,其他保持不變,點擊「建立router、proxy服務」,獲得下圖:
確認填寫無誤後,點擊「安裝發佈」,等待安裝完成,結果以下圖所示(先看個問題,稍後放圖):
[坑] 在建立router、proxy服務環節,數據庫的用戶名和密碼我採用以前建立的user: dcache, pwd: dcache2019 這一套。而後當點擊安裝發佈時,出現如下報錯:
從報錯上來看,是服務訪問數據庫時被denied。這讓我很疑惑,dcache帳戶明明已經作過受權。再仔細一看發現這裏報錯的帳戶是'router_dcache',並非我輸入的用戶名。難道程序作了其餘操做給用戶名加上了router前綴?
帶着疑惑,再在數據庫建立router_dcache用戶並受權,密碼使用與dcache相同的密碼再次執行,結果仍然報錯。
經過排查mysql的general log,服務確實是經過router_dcache這個用戶訪問的,那問題可能就出在,這個用戶使用的密碼也與前面輸入的不一致。
又嘗試了幾回其餘用戶的密碼,結果與前面相同,最後無奈只能先設置數據庫跳過grant驗證,這才執行成功。
這塊問題後面沒有查明,有清楚的朋友能夠幫忙指出(抱拳)。
安裝完成圖以下:
按照上圖箭頭依次點擊,「應用」選擇在部署和發佈Proxy和Router服務建立的應用名稱,「cache類型」選擇KVCache,所填信息確認無誤後,點擊「下一步」進入「模塊配置」步驟,以下圖:
填寫必要信息以後,點擊「下一步」,進入「服務配置」步驟,以下圖:
注意: 共享內存key必須是惟一的,不能在服務部署機器上已存在,不然會形成服務拉起失敗,可以使用ipcs命令確認。(該共享內存key爲十進制數,能夠自定義,不能重複)。備機部署後續補充。#TODO
必要信息填寫完畢,點擊「下一步」進入「安裝發佈」步驟,以下圖:
再次確認信息填寫無誤,點擊「安裝發佈」,等待服務發佈完成。刷新管理平臺主頁,左側目錄樹出現此模塊信息,以下圖:
步驟和部署和發佈KVCache相似,參考便可
按照上圖箭頭依次點擊,可添加配置項。
按照上圖箭頭依次點擊,可在該頁面上修改和添加配置。該頁面的配置管理分兩種類型:針對模塊全部節點的配置管理和針對模塊特定節點的配置管理。
初步接觸以後,比較關心下面兩個問題的後續發展。