此文目的
由于本人最近已经成为TiDB的粉丝,所以就开始各种研究TiDB的源码,研究源码这个事情,首先就需要在自己电脑上不断的调试及修改。TiDB本身的代码是非常容易编译和调试的,但是要把PD、TiKV集群同时在本机上建立起来,还是有一点难度的。好在pingcap官方提供了docker-compose搭建集群的方式,可以快速的在个人电脑上启动一个TiDB的集群。但是,我要的不只是一个集群,我还希望在我的mac上实时编译调试TiDB服务,这个TiDB服务能够和docker-compose的集群里的PD和TiKV进行实时的通讯。我今天仔细分析了一下,最终总结出两个问题需要解决:
- PD和TiKV的端口需要暴露给宿主机;
- 宿主机上的TiDB服务需要解决docker-compose服务内部域名调用的问题;
解决方案
第一个问题比较容易解决,docker本身就提供了解决方案,就是把docker内部的端口映射给宿主机,这样在宿主机上就可以直接访问这个端口。第二个问题,我还是思考了一会,最后决定使用修改本机host的方式来完成映射。
- mac上需要增加的host如下:
127.0.0.1 pd0
127.0.0.1 pd1 127.0.0.1 pd2 127.0.0.1 tikv0 127.0.0.1 tikv1 127.0.0.1 tikv2
大家一看也就明白了,我就是想把docker集群内部这样的api:pd0:2379,在宿主机上转换成为:127.0.0.1:2379的方式。
- 拉取docker-compose
由于需要把docker内部的端口映射到宿主机上,因此我修改了官方的docker-compose.yml文件,大家可以直接使用我fork并修改的tidb-docker-compose项目。
git clone https://github.com/mantuliu/tidb-docker-compose.git
- 创建并启用集群
cd tidb-docker-compose && docker-compose pull
docker-compose up -d
- 关闭集群
docker-compose down
- 在mac上启动TiDB服务
我的mac上是下面类似这样的命令:
./bin/tidb-server -P 4001 --status="10081" --path="127.0.0.1:3379,127.0.0.1:4379,127.0.0.1:5379" --config=./conf/tidb.toml
写在最后
这种方式呢,感觉还是不太完美,但是确实解决了我当前的困境。提升了我目前研究TiDB源码的效率,不必再依赖于具体的集群环境,我走到哪里,都可以随时调试和研究TiDB的源码。后面如果我了解到更NB的方式,会随时分享给大家。虽然文章的标题是mac上的解决方案,但是换汤不换药,在windows平台上也是一样的,增加具体host映射即可。