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。
方法二:多节点的只有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://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';