使用 Docker Compose 快速构建 TiDB 集群

本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群。Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止。

警告:

对于生产环境,不要使用 Docker Compose 进行部署,而应使用 TiDB Ansible 部署 TiDB 集群

准备环境

确保你的机器上已安装:

  • Docker(17.06.0 及以上版本)
  • Docker Compose
  • Git

快速部署

  1. 下载 tidb-docker-compose
  1. ```bash
  2. git clone https://github.com/pingcap/tidb-docker-compose.git
  3. ```
  1. 创建并启动集群

    获取最新 Docker 镜像:

  1. ```bash
  2. cd tidb-docker-compose && docker-compose pull && docker-compose up -d
  3. ```
  1. 访问集群
  1. ```bash
  2. mysql -h 127.0.0.1 -P 4000 -u root
  3. ```
  4. 访问集群 Grafana 监控页面:<http://localhost:3000> 默认用户名和密码均为 admin。
  5. [集群数据可视化](https://github.com/pingcap/tidb-vision):<http://localhost:8010>

自定义集群

在完成快速部署后,以下组件已默认部署:3 个 PD,3 个 TiKV,1 个 TiDB 和监控组件 Prometheus,Pushgateway,Grafana 以及 tidb-vision。

如果想自定义集群,可以直接修改 docker-compose.yml,但是手动修改比较繁琐而且容易出错,强烈建议使用 Helm 模板引擎生成 docker-compose.yml 文件。

  1. 安装 Helm

    Helm 可以用作模板渲染引擎,只需要下载其 binary 文件即可以使用。

  1. ```bash
  2. curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
  3. ```
  4. 如果是 Mac 系统,也可以通过 Homebrew 安装:
  5. ```bash
  6. brew install kubernetes-helm
  7. ```
  1. 下载 tidb-docker-compose
  1. ```bash
  2. git clone https://github.com/pingcap/tidb-docker-compose.git
  3. ```
  1. 自定义集群
  1. ```bash
  2. cd tidb-docker-compose &&
  3. cp compose/values.yaml values.yaml &&
  4. vim values.yaml
  5. ```
  6. 修改 `values.yaml` 里面的配置,例如集群规模,TiDB 镜像版本等。
  7. [tidb-vision](https://github.com/pingcap/tidb-vision) 是 TiDB 集群可视化页面,可以可视化地显示 PD 对 TiKV 数据的调度。如果不想部署该组件,可以将 `tidbVision` 项留空。
  8. PDTiKVTiDB tidb-vision 支持从 GitHub 源码或本地文件构建 Docker 镜像,供开发测试使用。
  9. - 如果希望从本地已编译好的 binary 文件构建 PDTiKV TiDB 镜像,需要将其 `image` 字段留空,并将已编译好的 binary 拷贝到对应的 `pd/bin/pd-server``tikv/bin/tikv-server``tidb/bin/tidb-server`
  10. - 如果希望从本地构建 tidb-vision 镜像,需要将其 `image` 字段留空,并将 tidb-vision 项目拷贝到 `tidb-vision/tidb-vision`
  1. 生成 docker-compose.yml 文件
  1. ```bash
  2. helm template -f values.yaml compose > generated-docker-compose.yml
  3. ```
  1. 使用生成的 docker-compose.yml 创建并启动集群

    获取最新 Docker 镜像:

  1. ```bash
  2. docker-compose -f generated-docker-compose.yml pull
  3. ```
  4. ```bash
  5. docker-compose -f generated-docker-compose.yml up -d
  6. ```
  1. 访问集群
  1. ```bash
  2. mysql -h 127.0.0.1 -P 4000 -u root
  3. ```
  4. 访问集群 Grafana 监控页面:<http://localhost:3000> 默认用户名和密码均为 admin。
  5. 如果启用了 tidb-vision,可以通过 <http://localhost:8010> 查看。

访问 Spark shell 并加载 TiSpark

向 TiDB 集群中插入一些样本数据:

  1. docker-compose exec tispark-master bash &&
  2. cd /opt/spark/data/tispark-sample-data &&
  3. mysql -h tidb -P 4000 -u root < dss.ddl

当样本数据加载到 TiDB 集群之后,可以使用 docker-compose exec tispark-master /opt/spark/bin/spark-shell 来访问 Spark shell。

  1. docker-compose exec tispark-master /opt/spark/bin/spark-shell
  1. ...
  2. Spark context available as 'sc' (master = local[*], app id = local-1527045927617).
  3. Spark session available as 'spark'.
  4. Welcome to
  5. ____ __
  6. / __/__ ___ _____/ /__
  7. _\ \/ _ \/ _ `/ __/ '_/
  8. /___/ .__/\_,_/_/ /_/\_\ version 2.1.1
  9. /_/
  10. Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_172)
  11. Type in expressions to have them evaluated.
  12. Type :help for more information.
  1. scala> import org.apache.spark.sql.TiContext
  2. ...
  3. scala> val ti = new TiContext(spark)
  4. ...
  5. scala> ti.tidbMapDatabase("TPCH_001")
  6. ...
  7. scala> spark.sql("select count(*) from lineitem").show
  1. +--------+
  2. |count(1)|
  3. +--------+
  4. | 60175|
  5. +--------+

你也可以通过 Python 或 R 来访问 Spark:

  1. docker-compose exec tispark-master /opt/spark/bin/pyspark &&
  2. docker-compose exec tispark-master /opt/spark/bin/sparkR

更多关于 TiSpark 的信息,参见 TiSpark 的详细文档