作者: ShawnYan 原文來(lái)源: https://tidb.net/blog/a16b1d46
TiDB
TiDB 是 PingCAP 公司自主設(shè)計(jì)、研發(fā)的開(kāi)源分布式關(guān)系型數(shù)據(jù)庫(kù),是一款同時(shí)支持在線(xiàn)事務(wù)處理與在線(xiàn)分析處理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式數(shù)據(jù)庫(kù)產(chǎn)品,具備水平擴(kuò)容或者縮容、金融級(jí)高可用、實(shí)時(shí) HTAP、云原生的分布式數(shù)據(jù)庫(kù)、兼容 MySQL 5.7 協(xié)議和 MySQL 生態(tài)等重要特性,支持在本地和云上部署。
源碼倉(cāng)庫(kù)
TiDB 數(shù)據(jù)庫(kù)本身由眾多組件構(gòu)成,而周邊生態(tài)也欣欣向榮,所以源碼倉(cāng)庫(kù)很多,本文主要涉及 PD 和 TiDB Dashboard 兩個(gè)源碼庫(kù),目標(biāo)地址如下:
- https://github.com/tikv/pd/
PD 是 Placement Driver 的縮寫(xiě)。它管理和調(diào)度TiKV集群。PD 被稱(chēng)之為 TiDB 集群的“大腦”。 PD 通過(guò)嵌入etcd來(lái)支持容錯(cuò)。部署時(shí),建議啟動(dòng) 3 個(gè) PD 進(jìn)程來(lái)構(gòu)成 PD 集群,保證高可用。
- https://github.com/pingcap/tidb-dashboard/
TiDB Dashboard 是一個(gè) Web UI,用于監(jiān)視、診斷和管理 TiDB 集群??蓡为?dú)編譯前后臺(tái)資源包,也可以打包成二進(jìn)制文件,一鍵啟動(dòng)。 關(guān)于 TiDB Dashboard 的更多介紹,可以參考官方文檔: TiDB Dashboard 介紹
編譯依賴(lài)
本文的編譯使用的系統(tǒng)為 CentOS 7。
[shawnyan@centos7 ~]$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[shawnyan@centos7 ~]$ uname -a
Linux centos7.shawnyan.com 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
[shawnyan@centos7 ~]$ go version
go version go1.20.6 linux/amd64
PD 編譯依賴(lài) go 1.20,所以需要先安裝 golang。但是,CentOS 7 默認(rèn)提供的是 golang 1.19。
[shawnyan@centos7 ~]$ yum info golang
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos, subscription-manager
Loading mirror speeds from cached hostfile
Installed Packages
Name : golang
Arch : x86_64
Version : 1.19.10
Release : 1.el7
Size : 7.4 M
Repo : installed
From repo : epel-7-aliyun
Summary : The Go Programming Language
URL : http://golang.org/
License : BSD and Public Domain
Description : The Go Programming Language.
[shawnyan@centos7 pd]$ go version
go version go1.19.10 linux/amd64
所以,需要手動(dòng)下載二進(jìn)制包并更新環(huán)境變量。
wget https://go.dev/dl/go1.20.6.linux-amd64.tar.gz
tar zxvf go1.20.6.linux-amd64.tar.gz
sudo mv go /opt
vi ~/.bashrc
export GOl11MODULE=on
export GOROOT=/opt/go
export GOPATH=/home/shawnyan
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
TiDB Dashboard 包含前端 UI,所以依賴(lài)會(huì)多一些,需要安裝 npm、pnpm,如果未安裝 pnpm 會(huì)遇到報(bào)錯(cuò)。
cd ui &&\
pnpm i
/bin/sh: line 1: pnpm: command not found
make: *** [ui_deps] Error 127
這里,從 GitHub 下載 pnpm 二進(jìn)制包。
wget https://github.com/pnpm/pnpm/releases/latest/download/pnpm-linuxstatic-x64
sudo mv pnpm-linuxstatic-x64 /bin/pnpm
sudo chmod +x /bin/pnpm
pnpm --version
8.6.11
編譯示例 -- PD
PD 編譯時(shí)會(huì)直接引用 TiDB Dashboard,PD 編譯日志截取如下。
+ Fetch TiDB Dashboard Go module
- TiDB Dashboard directory: /home/shawnyan/pkg/mod/github.com/pingcap/tidb-dashboard@v0.0.0-20230705095454-5e220f970f27
+ Create download cache directory: /home/shawnyan/pd/.dashboard_download_cache
+ Discover TiDB Dashboard release version
- TiDB Dashboard release version: 2023.07.05.1
+ Check whether pre-built assets are available
- Cached archive does not exist
- Download pre-built embedded assets from GitHub release
- Download https://github.com/pingcap/tidb-dashboard/releases/download/v2023.07.05.1/embedded-assets-golang.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 14.7M 100 14.7M 0 0 4029k 0 0:00:03 0:00:03 --:--:-- 7105k
- Save archive to cache: /home/shawnyan/pd/.dashboard_download_cache/embedded-assets-golang-2023.07.05.1.zip
+ Unpack embedded asset from archive
Archive: /home/shawnyan/pd/.dashboard_download_cache/embedded-assets-golang-2023.07.05.1.zip
所以想修改 TiDB Dashboard 的 UI 見(jiàn)面并打包到 PD 中,則需先完成 TiDB Dashboard 的編譯。 當(dāng)然也可以跳過(guò) TiDB Dashboard 的編譯,在 PD 編譯過(guò)程中會(huì)自動(dòng)下載打包好的 Dashboard。 甚至,可以在 PD 編譯過(guò)程中,使用參數(shù) without_dashboard
來(lái)跳過(guò) Dashboard。
PD 編譯過(guò)程其實(shí)蠻順暢。
git clone https://github.com/shawn0915/pd --depth=1
cd pd
make
稍等一會(huì)就可以看到二進(jìn)制文件了。
[shawnyan@centos7 bin]$ ls
pd-ctl pd-recover pd-server
[shawnyan@centos7 bin]$ ./pd-server --version
Release Version: fe52361
Edition: Community
Git Commit Hash: fe52361cf48a7f5ed8c69bcd02db77e25162f207
Git Branch: master
UTC Build Time: 2023-07-31 05:49:54
編譯示例 -- TiDB Dashboard
下載 TiDB Dashboard 源碼,這里為了節(jié)省時(shí)間、空間,只克隆一份最新版本的源碼:
git clone https://github.com/shawn0915/tidb-dashboard --depth=1
進(jìn)入源碼文件夾,并執(zhí)行編譯命令 make package
,然后進(jìn)入漫長(zhǎng)的等待。。。
[shawnyan@centos7 tidb-dashboard-master]$ make package
scripts/install_go_tools.sh
+ Install go tools
go install github.com/swaggo/swag/cmd/swag
go install github.com/vektra/mockery/v2
+ Clean up go mod
cd ui &&\
pnpm i
packages/tidb-dashboard-lib | ?WARN? The field "resolutions" was found in /home/shawnyan/tidb-dashboard-master/ui/packages/tidb-dashboard-lib/package.json. This will not take effect. You should configure "resoluti ons" at the root of the workspace instead.
Scope: all 8 workspace projects
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated opn@6.0.0
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated chokidar@2.1.8
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated fsevents@1.2.13
packages/tidb-dashboard-lib | ?WARN? deprecated @babel/polyfill@7.12.1
packages/tidb-dashboard-lib | ?WARN? deprecated uuid@3.4.0
packages/tidb-dashboard-lib | ?WARN? deprecated querystring@0.2.0
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated core-js@1.2.7
packages/tidb-dashboard-lib | ?WARN? deprecated core-js@2.6.12
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated source-map-resolve@0.5.3
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated source-map-url@0.4.1
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated urix@0.1.0
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated resolve-url@0.2.1
packages/tidb-dashboard-for-op | ?WARN? deprecated source-map-resolve@0.6.0
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated sane@4.1.0
packages/tidb-dashboard-for-clinic-cloud | ?WARN? deprecated w3c-hr-time@1.0.2
packages/tidb-dashboard-lib | ?WARN? deprecated uglify-es@3.3.9
Packages: +2384
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 2408, reused 2387, downloaded 0, added 0
Progress: resolved 2408, reused 2387, downloaded 0, added 0, done
node_modules/.pnpm/esbuild@0.14.49/node_modules/esbuild: Running postinstall script, done in 791ms
node_modules/.pnpm/cypress@8.5.0/node_modules/cypress: Running postinstall script, done in 1m 42.9s
node_modules/.pnpm/es5-ext@0.10.61/node_modules/es5-ext: Running postinstall script, done in 367ms
. prepare$ cd .. && husky install ui/.husky
│ fatal: not a git repository (or any of the parent directories): .git
└─ Done in 609ms
?WARN? Issues with peer dependencies found
.
├─┬ @typescript-eslint/eslint-plugin 4.33.0
│ └── ? unmet peer eslint@"^5.0.0 || ^6.0.0 || ^7.0.0": found 8.20.0
└─┬ @typescript-eslint/parser 4.33.0
└── ? unmet peer eslint@"^5.0.0 || ^6.0.0 || ^7.0.0": found 8.20.0
packages/tidb-dashboard-for-clinic-cloud
├─┬ cypress-image-snapshot 4.0.1
│ └── ? unmet peer cypress@^4.5.0: found 8.5.0
└─┬ @g07cha/flexbox-react 5.0.0
└─┬ styled-components 2.4.1
└── ? unmet peer react@">= 0.14.0 < 17.0.0-0": found 17.0.2
packages/tidb-dashboard-for-op
├─┬ cypress-image-snapshot 4.0.1
│ └── ? unmet peer cypress@^4.5.0: found 8.5.0
└─┬ @g07cha/flexbox-react 5.0.0
└─┬ styled-components 2.4.1
└── ? unmet peer react@">= 0.14.0 < 17.0.0-0": found 17.0.2
packages/tidb-dashboard-lib
├─┬ @g07cha/flexbox-react 5.0.0
│ └─┬ styled-components 2.4.1
│ └── ? unmet peer react@">= 0.14.0 < 17.0.0-0": found 17.0.2
├─┬ react-konva 16.8.6
│ ├── ? unmet peer react@16.8.x: found 17.0.2
│ ├── ? unmet peer react-dom@16.8.x: found 17.0.2
│ └─┬ react-reconciler 0.20.4
│ └── ? unmet peer react@^16.0.0: found 17.0.2
├─┬ react-native 0.70.6
│ └── ? unmet peer react@18.1.0: found 17.0.2
└─┬ @react-three/fiber 8.9.1
├── ? unmet peer react@>=18.0: found 17.0.2
├── ? unmet peer react-dom@>=18.0: found 17.0.2
├─┬ its-fine 1.0.6
│ └── ? unmet peer react@>=18.0: found 17.0.2
└─┬ react-reconciler 0.27.0
└── ? unmet peer react@^18.0.0: found 17.0.2
The integrity of 1189 files was checked. This might have caused installation to take longer.
Done in 6m 53.8s
cd ui &&\
pnpm build
> tidb-dashboard-ui@1.0.0 build /home/shawnyan/tidb-dashboard-master/ui
> pnpm -r build
packages/tidb-dashboard-lib | ?WARN? The field "resolutions" was found in /home/shawnyan/tidb-dashboard-master/ui/packages/tidb-dashboard-lib/package.json. This will not take effect. You should configure "resolutions" at the root of the workspace instead.
Scope: 7 of 8 workspace projects
packages/clinic-client build$ gulp build
[28 lines collapsed]
│ [main] INFO o.o.codegen.TemplateManager - writing file /home/shawnyan/tidb-dashboard-master/ui/packages/clinic-client/src/client/api/.openapi-generator/FILES
│ ################################################################################
│ # Thanks for using OpenAPI Generator. #
│ # Please consider donation to help us maintain this project ?? ##
│ # https://opencollective.com/openapi_generator/donate #
│ ################################################################################
│ [17:37:00] Finished 'swagger:gen' after 45 min
│ [17:37:00] Starting 'tsc:build'...
│ [17:37:14] Finished 'tsc:build' after 14 s
│ [17:37:14] Finished 'build' after 45 min
└─ Done in 45m 36.6s
...
Finally, TiDB Dashboard 編譯完成。這里演示的是直接將 TiDB Dashboard 直接編譯為二進(jìn)制文件,所以編譯完成后,可以在 bin
目錄下看到 tidb-dashboard
二進(jìn)制包。
[shawnyan@centos7 bin]$ ./tidb-dashboard --help
Usage of ./tidb-dashboard:
--cluster-allowed-names string comma-delimited list of acceptable peer certificate SAN identities
--cluster-ca string (TLS between components of the TiDB cluster) path of file that contains list of trusted SSL CAs
--cluster-cert string (TLS between components of the TiDB cluster) path of file that contains X509 certificate in PEM format
--cluster-key string (TLS between components of the TiDB cluster) path of file that contains X509 key in PEM format
--data-dir string path to the Dashboard Server data directory (default "/tmp/dashboard-data")
-d, --debug enable debug logs
--experimental allow experimental features
--feature-version string target TiDB version for standalone mode (default "N/A")
-h, --host string listen host of the Dashboard Server (default "127.0.0.1")
--path-prefix string public URL path prefix for reverse proxies (default "/dashboard")
--pd string PD endpoint address that Dashboard Server connects to (default "http://127.0.0.1:2379")
-p, --port int listen port of the Dashboard Server (default 12333)
--telemetry allow telemetry
--temp-dir string path to the Dashboard Server temporary directory, used to store the searched logs
--tidb-allowed-names string comma-delimited list of acceptable peer certificate SAN identities
--tidb-ca string (TLS for MySQL client) path of file that contains list of trusted SSL CAs
--tidb-cert string (TLS for MySQL client) path of file that contains X509 certificate in PEM format
--tidb-key string (TLS for MySQL client) path of file that contains X509 key in PEM format
-v, --version print version information and exit
pflag: help requested
此時(shí),可以單獨(dú)啟動(dòng)面板,只需將其注冊(cè)到 PD。
./bin/tidb-dashboard --pd x.x.x.x
新啟動(dòng)的面板默認(rèn)端口為 12333
,可以通過(guò) URL http://127.0.0.1:12333/dashboard/ 來(lái)訪問(wèn)剛剛編譯好的面板。
驗(yàn)證測(cè)試
為了驗(yàn)證編譯效果,本例中對(duì) TiDB Dashboard 做了小小改動(dòng),版本號(hào)增加了 -ShawnYan
后綴,在【概況】、【監(jiān)控指標(biāo)】頁(yè)面有文檔鏈接,實(shí)際產(chǎn)品中指向了 stable
版本,這里修改為 v7.2
。
修改的代碼位置為: https://github.com/pingcap/tidb-dashboard/blob/master/ui/packages/tidb-dashboard-for-op/src/apps/Overview/context.ts#L60 https://github.com/pingcap/tidb-dashboard/blob/master/ui/packages/tidb-dashboard-for-op/src/apps/Monitoring/context.ts#L36
修改完成后,再次打包。待打包完成后啟動(dòng) TiDB Dashboard??梢钥吹饺缦滦Ч?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-630058.html
總結(jié)
在 CentOS 7 下就可以進(jìn)行編譯,并不需要高版本的 gcc,體驗(yàn)就很棒,但是還是對(duì)機(jī)器的性能是有要求的,“老破小”機(jī)器上編譯就很痛苦。 在寫(xiě)本文過(guò)程中,發(fā)現(xiàn) TiDB Dashboard 和 PD 的版本未對(duì)齊,于是在 AskTUG 上開(kāi)了一個(gè)帖子 ( 1010558 ),從帖子提出到問(wèn)題有人對(duì)應(yīng),產(chǎn)研在源碼倉(cāng)庫(kù)提出 Issue #1566 僅過(guò)去了不到一小時(shí),對(duì)應(yīng)速度可謂飛快。 Surprise! 另發(fā)現(xiàn)一處文檔選擇 dev 版本的小問(wèn)題,也提了帖子記錄一下。( 1010580 ) anyway, TiDB 組件很多,而編譯工作是定制化二次開(kāi)發(fā)的一個(gè)必要條件,要想一個(gè)一個(gè)編譯過(guò)來(lái)還需要花點(diǎn)時(shí)間和精力。 文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-630058.html
到了這里,關(guān)于TiDB 源碼編譯之 PD/TiDB Dashboard 篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!