TiDB之mac上搭建及除錯技巧
此文目的
由於本人最近已經成為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對映即可。