Docker部署TiDB集群技术文档
·
Docker部署TiDB集群 完整技术文档(含安装/部署/登录/调度配置/运维/扩容/安全加固)
一、前置核心准备与依赖要求
1.1 TiDB集群核心架构(必知)
- PD (Placement Driver) :集群大脑,负责全局元数据管理、Region调度、负载均衡、集群配置管理,所有调度规则均在PD配置。
- TiKV :分布式存储引擎,负责持久化存储全量数据,数据分片存储,支持多副本高可用。
- TiDB Server :SQL请求入口,无状态节点,兼容MySQL5.7协议,接收SQL请求并调度执行,返回结果。
1.2 宿主机硬性环境要求(启动失败核心诱因)
- 内存:最低 4GB RAM ,推荐8GB及以上
- CPU:2核及以上
- Docker版本:20.10.0+ 稳定版,Docker Compose:2.0+
- 磁盘:≥20GB空闲空间,优先SSD磁盘,TiKV对磁盘IO敏感
- 系统:Linux(CentOS7+/Ubuntu18+)、MacOS、Windows10+(WSL2),生产环境首选Linux
1.3 Docker环境安装与状态验证
# 检查Docker版本
docker -v
# 检查Docker Compose版本
docker compose version
# Linux一键安装Docker+Compose(阿里镜像源,稳定无坑)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 启动Docker服务+开机自启
systemctl start docker
systemctl enable docker
# 验证Docker运行状态
systemctl status docker
二、TiDB集群Docker部署两种核心方式
2.1 方式一:单机伪集群(官方推荐,开发/测试/学习首选,99%场景适配)
- 适用场景:开发调试、SQL验证、TiDB功能学习、轻量级数据开发、单元测试
- 核心优势:一键部署、零手动配置、单节点模拟完整分布式架构、开箱即用、启动速度快
# 克隆官方镜像仓库(国内源,拉取速度快)
git clone https://gitee.com/mirrors/tidb-docker-compose.git
cd tidb-docker-compose && cd docker-compose
# 一键后台启动完整集群(PD+TiKV+TiDB自动编排)
docker compose up -d
# 验证集群容器运行状态
docker compose ps
- 伪集群核心端口映射(永久必记)
- TiDB Server (SQL登录入口):4000
- PD (集群调度管控入口):2379
- TiKV (组件内部通信):20160
2.2 方式二:轻量分布式集群(生产级规范部署,推荐)
- 适用场景:生产预发环境、小型业务上线、数仓ODS层部署、高可用需求、数据持久化场景
- 核心优势:组件完全解耦、数据永久持久化、支持弹性扩容、时区统一、开机自启、资源可控
# 步骤1:创建TiDB集群专属桥接网络(组件内网通信必备)
docker network create --driver bridge --subnet=172.20.0.0/16 tidb-cluster-net
# 步骤2:启动PD节点(集群大脑,必须最先启动)
docker run -d
--name tidb-pd
--net tidb-cluster-net
--ip 172.20.0.2
-p 2379:2379
-p 2380:2380
-v /data/tidb/pd:/var/lib/pd
-e TZ=Asia/Shanghai
--restart=always
pingcap/pd:latest
--name=pd1 --data-dir=/var/lib/pd --client-urls=http://0.0.0.0:2379 --peer-urls=http://0.0.0.0:2380 --initial-cluster=pd1=http://172.20.0.2:2380
# 步骤3:启动TiKV节点(分布式存储,依赖PD节点)
docker run -d
--name tidb-tikv
--net tidb-cluster-net
--ip 172.20.0.3
-p 20160:20160
-v /data/tidb/tikv:/var/lib/tikv
-e TZ=Asia/Shanghai
--restart=always
pingcap/tikv:latest
--addr=0.0.0.0:20160 --pd=172.20.0.2:2379 --data-dir=/var/lib/tikv
# 步骤4:启动TiDB Server节点(SQL入口,依赖PD+TiKV)
docker run -d
--name tidb-server
--net tidb-cluster-net
--ip 172.20.0.4
-p 4000:4000
-p 10080:10080
-v /data/tidb/tidb:/var/lib/tidb
-e TZ=Asia/Shanghai
--restart=always
pingcap/tidb:latest
--store=tikv --path=172.20.0.2:2379 --log-file=/var/lib/tidb/tidb.log
# 验证集群运行状态
docker ps | grep tidb
三、TiDB集群核心登录方式(完全兼容MySQL5.7协议,零学习成本)
3.1 方式一:宿主机原生MySQL客户端登录(推荐,无依赖,开发/运维通用)
# TiDB默认无密码,直接登录,核心固定端口4000
mysql -h 127.0.0.1 -P 4000 -u root
# 登录成功后必执行验证命令(确认集群可用)
select tidb_version();
show databases;
create database tidb_dev_db;
use tidb_dev_db;
create table test_tbl(id int primary key, name varchar(50));
insert into test_tbl values(1, 'TiDB-Docker-Cluster');
select * from test_tbl;
3.2 方式二:可视化工具登录(DataGrip/Navicat/DBeaver,数据开发主力方式)
- 数据库类型:选择 MySQL (TiDB完美兼容MySQL协议,无需专属驱动)
- 主机地址:127.0.0.1(本地部署)/ 服务器内网IP(远程部署)
- 端口:4000(TiDB固定SQL登录端口,不可修改容器内端口)
- 用户名:root
- 密码:留空(默认无密码,生产环境建议立即配置)
- 数据库:可选填,登录后支持自由切换
四、TiDB集群核心调度配置(PD管控核心,动态生效无需重启)
4.1 前置操作:进入PD容器+pd-ctl工具基础使用
- 核心说明 :TiDB所有集群调度规则、负载均衡策略、高可用配置、性能参数,全部在PD节点配置;通过内置pd-ctl工具操作,所有配置动态生效,无需重启集群。
# 进入PD容器(伪集群/分布式集群通用,替换容器名即可)
docker exec -it tidb-pd sh
# 进入pd-ctl交互模式(所有调度配置的核心入口)
pd-ctl -u http://127.0.0.1:2379
# 验证PD连接成功+查看集群状态
cluster
# 退出pd-ctl交互模式命令
exit
4.2 生产级高频核心调度配置(pd-ctl交互模式执行,必配)
# 1. 副本数配置(高可用核心,生产环境强制3副本,测试环境1副本)
config set max-replicas 3
config show max-replicas
# 2. 负载均衡调度优化(解决TiKV节点负载不均、查询卡顿)
config set schedule-region-split-size 368640000
config set schedule-load-balance-threshold 5
config set enable-hot-region-schedule true
# 3. Leader节点均衡调度(性能核心,均匀分摊读写压力)
config set enable-leader-balance true
config set leader-balance-ratio 0.45
# 4. 历史数据自动清理(数仓专属,TTL过期策略,单位:秒)
config set tikv-data-ttl 2592000
# 5. 查看所有调度配置项(验证配置生效+运维排查)
config show all
4.3 TiDB SQL层全局参数优化(登录TiDB后执行,数据开发必备)
# 设置TiDB最大并发查询数(根据宿主机CPU核数调整,8核推荐100)
set global tidb_max_concurrent_queries = 100;
# 强制开启分布式事务(TiDB核心特性,生产必开)
set global tidb_enable_2pc = on;
# 设置单查询内存阈值(避免内存溢出,单位:字节,1GB=1073741824)
set global tidb_mem_quota_query = 1073741824;
# 查看所有TiDB全局参数配置
show global variables like '%tidb%';
五、TiDB集群全量运维核心命令(全覆盖,无冗余,通用所有部署方式)
5.1 伪集群专属运维命令(Docker Compose一键操作,极简高效)
# 一键停止TiDB集群(优雅关闭,数据不丢失,核心命令)
docker compose down
# 一键启动TiDB集群
docker compose up -d
# 一键重启TiDB集群
docker compose restart
# 查看指定组件实时日志(排障核心,按需选择)
docker compose logs -f tidb
docker compose logs -f pd
docker compose logs -f tikv
5.2 分布式集群运维命令(独立组件操作,精准管控)
# 启停单个组件(不影响其他服务,按需操作)
docker start tidb-pd && docker start tidb-tikv && docker start tidb-server
docker stop tidb-pd && docker stop tidb-tikv && docker stop tidb-server
# 重启单个组件
docker restart tidb-pd
# 查看单个组件实时日志(排障核心)
docker logs -f tidb-pd
docker logs -f tidb-tikv
docker logs -f tidb-server
5.3 通用运维命令(所有部署方式通用,必备收藏)
# 查看所有运行中的TiDB相关容器
docker ps | grep tidb
# 进入TiDB Server容器排查SQL层问题
docker exec -it tidb-server sh
# 删除指定TiDB容器(谨慎执行,数据已挂载则不丢失)
docker rm tidb-pd tidb-tikv tidb-server
# 清理TiDB无用镜像(释放磁盘空间)
docker rmi pingcap/pd pingcap/tikv pingcap/tidb
# 查看宿主机磁盘挂载情况(验证数据持久化)
df -h | grep /data/tidb
六、TiDB Docker部署高频避坑指南(生产级必备,杜绝99%故障)
6.1 核心致命坑点及解决方案
- 坑点1:宿主机内存不足 → 集群启动卡死/容器闪退 | 解决方案:宿主机内存≥4GB,关闭无用进程释放内存,重启Docker后重新启动集群
- 坑点2:组件启动顺序错误 → TiKV/TiDB启动失败 | 解决方案:严格遵循 PD → TiKV → TiDB Server 启动顺序,PD为核心依赖
- 坑点3:时区不一致 → 数据库时间与系统差8小时 | 解决方案:所有容器启动命令添加
-e TZ=Asia/Shanghai参数,强制东八区 - 坑点4:端口被占用 → 容器启动失败 | 解决方案:修改宿主机映射端口,如4000→4001、2379→2380,容器内端口不变
- 坑点5:未配置数据挂载 → 容器删除数据丢失 | 解决方案:生产部署必须配置
-v宿主机目录挂载,实现数据永久持久化 - 坑点6:防火墙拦截端口 → 无法远程登录TiDB | 解决方案:放行宿主机4000/2379端口,开发环境可临时关闭防火墙
6.2 额外高频异常快速解决
- 异常1:TiKV容器启动后立即退出 | 解决方案:检查PD是否正常启动,检查TiKV的PD地址配置是否正确
- 异常2:能登录TiDB但执行SQL卡顿 | 解决方案:进入PD开启负载均衡调度,调整Leader均衡比例
- 异常3:pd-ctl连接失败 | 解决方案:检查PD容器是否运行,检查2379端口是否正常映射
七、TiDB生产环境核心安全加固配置(必做,杜绝数据泄露)
7.1 TiDB数据库用户密码配置(核心,默认无密码风险)
# 登录TiDB后执行,为root用户设置强密码(生产必备)
set password for root@'%' = 'TiDB@Prod2026';
flush privileges;
# 密码登录验证
mysql -h127.0.0.1 -P4000 -uroot -pTiDB@Prod2026
7.2 访问权限管控(生产级规范)
- 限制TiDB的4000端口仅对内网开放,禁止公网直接访问
- 非必要不开放PD的2379端口,调度配置仅在宿主机操作
- 为业务开发创建独立数据库用户,分配最小权限,避免使用root账号
八、TiDB集群极简弹性扩容方案(Docker专属,分布式核心能力)
8.1 TiKV存储节点扩容(核心扩容,解决存储不足/读写压力大)
- 核心说明 :TiDB的存储能力由TiKV节点数量决定,新增TiKV节点即可实现存储水平扩容,PD自动调度数据分片,无需停机,无缝扩容
# 新增TiKV节点容器(复用原有集群网络,修改容器名和IP即可)
docker run -d
--name tidb-tikv-2
--net tidb-cluster-net
--ip 172.20.0.5
-p 20161:20160
-v /data/tidb/tikv2:/var/lib/tikv
-e TZ=Asia/Shanghai
--restart=always
pingcap/tikv:latest
--addr=0.0.0.0:20160 --pd=172.20.0.2:2379 --data-dir=/var/lib/tikv
8.2 TiDB Server节点扩容(解决SQL并发查询压力大)
- 核心说明 :TiDB Server为无状态节点,新增节点即可分摊SQL请求压力,所有节点共用TiKV存储,业务无感知
# 新增TiDB Server节点容器
docker run -d
--name tidb-server-2
--net tidb-cluster-net
--ip 172.20.0.6
-p 4001:4000
-e TZ=Asia/Shanghai
--restart=always
pingcap/tidb:latest
--store=tikv --path=172.20.0.2:2379
8.3 扩容验证
# 进入PD容器查看集群节点状态,确认新节点已加入
docker exec -it tidb-pd sh
pd-ctl -u http://127.0.0.1:2379
cluster
九、TiDB核心特性与数据开发适配说明(数据开发工程师专属)
9.1 核心兼容特性(降低学习成本)
- 完全兼容MySQL5.7协议、SQL语法、函数,原有MySQL业务无缝迁移
- 支持MySQL所有客户端工具、数据同步工具(DataX/Sqoop/Flink CDC)
- 支持分布式事务、ACID特性,满足金融级数据一致性要求
9.2 核心优势特性(数据开发首选)
- 海量数据存储:支持PB级数据量,无需分库分表,原生分布式存储
- 水平扩容:存储/计算能力按需扩容,无需停机,业务无感知
- 高性能查询:支持行存+列存混合架构,OLTP+OLAP一体化,数仓开发最优解
- 自动分片:数据按Region自动分片,无需手动规划分片规则
十、全文核心总结
10.1 部署选型建议
- 开发/测试/学习:优先选择 单机伪集群 ,一键部署、零配置、快速启停
- 生产预发/小型业务/数仓部署:优先选择 轻量分布式集群 ,解耦、持久化、可扩容、高可用
10.2 核心操作核心
- 登录核心:TiDB兼容MySQL协议,4000端口为固定SQL入口,可视化工具直接选择MySQL连接
- 配置核心:所有集群调度规则在PD节点通过pd-ctl配置,动态生效无需重启
- 运维核心:Docker Compose一键启停伪集群,独立命令管控分布式集群,日志排查为核心排障手段
10.3 核心避坑原则
- 内存必达标:宿主机内存≥4GB,否则集群无法正常运行
- 顺序必遵守:PD先启动,TiKV次之,TiDB最后启动
- 数据必挂载:生产环境必须配置宿主机目录挂载,实现数据持久化
- 时区必统一:所有容器添加东八区时区配置,避免数据时间错误
更多推荐
所有评论(0)