一、简介

TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。

本文使用 Docker 搭建 TiDB 数据库,对于生产环境,不要使用 Docker 进行部署,而应使用 TiDB Ansible 部署 TiDB 集群

二、部署

部署 TiDB 集群主要包括 3 个服务组件:

  • TiDB
  • TiKV
  • PD

1、镜像拉取

对应的最新 Docker 镜像可以通过 Docker 官方镜像仓库 获取:

1
2
3
docker pull pingcap/tidb:latest
docker pull pingcap/tikv:latest
docker pull pingcap/pd:latest

镜像拉取成功使用 docker ps 命令查看:

1
2
3
4
5
[root@lsf3wflgz4 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pingcap/tikv latest 7e957dbd3503 4 weeks ago 817MB
pingcap/tidb latest 07d5fd3c20e0 4 weeks ago 424MB
pingcap/pd latest 501e80fd2b5c 4 weeks ago 381MB

2、创建网络

创建docker私有网络:实现多个容器之间使用桥接通讯

1
docker network create totonet

所有的启动的容器都是用totonet网络,可以将所有的容器都桥接到该网络上,并且该网络自带dns解析,可以做到使用容器的名称直接访问容器。

3、部署 PD

1
docker run -d --name pd1 --network totonet -v /etc/localtime:/etc/localtime:ro -v /home/data/tidb/pd1:/data docker.io/pingcap/pd --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 -ise-peer-urls="http://pd1:2380" --initial-cluster="pd1=http://pd1:2380"

参数说明

–name=“pd1” #当前 PD 的名字如果你需要启动多个 PD,一定要给 PD 使用不同的名字。

–network totonet #totonet网络 ,所有容器通过网络通信。

–data-dir=“/data/pd1” #PD 存储数据路径。

–client-urls=“http://0.0.0.0:2379” # 处理客户端请求监听 URL 列表,如果是运行在 docker 则需要指定为 http://0.0.0.0:2379,或者该容器的地址。

–peer-urls=“http://0.0.0.0: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。

4、部署 TiKV

1
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 --advertise-addr="tikv1:20160" --addr="0.0.0.0:20160" --data-dir="/data/tikv1" --pd="pd1:2379"

参数说明

–addr=“tikv1:20160” #TiKV 监听地址如果部署一个集群,–addr 必须指定当前主机的 IP 地址,例如 “192.168.100.113:20160”,如果是运行在 docker 则需要指定为 “0.0.0.0:20160”

–data-dir=“/data/tikv1” # iKV 数据存储路径

–pd=“pd1:2379” # PD 地址列表。TiKV 必须使用这个值连接 PD,才能正常工作。使用逗号来分隔多个 PD 地址,例如: 192.168.100.113:2379, 192.168.100.114:2379, 192.168.100.115:2379

5、部署 PD

1
docker run -d --name tidb --network totonet --privileged=true -p 4000:4000 -p 10080:10080 docker.io/pingcap/tidb --store=tikv --path="pd1:2379"

参数说明

–store=tikv #用来指定 TiDB 底层使用的存储引擎,而 tikv 是一个分布式存储引擎。

–path=“pd1:2379,pd2:2379,pd3:2379” #对于 --store = tikv 时必须指定path,对于 “TiKV” 存储引擎来说,path 指定的是实际的 PD 地址。

6、查看容器运行状态

1
docker ps

三、连接 TiDB 数据库

使用以下命令连接 TiDB 数据库,默认没有密码。

1
mysql -u root -h 182.61.5.87 -P 4000

创建用户,用户名 test ,密码 test

1
2
3
CREATE USER 'test'@'%' IDENTIFIED BY 'test';
GRANT ALL PRIVILEGES ON demo.* TO 'test'@'%';
FLUSH PRIVILEGES;

修改数据库 root 密码为 123456

1
2
use mysql;
UPDATE user set authentication_string = password('123456') where User ='root';

重启容器使配置生效

1
docker restart tidb

再次连接 TiDB 数据库

1
mysql -u root -h 182.61.5.87 -P 4000 -p'123456'

教程到此搭建成功!

四、参考文档

感谢以下文章支持!

🚀TiDB Docker 部署方案 | PingCAP 文档中心

🛸使用docker部署tidb数据库结合zabbix_shang_feng_wei的博客-CSDN博客