Docker-compose部署TiDB集群

2,378 阅读3分钟

本文主要讲解使用docker-compose快速部署TiDB集群,此方法官方已不建议在生产环境进行部署。

注:不建议使用此方法跨物理节点部署

准备

  • Docker (version >= 17.06.0)
  • Docker Compose
  • Git
  • MySQL Client

获取 tidb-docker-compose

git clone https://github.com/pingcap/tidb-docker-compose.git

自定义集群

完整版见: tidb-docker-compose/docker-compose.yml

默认的情况下:3个PD,3个TiKV,1个TiDB和监控组件Pushgateway,Prometheus,Grafana以及TiDB-vision

自定义集群需要修改docker-compose.yml文件

以下是修改成1个PD,1个TiKV,1个TiDB以及相应的监控组件

version: '2.1'

services:
  pd0:
    image: pingcap/pd:latest
    ports:
      - "2379:2379"
    volumes:
      - ./config/pd.toml:/pd.toml:ro
      - ./data:/data
      - ./logs:/logs
    command:
      - --name=pd0
      - --client-urls=http://0.0.0.0:2379
      - --peer-urls=http://0.0.0.0:2380
      - --advertise-client-urls=http://pd0:2379
      - --advertise-peer-urls=http://pd0:2380
      - --initial-cluster=pd0=http://pd0:2380
      - --data-dir=/data/pd0
      - --config=/pd.toml
      - --log-file=/logs/pd0.log
    restart: on-failure
  tikv0:
    image: pingcap/tikv:latest
    volumes:
      - ./config/tikv.toml:/tikv.toml:ro
      - ./data:/data
      - ./logs:/logs
    command:
      - --addr=0.0.0.0:20160
      - --advertise-addr=tikv0:20160
      - --data-dir=/data/tikv0
      - --pd=pd0:2379
      - --config=/tikv.toml
      - --log-file=/logs/tikv0.log
    depends_on:
      - "pd0"
    restart: on-failure
  tikv1:
    image: pingcap/tikv:latest
    volumes:
      - ./config/tikv.toml:/tikv.toml:ro
      - ./data:/data
      - ./logs:/logs
    command:
      - --addr=0.0.0.0:20160
      - --advertise-addr=tikv1:20160
      - --data-dir=/data/tikv1
      - --pd=pd0:2379
      - --config=/tikv.toml
      - --log-file=/logs/tikv1.log
    depends_on:
      - "pd0"
    restart: on-failure
 
  tidb:
    image: pingcap/tidb:latest
    ports:
      - "4000:4000"
      - "10080:10080"
    volumes:
      - ./config/tidb.toml:/tidb.toml:ro
      - ./logs:/logs
    command:
      - --store=tikv
      - --path=pd0:2379
      - --config=/tidb.toml
      - --log-file=/logs/tidb.log
      - --advertise-address=tidb
    depends_on:
      - "tikv0"
      - "tikv1"
    restart: on-failure
 
  # monitors
  pushgateway:
    image: prom/pushgateway:v0.3.1
    command:
      - --log.level=error
    restart: on-failure
  prometheus:
    user: root
    image: prom/prometheus:v2.2.1
    command:
      - --log.level=error
      - --storage.tsdb.path=/data/prometheus
      - --config.file=/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    volumes:
      - ./config/prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - ./config/pd.rules.yml:/etc/prometheus/pd.rules.yml:ro
      - ./config/tikv.rules.yml:/etc/prometheus/tikv.rules.yml:ro
      - ./config/tidb.rules.yml:/etc/prometheus/tidb.rules.yml:ro
      - ./data:/data
    restart: on-failure
  grafana:
    image: grafana/grafana:6.0.1
    user: "0"
    environment:
      GF_LOG_LEVEL: error
      GF_PATHS_PROVISIONING: /etc/grafana/provisioning
      GF_PATHS_CONFIG: /etc/grafana/grafana.ini
    volumes:
      - ./config/grafana:/etc/grafana
      - ./config/dashboards:/tmp/dashboards
      - ./data/grafana:/var/lib/grafana
    ports:
      - "3000:3000"
    restart: on-failure

创建并启动集群

# 拉取镜像
docker-compose pull
# 启动集群
docker-compose up -d

执行成功后

示例中是启动了1个PD,1个TiKV,1个TiDB

[root@test tidb-docker-compose]# docker ps | grep pingcap
836a438b5d30        pingcap/tidb:latest                                                            "/tidb-server --stor…"   5 minutes ago       Up 5 minutes        0.0.0.0:4000->4000/tcp, 0.0.0.0:10080->10080/tcp    tidb-docker-compose_tidb_1
1015456a80da        pingcap/tikv:latest                                                            "/tikv-server --addr…"   5 minutes ago       Up 5 minutes        20160/tcp                                           tidb-docker-compose_tikv0_1
61357ea205ac        pingcap/tidb-vision:latest                                                     "/bin/sh -c 'sed -i …"   5 minutes ago       Up 5 minutes        80/tcp, 443/tcp, 2015/tcp, 0.0.0.0:8010->8010/tcp   tidb-docker-compose_tidb-vision_1
28adb2db3359        pingcap/pd:latest                                                              "/pd-server --name=p…"   5 minutes ago       Up 5 minutes        2379-2380/tcp, 0.0.0.0:32768->3379/tcp              tidb-docker-compose_pd0_1

进入TiDB SQL

[root@test tidb-docker-compose]# mysql -h 127.0.0.1 -P 4000 -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.7.25-TiDB-v4.0.9 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible
 
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MySQL [(none)]> SHOW ENGINES;
+--------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment                                                    | Transactions | XA   | Savepoints |
+--------+---------+------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
+--------+---------+------------------------------------------------------------+--------------+------+------------+
1 row in set (0.00 sec)
 
MySQL [(none)]> SHOW STATUS;
+--------------------+--------------------------------------+
| Variable_name      | Value                                |
+--------------------+--------------------------------------+
| Ssl_cipher         |                                      |
| Ssl_cipher_list    |                                      |
| Ssl_verify_mode    | 0                                    |
| Ssl_version        |                                      |
| ddl_schema_version | 22                                   |
| server_id          | 07502e33-8011-4773-ae50-8533f2634b02 |
+--------------------+--------------------------------------+
6 rows in set (0.01 sec)

可以看到,兼容 MySQL5.7

Server version: 5.7.25-TiDB-v4.0.9 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible

停止集群

docker-compose stop

参考

docs.pingcap.com/zh/tidb/dev…