1 、拉取 TiDB 的 Docker 鏡像,用的是v5.0.5
部署 TiDB 集群主要包括 3 個服務組件: TiDB,TiKV,PD
docker pull pingcap/tidb:v5.0.5
docker pull pingcap/tikv:v5.0.5
docker pull pingcap/pd:v5.0.5
2.創建docker私有網絡:實現多個容器之間使用橋接通訊:
2.1創建一個totonet名字的私有網絡,
docker network create totonet
2.2查看
docker network ls
所有的啟動的容器都是用totonet網絡,可以將所有的容器都橋接到該網絡上,並且該網絡自帶dns解析,可以做到使用容器的名稱直接訪問容器
3.啟動容器
服務啟動順序:
pd—>tikv—>tidb
服務集群有3種部署方式,可以按照性能需求部署
方法一:最簡單的只有3個基礎節點,(pd,tikv,tidb幾個組件只能按照需求奇數增加 1,3,5等)
#PD1-----------------------------------------------------------------------------------------------
docker run -d --name pd1 --network totonet -v /etc/localtime:/etc/localtime:ro -v /home/data/tidb/pd1:/data docker.io/pingcap/pd:v5.0.5 --name="pd1" --data-dir="/data/pd1" --client-urls="http://0.0.0.0:2379" --peer-urls="http://0.0.0.0:2380" --advertise-client-urls=http://pd1:2379 --advertise-peer-urls="http://pd1:2380" --initial-cluster="pd1=http://pd1:2380"
#tikv1---------------------------------------------------------------------------------------------
docker run -d --name tikv1 --network totonet --ulimit nofile=1000000:1000000 -v /etc/localtime:/etc/localtime:ro -v /home/data/tidb/tikv1:/data docker.io/pingcap/tikv:v5.0.5 --advertise-addr="tikv1:20160" --addr="0.0.0.0:20160" --data-dir="/data/tikv1" --pd="pd1:2379"
#啟動TiDB(1個節點)---------------------------------------------------------------------
docker run -d --name tidb --network totonet --privileged=true -p 4000:4000 -p 10080:10080 docker.io/pingcap/tidb:v5.0.5 --store=tikv --path="pd1:2379"
參數說明:
上面的參數都是我自己部署成功的,所以是可用的,請謹慎增加或減少
--network totonet #totonet網絡 ,所有容器通過網絡通信;
--name pd1 和 --name="pd1" 是不一樣的,必須都有;
--name="pd1" #當前 PD 的名字如果你需要啟動多個 PD,一定要給 PD 使用不同的名字
--data-dir="/data/pd1" #PD 存儲數據路徑。
--client-urls="http://pd1:2379" # 處理客戶端請求監聽 URL 列表,如果是運行在 docker 則需要指定為 http://0.0.0.0:2379,或者該容器的地址
--peer-urls="http://pd1:2380" # 處理其他 PD 節點請求監聽 URL 列表。果部署一個集群,--peer-urls 必須指定當前主機的 IP 地址,如果是運行在 docker 則需要指定為 http://0.0.0.0:2380
--initial-cluster="pd1=http://pd1:2380"
#初始化 PD 集群配置。如果你需要啟動三台 PD,那么 initial-cluster 可能就是 pd1=http://192.168.100.113:2380, pd2=http://192.168.100.114:2380, pd3=192.168.100.115:2380。
參考:https://blog.csdn.net/shang_feng_wei/article/details/95250133
方法二:多節點的只有7個基礎節點,(3個pd,3個tikv,1個tidb,備注:tikv目錄掛載數據非常大,大約5.3G,如果要開3個tikv至少要准備17G的磁盤空間)
#啟動PD1
docker run -d --name pd1 --network totonet -v /home/tidb:/data docker.io/pingcap/pd:v5.0.5 --name="pd1" --data-dir="/data/pd1" --client-urls="http://0.0.0.0:2379" --peer-urls="http://0.0.0.0:2380" --advertise-client-urls=http://pd1:2379 --advertise-peer-urls="http://pd1:2380" --initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"
#啟動PD2
docker run -d --name pd2 --network totonet -v /home/tidb:/data docker.io/pingcap/pd:v5.0.5 --name="pd2" --data-dir="/data/pd2" --client-urls="http://0.0.0.0:2379" --peer-urls="http://0.0.0.0:2380" --advertise-client-urls=http://pd2:2379 --advertise-peer-urls="http://pd2:2380" --initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"
#啟動PD3
docker run -d --name pd3 --network totonet -v /home/tidb:/data docker.io/pingcap/pd:v5.0.5 --name="pd3" --data-dir="/data/pd3" --client-urls="http://0.0.0.0:2379" --peer-urls="http://0.0.0.0:2380" --advertise-client-urls=http://pd3:2379 --advertise-peer-urls="http://pd3:2380" --initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"
#啟動TiKV(3個節點)
#tikv1
docker run -d --name tikv1 --network totonet -v /home/tidb:/data docker.io/pingcap/tikv:v5.0.5 --advertise-addr="tikv1:20160" --addr="0.0.0.0:20160" --data-dir="/data/tikv1" --pd="pd1:2379,pd2:2379,pd3:2379"
#tikv2
docker run -d --name tikv2 --network totonet -v /home/tidb:/data docker.io/pingcap/tikv:v5.0.5 --advertise-addr="tikv2:20160" --addr="0.0.0.0:20160" --data-dir="/data/tikv2" --pd="pd1:2379,pd2:2379,pd3:2379"
#tikv3
docker run -d --name tikv3 --network totonet -v /home/tidb:/data docker.io/pingcap/tikv:v5.0.5 --advertise-addr="tikv3:20160" --addr="0.0.0.0:20160" --data-dir="/data/tikv3" --pd="pd1:2379,pd2:2379,pd3:2379"
#啟動TiDB(1個節點)
docker run -d --name tidb --network totonet --privileged=true -p 4000:4000 -p 10080:10080 docker.io/pingcap/tidb:v5.0.5 --store=tikv --path="pd1:2379,pd2:2379,pd3:2379"
參數說明:
path="pd1:2379,pd2:2379,pd3:2379" ##PD 地址列表。TiKV 必須使用這個值連接 PD,才能正常工作
參考:https://blog.csdn.net/shang_feng_wei/article/details/95250133
方法三:多服務器多節點集群部署
參考官網:https://docs.pingcap.com/zh/tidb/v3.0/test-deployment-using-docker/
***以上容器啟動 docker ps -a 隨時看一下,看是否真的啟動成功,不成功 docker logs 容器 看一下日志
4.登陸tidb,用跟mysql一樣的方式或編譯器登陸,可以把tidb看作mysql,賬號:root,端口4000,初始無密碼
5.創建用戶,並修改root登陸密碼
#創建用戶和修改密碼
CREATE user 'test_rw'@'%' IDENTIFIED by 'test_rw';
#賦予權限
grant all PRIVILEGES on test.* TO 'test_rw'@'%';
FLUSH PRIVILEGES;
#修改密碼root密碼,必須在mysql庫運行才不報錯,test庫運行不了,還有我運行完了root用戶的密碼沒有立即生效,我后面重啟一下容器才生效的,不知道為什么
UPDATE user set authentication_string = password('123456') where User ='root';