logo

Docker 部署单机 TiDB:从零开始的完整指南

作者:新兰2025.09.17 11:04浏览量:0

简介:本文详细介绍如何使用 Docker 快速部署单机版 TiDB 数据库,涵盖环境准备、容器化部署、配置优化及常见问题解决,帮助开发者快速搭建本地测试环境。

Docker 部署单机 TiDB:从零开始的完整指南

一、为什么选择 Docker 部署单机 TiDB?

TiDB 作为一款开源的分布式 NewSQL 数据库,其核心优势在于兼容 MySQL 协议、支持水平扩展和强一致性事务。但在开发阶段,开发者往往需要快速搭建一个轻量级的测试环境,此时 Docker 的容器化部署方案便展现出显著优势:

  1. 环境隔离:通过容器技术,TiDB 及其依赖组件(如 PD、TiKV)可运行在独立的命名空间中,避免与宿主机环境冲突。
  2. 快速部署:相比传统虚拟机或物理机部署,Docker 方案可将部署时间从小时级缩短至分钟级。
  3. 资源可控:通过 docker run 命令的 -m 参数可精确限制容器内存使用,防止测试环境占用过多资源。
  4. 版本一致性:使用官方提供的 Docker 镜像可确保不同环境下的 TiDB 版本完全一致。

二、部署前的环境准备

2.1 硬件要求

单机部署建议配置:

  • CPU:4 核及以上(TiDB 默认启用 4 个线程)
  • 内存:8GB 及以上(生产环境建议 32GB+)
  • 磁盘:SSD 优先,建议至少 100GB 可用空间
  • 网络:千兆以太网(避免无线连接)

2.2 软件依赖

  1. Docker 引擎

    • 推荐使用最新稳定版(测试时验证通过版本:24.0.5)
    • 安装命令(Ubuntu 22.04):
      1. curl -fsSL https://get.docker.com | sh
      2. sudo usermod -aG docker $USER
      3. newgrp docker
  2. Docker Compose(可选但推荐):

    • 用于简化多容器编排,安装命令:
      1. sudo apt-get install docker-compose-plugin
  3. 端口检查

    • 确保以下端口未被占用:
      • 4000(TiDB Server)
      • 2379(PD 客户端端口)
      • 2380(PD 集群通信端口)
      • 20160(TiKV 状态端口)
      • 20180(TiKV 存储端口)

三、单机部署方案详解

方案一:使用官方 Docker 镜像快速启动

PingCAP 官方提供了预构建的 Docker 镜像,这是最简便的部署方式:

  1. # 拉取最新稳定版镜像
  2. docker pull pingcap/tidb:latest
  3. # 启动容器(基础模式)
  4. docker run -d \
  5. --name tidb-server \
  6. -p 4000:4000 \
  7. -p 10080:10080 \
  8. pingcap/tidb:latest \
  9. --store=mocktikv \
  10. --path="/var/lib/tidb"

参数说明

  • --store=mocktikv:使用内存模拟的 TiKV 存储,适合测试但数据不持久
  • --path:指定数据存储路径(在 mocktikv 模式下实际不生效)

局限性

  • 数据非持久化,容器重启后数据丢失
  • 性能远低于真实 TiKV 存储

方案二:完整组件部署(推荐生产测试)

更接近生产环境的部署需要同时运行 PD、TiKV 和 TiDB 三个组件:

3.1 使用 Docker Compose 编排

创建 docker-compose.yml 文件:

  1. version: '3.8'
  2. services:
  3. pd:
  4. image: pingcap/pd:latest
  5. command: ["--name=pd1",
  6. "--data-dir=/var/lib/pd",
  7. "--client-urls=http://0.0.0.0:2379",
  8. "--peer-urls=http://0.0.0.0:2380",
  9. "--advertise-client-urls=http://pd:2379",
  10. "--advertise-peer-urls=http://pd:2380",
  11. "--initial-cluster=pd=http://pd:2380"]
  12. volumes:
  13. - pd_data:/var/lib/pd
  14. ports:
  15. - "2379:2379"
  16. networks:
  17. - tidb-net
  18. tikv:
  19. image: pingcap/tikv:latest
  20. command: ["--addr=0.0.0.0:20160",
  21. "--advertise-addr=tikv:20160",
  22. "--data-dir=/var/lib/tikv",
  23. "--pd=pd:2379"]
  24. volumes:
  25. - tikv_data:/var/lib/tikv
  26. depends_on:
  27. - pd
  28. networks:
  29. - tidb-net
  30. tidb:
  31. image: pingcap/tidb:latest
  32. command: ["--store=tikv",
  33. "--path=pd:2379"]
  34. ports:
  35. - "4000:4000"
  36. - "10080:10080"
  37. depends_on:
  38. - pd
  39. - tikv
  40. networks:
  41. - tidb-net
  42. volumes:
  43. pd_data:
  44. tikv_data:
  45. networks:
  46. tidb-net:
  47. driver: bridge

启动命令:

  1. docker-compose up -d

3.2 手动分步部署(理解原理)

对于需要深度定制的场景,可手动启动各组件:

  1. # 启动 PD 节点
  2. docker run -d --name pd \
  3. -v pd_data:/var/lib/pd \
  4. -p 2379:2379 \
  5. pingcap/pd:latest \
  6. --name=pd1 \
  7. --data-dir=/var/lib/pd \
  8. --client-urls=http://0.0.0.0:2379 \
  9. --advertise-client-urls=http://$(hostname -I | awk '{print $1}'):2379
  10. # 启动 TiKV 节点(需先获取 PD 地址)
  11. PD_ADDR=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pd)
  12. docker run -d --name tikv \
  13. -v tikv_data:/var/lib/tikv \
  14. pingcap/tikv:latest \
  15. --addr=0.0.0.0:20160 \
  16. --advertise-addr=$(hostname -I | awk '{print $1}'):20160 \
  17. --data-dir=/var/lib/tikv \
  18. --pd=$PD_ADDR:2379
  19. # 启动 TiDB 节点
  20. docker run -d --name tidb \
  21. -p 4000:4000 \
  22. -p 10080:10080 \
  23. pingcap/tidb:latest \
  24. --store=tikv \
  25. --path=$PD_ADDR:2379

四、部署后的验证与优化

4.1 连接验证

使用 MySQL 客户端连接测试:

  1. mysql -h 127.0.0.1 -P 4000 -u root -D test

执行基础 SQL 验证:

  1. CREATE TABLE t (id INT PRIMARY KEY);
  2. INSERT INTO t VALUES (1);
  3. SELECT * FROM t;

4.2 性能监控

  1. TiDB Dashboard

    • 访问 http://localhost:10080 查看集群状态
    • 重点监控:
      • QPS/TPS 指标
      • 连接数
      • 存储空间使用
  2. Prometheus 集成(高级):
    修改 docker-compose.yml 添加监控组件:

    1. prometheus:
    2. image: prom/prometheus:v2.44.0
    3. command: ["--config.file=/etc/prometheus/prometheus.yml"]
    4. volumes:
    5. - ./prometheus.yml:/etc/prometheus/prometheus.yml
    6. ports:
    7. - "9090:9090"
    8. networks:
    9. - tidb-net

4.3 参数调优建议

  1. 内存配置

    1. # 启动 TiDB 时添加内存限制参数
    2. docker run ... pingcap/tidb:latest \
    3. --mem-quota-query=1073741824 \ # 1GB 查询内存限制
    4. --performance.max-procs=4 # 限制 CPU 核心数
  2. 日志级别调整

    1. # 在 docker-compose 中设置环境变量
    2. environment:
    3. - LOG_LEVEL=info

五、常见问题解决方案

问题1:容器启动后立即退出

原因

  • 参数配置错误导致进程崩溃
  • 依赖服务(如 PD)未就绪

解决方案

  1. # 查看容器日志
  2. docker logs tidb-server
  3. # 增加启动延迟(适用于依赖问题)
  4. command: ["sh", "-c", "sleep 10 && /tidb-server ..."]

问题2:性能低于预期

优化方向

  1. 调整 TiKV 块缓存大小:

    1. docker run ... pingcap/tikv:latest \
    2. --config=/etc/tikv/config.toml

    config.toml 中设置:

    1. [storage]
    2. block-cache = { capacity = "1GB" }
  2. 启用并行扫描:

    1. SET GLOBAL tidb_distsql_scan_concurrency = 16;

问题3:数据持久化失败

正确做法

  1. 确保使用 -v 参数挂载卷:

    1. volumes:
    2. - tikv_data:/var/lib/tikv
  2. 定期备份数据目录:

    1. docker exec tikv tar czf /backup/tikv.tar.gz /var/lib/tikv

六、进阶使用建议

  1. 多版本测试

    1. # 测试不同 TiDB 版本
    2. docker pull pingcap/tidb:v6.5.0
    3. docker tag pingcap/tidb:v6.5.0 my-tidb:v6.5.0
  2. 与 CI/CD 集成

    1. # 在 GitLab CI 中示例
    2. test_tidb:
    3. image: docker:latest
    4. services:
    5. - docker:dind
    6. script:
    7. - docker-compose up -d
    8. - sleep 30 # 等待服务启动
    9. - mysql -h tidb -P 4000 -u root -e "SHOW DATABASES;"
  3. 混合负载测试
    使用 Sysbench 进行基准测试:

    1. sysbench oltp_read_write \
    2. --db-driver=mysql \
    3. --mysql-host=127.0.0.1 \
    4. --mysql-port=4000 \
    5. --mysql-user=root \
    6. --tables=10 \
    7. --table-size=100000 \
    8. prepare

七、总结与最佳实践

  1. 开发环境配置

    • 内存限制:建议 4GB 起步,8GB 更佳
    • 存储:使用 SSD 或内存盘(tmpfs)加速测试
    • 网络:使用 host 网络模式减少性能开销(测试环境)
  2. 生产环境警示

    • 绝对不要在生产环境使用 mocktikv
    • 确保部署三个以上 PD 节点实现高可用
    • 配置正确的时区(TZ=Asia/Shanghai
  3. 版本选择策略

    • 开发测试:使用最新稳定版
    • 兼容性测试:指定版本号(如 v6.5.0
    • 长期支持:选择 LTS 版本

通过 Docker 部署单机 TiDB 不仅简化了环境搭建过程,更为开发者提供了一个可控、可复现的测试平台。掌握这种部署方式后,开发者可以更高效地进行功能验证、性能调优和故障复现,显著提升开发效率。

相关文章推荐

发表评论