TiDB 源码编译之 PD/TiDB Dashboard 篇

作者: ShawnYan 原文来源: https://tidb.net/blog/a16b1d46

no-alt

TiDB

TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性,支持在本地和云上部署。

源码仓库

TiDB 数据库本身由众多组件构成,而周边生态也欣欣向荣,所以源码仓库很多,本文主要涉及 PD 和 TiDB Dashboard 两个源码库,目标地址如下:

  • https://github.com/tikv/pd/

PD 是 Placement Driver 的缩写。它管理和调度TiKV集群。PD 被称之为 TiDB 集群的“大脑”。 PD 通过嵌入etcd来支持容错。部署时,建议启动 3 个 PD 进程来构成 PD 集群,保证高可用。

  • https://github.com/pingcap/tidb-dashboard/

TiDB Dashboard 是一个 Web UI,用于监视、诊断和管理 TiDB 集群。可单独编译前后台资源包,也可以打包成二进制文件,一键启动。 关于 TiDB Dashboard 的更多介绍,可以参考官方文档: TiDB Dashboard 介绍

编译依赖

本文的编译使用的系统为 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 编译依赖 go 1.20,所以需要先安装 golang。但是,CentOS 7 默认提供的是 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

所以,需要手动下载二进制包并更新环境变量。

wget https://go.dev/dl/go1.20.6.linux-amd64.tar.gz
tar zxvf go1.20.6.linux-amd64.tar.gz
sudo mv go /optvi ~/.bashrc
export GOl11MODULE=on
export GOROOT=/opt/go
export GOPATH=/home/shawnyan
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

TiDB Dashboard 包含前端 UI,所以依赖会多一些,需要安装 npm、pnpm,如果未安装 pnpm 会遇到报错。

cd ui &&\
pnpm i
/bin/sh: line 1: pnpm: command not found
make: *** [ui_deps] Error 127

这里,从 GitHub 下载 pnpm 二进制包。

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 编译时会直接引用 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  CurrentDload  Upload   Total   Spent    Left  Speed0     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 见面并打包到 PD 中,则需先完成 TiDB Dashboard 的编译。 当然也可以跳过 TiDB Dashboard 的编译,在 PD 编译过程中会自动下载打包好的 Dashboard。 甚至,可以在 PD 编译过程中,使用参数 without_dashboard 来跳过 Dashboard。

PD 编译过程其实蛮顺畅。

git clone https://github.com/shawn0915/pd --depth=1
cd pd
make

稍等一会就可以看到二进制文件了。

[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 源码,这里为了节省时间、空间,只克隆一份最新版本的源码:

git clone https://github.com/shawn0915/tidb-dashboard --depth=1

进入源码文件夹,并执行编译命令 make package ,然后进入漫长的等待。。。

[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 609msWARN  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.0packages/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.2packages/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.2packages/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.2The 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 buildpackages/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 直接编译为二进制文件,所以编译完成后,可以在 bin 目录下看到 tidb-dashboard 二进制包。

[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

此时,可以单独启动面板,只需将其注册到 PD。

./bin/tidb-dashboard --pd x.x.x.x

新启动的面板默认端口为 12333 ,可以通过 URL http://127.0.0.1:12333/dashboard/ 来访问刚刚编译好的面板。

验证测试

为了验证编译效果,本例中对 TiDB Dashboard 做了小小改动,版本号增加了 -ShawnYan 后缀,在【概况】、【监控指标】页面有文档链接,实际产品中指向了 stable 版本,这里修改为 v7.2

no-alt

修改的代码位置为: 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

修改完成后,再次打包。待打包完成后启动 TiDB Dashboard。可以看到如下效果:

no-alt

总结

在 CentOS 7 下就可以进行编译,并不需要高版本的 gcc,体验就很棒,但是还是对机器的性能是有要求的,“老破小”机器上编译就很痛苦。 在写本文过程中,发现 TiDB Dashboard 和 PD 的版本未对齐,于是在 AskTUG 上开了一个帖子 ( 1010558 ),从帖子提出到问题有人对应,产研在源码仓库提出 Issue #1566 仅过去了不到一小时,对应速度可谓飞快。 Surprise! 另发现一处文档选择 dev 版本的小问题,也提了帖子记录一下。( 1010580 ) anyway, TiDB 组件很多,而编译工作是定制化二次开发的一个必要条件,要想一个一个编译过来还需要花点时间和精力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/79327.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决mvn clean install遇到testng单元测试失败时打包也失败的问题

解决mvn clean install遇到testng单元测试失败时打包也失败的问题 看这个之前请先看这个 Jenkins执行Testng 比如我现在就有一个单元测试失败的项目 执行mvn clean install的时候就会报错 下面是我现在的pom.xml 但我们不希望这样&#xff0c;怎么办 <plugin><gr…

PCIe总线详解

一、PCIe简介 PCI Express (peripheral component interconnect express) 简称PCIe&#xff0c;是一种高速、串行、全双工、计算机扩展总线标准&#xff0c;采用高速差分总线&#xff0c;并采用端到端的连接方式&#xff0c;因此在每一条PCIe链路中两端只能各连接一个设备。相对…

线程池的使用案例一

一、配置线程池 1、不推荐的方式 ExecutorService executorService Executors.newFixedThreadPool(); // 创建⼀个固定⼤⼩的线程池&#xff0c;可控制并发的线程数&#xff0c;超出的线程会在队列中等待&#xff1b; ExecutorService executorService Executors.newCache…

一款开源免费、更符合现代用户需求的论坛系统:vanilla

对于个人建站来说&#xff0c;WordPress相信很多读者都知道了。但WordPress很多时候我们还是用来建立自主发布内容的站点为主&#xff0c;适用于个人博客、企业主站等。虽然有的主题可以把WordPress变为论坛&#xff0c;但效果并不是很好。 所以&#xff0c;今天给大家推荐一个…

Mybatis引出的一系列问题-spring多数据源配置

在日常开发中我们都是以单个数据库进行开发&#xff0c;在小型项目中是完全能够满足需求的。但是&#xff0c;当我们牵扯到像淘宝、京东这样的大型项目的时候&#xff0c;单个数据库就难以承受用户的CRUD操作。那么此时&#xff0c;我们就需要使用多个数据源进行读写分离的操作…

考研算法38天:反序输出 【字符串的翻转】

题目 题目收获 很简单的一道题&#xff0c;但是还是有收获的&#xff0c;我发现我连scanf的字符串输入都忘记咋用了。。。。。我一开始写的 #include <iostream> #include <cstring> using namespace std;void deserve(string &str){int n str.size();int…

20230806将ASF格式的视频转换为MP4

20230806将ASF格式的视频转换为MP4 2023/8/6 18:47 缘起&#xff0c;自考中山大学的《计算机网络》&#xff0c;考试《数据库系统原理》的时候找到视频&#xff0c;由于个人的原因&#xff0c;使用字幕更加有学习效率&#xff01; 由于【重型】的PR2023占用资源较多&#xff0c…

通话降噪算法在手机和IOT设备上的应用和挑战

随着电子产品的升级换代&#xff0c;用户对通话质量的要求也越来越高。通话降噪算法对通话质量起到了关键核心的作用。计算资源的提升使得深度学习模型在便携式的低功耗芯片上面跑起来了&#xff0c;器件成本降低让IoT设备开始使用骨导传感器&#xff0c;&#xff0c;那怎么样才…

【秋招】算法岗的八股文之机器学习

目录 机器学习特征工程常见的计算模型总览线性回归模型与逻辑回归模型线性回归模型逻辑回归模型区别 朴素贝叶斯分类器模型 (Naive Bayes)决策树模型随机森林模型支持向量机模型 (Support Vector Machine)K近邻模型神经网络模型卷积神经网络&#xff08;CNN&#xff09;循环神经…

uni-app、H5实现瀑布流效果封装,列可以自定义

文章目录 前言一、效果二、使用代码三、核心代码总结 前言 最近做项目需要实现uni-app、H5实现瀑布流效果封装&#xff0c;网上搜索有很多的例子&#xff0c;但是代码都是不够完整的&#xff0c;下面来封装一个uni-app、H5都能用的代码。在小程序中&#xff0c;一个个item渲染…

网络安全(秋招)如何拿到offer?(含面试题)

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

今天开始学习如何正式调查

本节要讲解三个内容 样本容量 调查方式 调查问卷的回收 在正式调查之前需要确定样本容量 就说要准备调查多少人确定好样本容量之后又要考虑设计的调查问卷 是以什么样的方式发出去 问卷的回收又要注意什么问题 要讲的主要内容 先看样本容量 样本容量确定的基本原…

redis+token+分布式锁确保接口的幂等性

目录 1.幂等性是什么&#xff1f; 2.如何实现幂等性呢&#xff1f; 1.新增管理员&#xff0c;出弹窗的同时&#xff0c;请求后台。 2.后端根据雪花算法生成唯一标识key&#xff0c;以雪花数为key存到redis。并返回key给前端。 3.前端保存后端传过来的key。 4.前端输入完成…

Navicat远程连接Linux的MySQL

打开Linux终端&#xff0c;进入root权限&#xff0c;用vim打开MySQL的配置文件 vim /etc/mysql/mysql.conf.d/mysqld.cnf将bind-address的值改为0.0.0.0 进入MySQL mysql -u root -p 将root用户改为允许远程登录 update user set host % where user root; 创建用户 CRE…

【C++奇遇记】函数探幽(上)

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…

玩转SWAT模型——最全面SWAT模型教程【建模方法、实例应用、高级进阶】

目录 第一部分&#xff1a;SWAT模型实践部分 第二部分&#xff1a;SWAT模型【进阶部分】 更多推荐 【专家】&#xff1a;刘老师【副教授】&#xff0c;北京重点高校资深专家&#xff0c;和美国SWAT软件开发方长期合作&#xff0c;拥有丰富的科研及工程技术经验&#xff0c;长…

node.js安装

下载 https://nodejs.org/en 安装 D:\Program Files\nodejs 配置 D:\Program Files\nodejs 目录下新建 node_cache 和 node_global 在cmd管理员身份运行&#xff1a; npm config set prefix "D:\Program Files\nodejs\node_global" npm config set cache &qu…

Netty 粘包半包

什么是 TCP 粘包半包&#xff1f; 假设客户端分别发送了两个数据包 D1 和 D2 给服务端&#xff0c;由于服务端一次读取到的字节 数是不确定的&#xff0c;故可能存在以下 4 种情况。 &#xff08;1&#xff09;服务端分两次读取到了两个独立的数据包&#xff0c;分别…

手机变电脑2023之虚拟电脑droidvm

手机这么大的内存&#xff0c;装个app来模拟linux&#xff0c;还是没问题的。 app 装好后&#xff0c;手指点几下确定按钮&#xff0c;等几分钟就能把linux桌面环境安装好。 不需要敲指令&#xff0c; 不需要对手机刷机&#xff0c; 不需要特殊权限&#xff0c; 不需要找驱…

怎么快速搭建BI?奥威BI系统做出了表率

搭建BI系统有两大关键&#xff0c;分别是环境搭建和数仓建设。这两点不管是哪一个都相当地费时费力&#xff0c;那要怎么才能快速搭建BI平台&#xff0c;顺利实现全企业数字化运营决策&#xff1f;奥威BI系统方案&#xff0c;你值得拥有&#xff01; 奥威BI系统方案&#xff0…