loadlj / blog

19 stars 6 forks source link

TiDB HomeWork-1 #35

Open loadlj opened 4 years ago

loadlj commented 4 years ago

TiDB HomeWork-1

目标

下载编译 TiDB/PD/TiKV 并修改源代码,使得事物启动时输出hello transaction的日志。 本机器环境MBP:

CPU: Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz
内存: 16 GB 2400 MHz DDR4

步骤

Clone 项目到本地

修改代码

tidb 目录下全文search transaction 相关的内容,在tidb/store/tikv/txn里面可以找到startTS 函数,对其进行修改即可。

func (txn *tikvTxn) StartTS() uint64 {
    logutil.Logger(context.Background()).Info("hello transaction.")
    return txn.startTS
}

编译

Clone完成项目后发现tidb里面 go.mod 最低的环境要求是1.13,小于1.13版本的请先升级本地的Go环境,每个项目里面都有Makefile,所以我们直接make进行编译就好:

➜  tidb git:(v4.0.4) ✗ make

CGO_ENABLED=1 GO111MODULE=on go build  -tags codes  -ldflags '-X "github.com/pingcap/parser/mysql.TiDBReleaseVersion=v4.0.4-dirty" -X "github.com/pingcap/tidb/util/versioninfo.TiDBBuildTS=2020-08-13 09:10:26" -X "github.com/pingcap/tidb/util/versioninfo.TiDBGitHash=c61fc7247e9f6bc773761946d5b5294d3f2699a5" -X "github.com/pingcap/tidb/util/versioninfo.TiDBGitBranch=heads/v4.0.4" -X "github.com/pingcap/tidb/util/versioninfo.TiDBEdition=Community" ' -o bin/tidb-server tidb-server/main.go
Build TiDB Server successfully!

然后再以相同的命令依次编译tikv以及pd即可。编译的时候要等的时间比较长,rust的编译速度确实慢。

编译完成后,三个文件夹的二进制文件默认未知分别位于tidb/bin/tidb-server, pd/bin/pd-server, tikv/target/release/tikv-server

这里需要注意如果都用线上master的编译可能不是稳定版本,出来的界面可能有一点问题,所以需要用一个统一的版本去编译。我这里统一checkout 到了 v4.0.4

启动

官方推荐用tiup进行管理集群,docker-compose 方式已废弃,直接看文章介绍即可

Flags:
      --db int                   设置集群中的 TiDB 数量(默认为1)
      --db.binpath string        指定 TiDB 二进制文件的位置(开发调试用,可忽略)
      --db.config string         指定 TiDB 的配置文件(开发调试用,可忽略)
      --db.host host             指定 TiDB 的监听地址
      --drainer int              设置集群中 Drainer 数据
      --drainer.binpath string   指定 Drainer 二进制文件的位置(开发调试用,可忽略)
      --drainer.config string    指定 Drainer 的配置文件
  -h, --help                     打印帮助信息
      --host string              设置每个组件的监听地址(默认为 127.0.0.1),如果要提供给别的电脑访问,可设置为 0.0.0.0
      --kv int                   设置集群中的 TiKV 数量(默认为1)
      --kv.binpath string        指定 TiKV 二进制文件的位置(开发调试用,可忽略)
      --kv.config string         指定 TiKV 的配置文件(开发调试用,可忽略)
      --monitor                  是否启动监控
      --pd int                   设置集群中的 PD 数量(默认为1)
      --pd.binpath string        指定 PD 二进制文件的位置(开发调试用,可忽略)
      --pd.config string         指定 PD 的配置文件(开发调试用,可忽略)
      --pump int                 指定集群中 Pump 的数量(非 0 的时候 TiDB 会开启 TiDB Binlog)
      --pump.binpath string      指定 Pump 二进制文件的位置(开发调试用,可忽略)
      --pump.config string       指定 Pump 的配置文件(开发调试用,可忽略)
      --tiflash int              设置集群中 TiFlash 数量(默认为0)
      --tiflash.binpath string   指定 TiFlash 的二进制文件位置(开发调试用,可忽略)
      --tiflash.config string    指定 TiFlash 的配置文件(开发调试用,可忽略)

所以最后我们的启动命令就是

➜  pingcap tiup playground --db.binpath ./tidb/bin/tidb-server --pd.binpath ./pd/bin/pd-server --kv.binpath ./tikv/target/release/tikv-server --db 1 --pd 1 --kv 3
Starting component `playground`:  --db.binpath ./tidb/bin/tidb-server --pd.binpath ./pd/bin/pd-server --kv.binpath ./tikv/target/release/tikv-server --db 1 --pd 1 --kv 3
Use the latest stable version: v4.0.4

    Specify version manually:   tiup playground <version>
    The stable version:         tiup playground v4.0.0
    The nightly version:        tiup playground nightly

Playground Bootstrapping...
Start pd instance...
Start tikv instance...
Start tikv instance...
Start tikv instance...
Start tidb instance...
........
Waiting for tikv 127.0.0.1:20160 ready
Waiting for tikv 127.0.0.1:20161 ready
Waiting for tikv 127.0.0.1:20162 ready
Start tiflash instance...
Waiting for tiflash 127.0.0.1:3930 ready ...
CLUSTER START SUCCESSFULLY, Enjoy it ^-^
To connect TiDB: mysql --host 127.0.0.1 --port 4000 -u root
To view the dashboard: http://127.0.0.1:2379/dashboard
To view the Prometheus: http://127.0.0.1:9090
To view the Grafana: http://127.0.0.1:3000

然后登陆http://127.0.0.1:2379/dashboard 查看日志结果,正常输出hello, transaction.