1 、拉取 TiDB 的 Docker 镜像
部署 TiDB 集群主要包括 3 个服务组件:
docker pull pingcap/tidb:latest
docker pull pingcap/tikv:latest
docker pull pingcap/pd:latest
镜像拉取成功进行查看:
[root@toto5 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pingcap/tidb latest e35fa9d297a9 About an hour ago 79.9MB
pingcap/pd latest 0adb255b6930 10 hours ago 80.1MB
pingcap/tikv latest 9b6d825c9d4f 5 days ago 358MB
创建docker私有网络:实现多个容器之间使用桥接通讯:
docker network create totonet
[root@toto5 docker]# docker network ls
NETWORK ID NAME DRIVER SCOPE
10aec746c459 bridge bridge local
f0d997f7d184 host host local
3b2b9ef5f2b3 none null local
a2ea6b393e90 totonet bridge local
所有的启动的容器都是用totonet网络,可以将所有的容器都桥接到该网络上,并且该网络自带dns解析,可以做到使用容器的名称直接访问容器。
部署一个多节点集群
准备再一个物理机上,启动器个容器,模拟七台机器进行实验:
TiDB
PD1 PD2 PD3
TiKV1 TiKV2 TiKV3
服务启动顺序:
pd—>tikv—>tidb
启动pd1
docker run -d --name pd1 --network totonet \
-v /tidb:/data \
pingcap/pd:latest \
--name="pd1" \
--data-dir="/data/pd1" \
--client-urls="http://0.0.0.0:2379" \
--peer-urls="http://0.0.0.0:2380" \
--initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"
启动pd2
docker run -d --name pd2 --network totonet \
-v /tidb:/data \
pingcap/pd:latest \
--name="pd2" \
--data-dir="/data/pd2" \
--client-urls="http://0.0.0.0:2379" \
--peer-urls="http://0.0.0.0:2380" \
--initial-cluster="pd2=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"
启动pd3
docker run -d --name pd3 --network totonet \
-v /tidb:/data\
pingcap/pd:latest \
--name="pd3" \
--data-dir="/data/pd3" \
--client-urls="http://0.0.0.0:2379" \
--peer-urls="http://0.0.0.0:2380" \
--initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"
参数说明:
--name="pd3" \ #当前 PD 的名字如果你需要启动多个 PD,一定要给 PD 使用不同的名字
--data-dir="/data/pd3" \ #PD 存储数据路径。
--client-urls="http://pd3:2379" \ # 处理客户端请求监听 URL 列表,如果是运行在 docker 则需要指定为 http://0.0.0.0:2379,或者该容器的地址
--peer-urls="http://pd3:2380" \ # 处理其他 PD 节点请求监听 URL 列表。果部署一个集群,--peer-urls 必须指定当前主机的 IP 地址,如果是运行在 docker 则需要指定为 http://0.0.0.0:2380
--initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3: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。
启动TiKV1
docker run -d --name tikv1 --network totonet \
-v /tidb:/data \
pingcap/tikv:latest \
--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 /tidb:/data \
pingcap/tikv:latest \
--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 /tidb:/data \
pingcap/tikv:latest \
--addr="0.0.0.0:20160" \
--data-dir="/data/tikv3" \
--pd="pd1:2379,pd2:2379,pd3:2379"
参数说明:
--addr="tikv3:20160" \ #TiKV 监听地址如果部署一个集群,--addr 必须指定当前主机的 IP 地址,例如 “192.168.100.113:20160”,如果是运行在 docker 则需要指定为 “0.0.0.0:20160”
--data-dir="/data/tikv3" \ # iKV 数据存储路径
--pd="pd1:2379,pd2:2379,pd3:2379" # PD 地址列表。TiKV 必须使用这个值连接 PD,才能正常工作。使用逗号来分隔多个 PD 地址,例如: 192.168.100.113:2379, 192.168.100.114:2379, 192.168.100.115:2379
启动TiDB
docker run -d --name tidb --network totonet \
-p 3306:4000 \
pingcap/tidb:latest \
--store=tikv \
--path="pd1:2379,pd2:2379,pd3:2379"
参数说明:
--store=tikv \ #用来指定 TiDB 底层使用的存储引擎,而 tikv 是一个分布式存储引擎
--path="pd1:2379,pd2:2379,pd3:2379"
#对于 --store = tikv 时必须指定path,对于 “TiKV” 存储引擎来说,path 指定的是实际的 PD 地址。
具体参数可参看官方文档:https://www.pingcap.com/docs-cn/op-guide/configuration/
[root@toto5 mnt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ca495ef48ae pingcap/tidb:latest "/tidb-server --stor…" 49 seconds ago Up 39 seconds 0.0.0.0:3306->4000/tcp tidb
5656c4d13642 pingcap/tikv:latest "/tikv-server --addr…" About a minute ago Up 54 seconds 20160/tcp tikv3
bc13f067969d pingcap/tikv:latest "/tikv-server --addr…" About a minute ago Up About a minute 20160/tcp tikv2
a9d8dd270410 pingcap/tikv:latest "/tikv-server --addr…" About a minute ago Up About a minute 20160/tcp tikv1
b3ccf0b3e1bd pingcap/pd:latest "/pd-server --name=p…" About a minute ago Exited (1) About a minute ago pd3
c098a342fd2d pingcap/pd:latest "/pd-server --name=p…" About a minute ago Exited (1) About a minute ago pd2
82f39ed543fc pingcap/pd:latest "/pd-server --name=p…" About a minute ago Exited (1) About a minute ago pd1
由于已经做了端都映射,将容器中的4000端口映射到物理机的3306端口,查看3306端口是否启动即可
[root@toto5 mnt]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 689/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 902/master
tcp 0 0 172.25.13.150:22 172.25.13.250:39374 ESTABLISHED 2200/sshd: root@pts
tcp6 0 0 :::3306 :::* LISTEN 3617/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 689/sshd
tcp6 0 0 ::1:25 :::* LISTEN 902/master
[root@foundation13 docker_images]# mysql -h 172.25.254.13 -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.7.25-TiDB-v3.0.0-rc.1-297-g2ef4c5c35 MySQL Community Server (Apache License 2.0)
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| INFORMATION_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql |
| test |
+--------------------+
4 rows in set (0.08 sec)
MySQL [(none)]>