From 8244828e23216dc186bb3de7d67cdc5a91b955ae Mon Sep 17 00:00:00 2001 From: shenli Date: Tue, 26 Jul 2016 12:05:01 +0800 Subject: [PATCH 1/7] op-guide: Add document for deploying TiDB with docker --- op-guide/docker.md | 154 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 op-guide/docker.md diff --git a/op-guide/docker.md b/op-guide/docker.md new file mode 100644 index 000000000000..1028818f653a --- /dev/null +++ b/op-guide/docker.md @@ -0,0 +1,154 @@ +# 使用 Docker 构建和运行 TiDB + +本文档用于说明如何使用 Docker 部署 TiDB 服务 + +## Docker 安装和环境准备 + +#### 安装 Docker +使用 Docker 可以非常快速搭建起一套 TiDB 环境。Docker 可以方便地在 Linux / Mac OS X / Windows 环境上安装,安装过程可参考 Docker 官网 https://docs.docker.com/linux/ + +#### 准备环境 +完整的 TiDB 运行需要三个组件,TiDB, TiKV 和 PD。 +* tidb-server 是 TiDB 的执行进程,负责客户端的接入,对用户的 SQL 进行解析、优化和执行,分解成下层的 KV 操作,并将执行结果进行聚合返回给客户端。TiDB 对外兼容 MySQL 协议,可以直接使用 MySQL Client 进行测试 +* tikv-server,作为 TiDB 的分布式 KV 存储引擎,可以在网络互通的多机环境部署,使用 Raft 协议实现强一致性的数据复制,因此推荐 tikv-server 的部署节点为奇数个,当多数派节点存活 TiKV 保持可用状态 +* pd-server,负责 TiKV 的 region 路由信息的维护,依托于 etcd 作为元数据的存储。并协调处理 region 的 rebalance 以及 merge 和 split 等操作 + +获取 TiDB, TiKV, PD 的 Docker 镜像可以直接拉 Docker Hub 发布的 latest 镜像。 + +``` +docker pull pingcap/tidb +docker pull pingcap/tikv +docker pull pingcap/pd +``` + +github.com/pingcap 中的 repo 都包含 Dockerfile,也可以自行 build 镜像 + +``` +git clone https://github.com/pingcap/tidb.git +cd tidb && docker build -t pingcap/tidb . + +git clone https://github.com/pingcap/tikv.git +cd tikv && docker build -t pingcap/tikv . + +git clone https://github.com/pingcap/pd.git +cd pd && docker build -t pingcap/pd . +``` + +## 使用单机存储引擎 +tidb-server 默认运行在单机存储引擎,使用本机的 goleveldb 作为存储引擎,不依赖 TiKV。 +使用 docker 可以直接启动: +``` +docker run -d --name tidb-server \ + -v /etc/localtime:/etc/localtime:ro \ + -p 4000:4000 \ + -p 10080:10080 \ + pingcap/tidb:latest \ + -L info --path /tmp/tidb + +docker run -d --name tidb-server -v /etc/localtime:/etc/localtime:ro -p 4000:4000 -p 10080:10080 pingcap/tidb:latest -L info --path /tmp/tidb +``` + +这样就在 4000 端口上启动了 tidb-server,可以使用 mysql client 连接 tidb-server: +``` +mysql -h 127.0.0.1 -P 4000 -u root -D test +``` + +## 使用 TiKV 存储引擎 +使用 TiKV 作为存储引擎可以构建分布式数据库。 +集群环境下多机部署 TiDB,可以使用端口映射,例如在三台机器上部署 1个 PD,3个 TiKV,1个 TiDB + +#### 定义 host 机器 ip +``` +host_ip1=192.168.1.100 +host_ip2=192.168.1.101 +host_ip3=192.168.1.102 +``` + +#### 启动一个仅作为数据存储的 Docker 容器 +三台机器上个启动一个存储用容器 +``` +docker run -d --name ti-storage \ + -v /ti-data \ + busybox:latest +``` + +#### 启动 pd-server +``` +docker run -d --name pd \ + -p 1234:1234 \ + -p 9090:9090 \ + -p 2379:2379 \ + -p 2380:2380 \ + -v /usr/share/ca-certificates/:/etc/ssl/certs \ + -v /etc/localtime:/etc/localtime:ro \ + --volumes-from ti-storage \ + pingcap/pd:latest \ + --addr=0.0.0.0:1234 \ + --advertise-addr=${host_ip1}:1234 \ + --http-addr=0.0.0.0:9090 \ + --etcd-name=etcd \ + --etcd-data-dir=/ti­data/etcd \ + --etcd-advertise-client-url=http://${host_ip1}:2379 \ + --etcd-advertise-peer-url=http://${host_ip1}:2380 \ + --etcd-initial-cluster=etcd=http://${host_ip1}:2380 \ + --etcd-listen-peer-url=http://0.0.0.0:2380 \ + --etcd-listen-client-url=http://0.0.0.0:2379 \ + -L info \ + --cluster-id=1 \ + --max-peer-count=3 +``` + +#### 启动 tikv-server +在三台机器上分别启动 TiKV 服务 +``` +# 机器1 +docker run -d --name tikv1 \ + -p 20160:20160 \ + -v /etc/localtime:/etc/localtime:ro \ + --volumes-from ti-storage \ + pingcap/tikv:latest \ + -S raftkv \ + --addr=0.0.0.0:20160 \ + --advertise-addr=${host_ip1}:20160\ + --etcd=${host_ip1}:2379 \ + --store=/ti-data/tikv \ + --cluster-id=1 + +# 机器2 + docker run -d --name tikv2 \ + -p 20160:20160 \ + -v /etc/localtime:/etc/localtime:ro \ + --volumes-from ti-storage \ + pingcap/tikv:latest \ + -S raftkv \ + --addr=0.0.0.0:20160 \ + --advertise-addr=${host_ip2}:20160\ + --etcd=${host_ip1}:2379 \ + --store=/ti-data/tikv \ + --cluster-id=1 + +# 机器3 + docker run -d --name tikv3 \ + -p 20160:20160 \ + -v /etc/localtime:/etc/localtime:ro \ + --volumes-from ti-storage \ + pingcap/tikv:latest \ + -S raftkv \ + --addr=0.0.0.0:20160 \ + --advertise-addr=${host_ip3}:20160\ + --etcd=${host_ip1}:2379 \ + --store=/ti-data/tikv \ + --cluster-id=1 +``` + +#### 启动 tidb-server +``` +docker run -d --name tidb \ + -p 4000:4000 \ + -v /etc/localtime:/etc/localtime:ro \ + pingcap/tidb:latest \ + -L info \ + --store=tikv \ + --path="${host_ip1}:2379/pd?cluster=1" \ + -P 4000 +``` From aaa45b838ab1be055709fca102daf1e7ea4949ec Mon Sep 17 00:00:00 2001 From: shenli Date: Tue, 26 Jul 2016 13:11:12 +0800 Subject: [PATCH 2/7] *: Address comment --- op-guide/docker.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/op-guide/docker.md b/op-guide/docker.md index 1028818f653a..3702632b6b9b 100644 --- a/op-guide/docker.md +++ b/op-guide/docker.md @@ -5,13 +5,13 @@ ## Docker 安装和环境准备 #### 安装 Docker -使用 Docker 可以非常快速搭建起一套 TiDB 环境。Docker 可以方便地在 Linux / Mac OS X / Windows 环境上安装,安装过程可参考 Docker 官网 https://docs.docker.com/linux/ +使用 Docker 可以非常快速搭建起一套 TiDB 环境。Docker 可以方便地在 Linux / Mac OS X / Windows 环境上安装,安装过程可参考 Docker 官网 https://docs.docker.com/ 。 #### 准备环境 完整的 TiDB 运行需要三个组件,TiDB, TiKV 和 PD。 * tidb-server 是 TiDB 的执行进程,负责客户端的接入,对用户的 SQL 进行解析、优化和执行,分解成下层的 KV 操作,并将执行结果进行聚合返回给客户端。TiDB 对外兼容 MySQL 协议,可以直接使用 MySQL Client 进行测试 -* tikv-server,作为 TiDB 的分布式 KV 存储引擎,可以在网络互通的多机环境部署,使用 Raft 协议实现强一致性的数据复制,因此推荐 tikv-server 的部署节点为奇数个,当多数派节点存活 TiKV 保持可用状态 -* pd-server,负责 TiKV 的 region 路由信息的维护,依托于 etcd 作为元数据的存储。并协调处理 region 的 rebalance 以及 merge 和 split 等操作 +* tikv-server,作为 TiDB 的分布式 KV 存储引擎,可以在网络互通的多机环境部署,使用 Raft 协议实现强一致性的数据复制,因此推荐设置 Region 的最大复本数(max-peer-count)为奇数,当多数派节点存活时 TiKV 保持可用状态 +* pd-server,负责 TiKV 的 Region 路由信息的维护和存储,并协调处理 Region 的 rebalance 以及 merge 和 split 等操作。每个集群需要部署奇数个 PD 实例。 获取 TiDB, TiKV, PD 的 Docker 镜像可以直接拉 Docker Hub 发布的 latest 镜像。 @@ -54,8 +54,7 @@ mysql -h 127.0.0.1 -P 4000 -u root -D test ``` ## 使用 TiKV 存储引擎 -使用 TiKV 作为存储引擎可以构建分布式数据库。 -集群环境下多机部署 TiDB,可以使用端口映射,例如在三台机器上部署 1个 PD,3个 TiKV,1个 TiDB +使用 TiKV 作为存储引擎可以构建分布式数据库。集群环境下多机部署 TiDB,可以使用端口映射,例如在三台机器上部署 1个 PD,3个 TiKV,1个 TiDB: #### 定义 host 机器 ip ``` From 39f587e5f327010d7748096fe90ebebb46aee89d Mon Sep 17 00:00:00 2001 From: shenli Date: Tue, 26 Jul 2016 14:16:08 +0800 Subject: [PATCH 3/7] *: Address comment --- op-guide/docker.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/op-guide/docker.md b/op-guide/docker.md index 3702632b6b9b..855e42639963 100644 --- a/op-guide/docker.md +++ b/op-guide/docker.md @@ -44,8 +44,6 @@ docker run -d --name tidb-server \ -p 10080:10080 \ pingcap/tidb:latest \ -L info --path /tmp/tidb - -docker run -d --name tidb-server -v /etc/localtime:/etc/localtime:ro -p 4000:4000 -p 10080:10080 pingcap/tidb:latest -L info --path /tmp/tidb ``` 这样就在 4000 端口上启动了 tidb-server,可以使用 mysql client 连接 tidb-server: From 1af1d33578138dbe522bef17214d3c0b1d06de8c Mon Sep 17 00:00:00 2001 From: siddontang Date: Fri, 29 Jul 2016 14:38:22 +0800 Subject: [PATCH 4/7] op-guide: update docker. --- op-guide/docker.md | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/op-guide/docker.md b/op-guide/docker.md index 855e42639963..cd0e3d636a03 100644 --- a/op-guide/docker.md +++ b/op-guide/docker.md @@ -83,16 +83,15 @@ docker run -d --name pd \ --addr=0.0.0.0:1234 \ --advertise-addr=${host_ip1}:1234 \ --http-addr=0.0.0.0:9090 \ - --etcd-name=etcd \ - --etcd-data-dir=/ti­data/etcd \ - --etcd-advertise-client-url=http://${host_ip1}:2379 \ - --etcd-advertise-peer-url=http://${host_ip1}:2380 \ - --etcd-initial-cluster=etcd=http://${host_ip1}:2380 \ - --etcd-listen-peer-url=http://0.0.0.0:2380 \ - --etcd-listen-client-url=http://0.0.0.0:2379 \ + --name=pd \ + --data-dir=/ti­data/pd \ + --advertise-client-urls=http://${host_ip1}:2379 \ + --advertise-peer-urls=http://${host_ip1}:2380 \ + --initial-cluster=pd=http://${host_ip1}:2380 \ + --peer-urls=http://0.0.0.0:2380 \ + --client-urls=http://0.0.0.0:2379 \ -L info \ - --cluster-id=1 \ - --max-peer-count=3 + --cluster-id=1 ``` #### 启动 tikv-server @@ -107,7 +106,7 @@ docker run -d --name tikv1 \ -S raftkv \ --addr=0.0.0.0:20160 \ --advertise-addr=${host_ip1}:20160\ - --etcd=${host_ip1}:2379 \ + --pd=${host_ip1}:2379 \ --store=/ti-data/tikv \ --cluster-id=1 @@ -120,7 +119,7 @@ docker run -d --name tikv1 \ -S raftkv \ --addr=0.0.0.0:20160 \ --advertise-addr=${host_ip2}:20160\ - --etcd=${host_ip1}:2379 \ + --pd=${host_ip1}:2379 \ --store=/ti-data/tikv \ --cluster-id=1 @@ -133,7 +132,7 @@ docker run -d --name tikv1 \ -S raftkv \ --addr=0.0.0.0:20160 \ --advertise-addr=${host_ip3}:20160\ - --etcd=${host_ip1}:2379 \ + --pd=${host_ip1}:2379 \ --store=/ti-data/tikv \ --cluster-id=1 ``` @@ -146,6 +145,6 @@ docker run -d --name tidb \ pingcap/tidb:latest \ -L info \ --store=tikv \ - --path="${host_ip1}:2379/pd?cluster=1" \ + --path="${host_ip1}:2379?cluster=1" \ -P 4000 ``` From f5f27835493c7ee0687af2c2877e0621280e09e8 Mon Sep 17 00:00:00 2001 From: shenli Date: Fri, 29 Jul 2016 17:10:26 +0800 Subject: [PATCH 5/7] *: Address comment --- op-guide/docker.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/op-guide/docker.md b/op-guide/docker.md index cd0e3d636a03..b4b730482f2c 100644 --- a/op-guide/docker.md +++ b/op-guide/docker.md @@ -1,6 +1,6 @@ # 使用 Docker 构建和运行 TiDB -本文档用于说明如何使用 Docker 部署 TiDB 服务 +本文档用于说明如何使用 Docker 部署 TiDB 服务。 ## Docker 安装和环境准备 @@ -9,8 +9,8 @@ #### 准备环境 完整的 TiDB 运行需要三个组件,TiDB, TiKV 和 PD。 -* tidb-server 是 TiDB 的执行进程,负责客户端的接入,对用户的 SQL 进行解析、优化和执行,分解成下层的 KV 操作,并将执行结果进行聚合返回给客户端。TiDB 对外兼容 MySQL 协议,可以直接使用 MySQL Client 进行测试 -* tikv-server,作为 TiDB 的分布式 KV 存储引擎,可以在网络互通的多机环境部署,使用 Raft 协议实现强一致性的数据复制,因此推荐设置 Region 的最大复本数(max-peer-count)为奇数,当多数派节点存活时 TiKV 保持可用状态 +* tidb-server 是 TiDB 的执行进程,负责客户端的接入,对用户的 SQL 进行解析、优化和执行,分解成下层的 KV 操作,并将执行结果进行聚合返回给客户端。TiDB 对外兼容 MySQL 协议,可以直接使用 MySQL Client 进行测试。 +* tikv-server,作为 TiDB 的分布式 KV 存储引擎,可以在网络互通的多机环境部署,使用 Raft 协议实现强一致性的数据复制,因此推荐设置 Region 的最大复本数(max-peer-count)为奇数,当多数派节点存活时 TiKV 保持可用状态。 * pd-server,负责 TiKV 的 Region 路由信息的维护和存储,并协调处理 Region 的 rebalance 以及 merge 和 split 等操作。每个集群需要部署奇数个 PD 实例。 获取 TiDB, TiKV, PD 的 Docker 镜像可以直接拉 Docker Hub 发布的 latest 镜像。 From d705b35e333da49bc630fb2d08aba6cf08dbf5c8 Mon Sep 17 00:00:00 2001 From: shenli Date: Fri, 29 Jul 2016 17:20:18 +0800 Subject: [PATCH 6/7] *: Address comment --- op-guide/docker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-guide/docker.md b/op-guide/docker.md index b4b730482f2c..70ed51b6e603 100644 --- a/op-guide/docker.md +++ b/op-guide/docker.md @@ -10,7 +10,7 @@ #### 准备环境 完整的 TiDB 运行需要三个组件,TiDB, TiKV 和 PD。 * tidb-server 是 TiDB 的执行进程,负责客户端的接入,对用户的 SQL 进行解析、优化和执行,分解成下层的 KV 操作,并将执行结果进行聚合返回给客户端。TiDB 对外兼容 MySQL 协议,可以直接使用 MySQL Client 进行测试。 -* tikv-server,作为 TiDB 的分布式 KV 存储引擎,可以在网络互通的多机环境部署,使用 Raft 协议实现强一致性的数据复制,因此推荐设置 Region 的最大复本数(max-peer-count)为奇数,当多数派节点存活时 TiKV 保持可用状态。 +* tikv-server,作为 TiDB 的分布式 KV 存储引擎,可以在网络互通的多机环境部署,使用 Raft 协议实现强一致性的数据复制,当多数派节点存活时 TiKV 保持可用状态。 * pd-server,负责 TiKV 的 Region 路由信息的维护和存储,并协调处理 Region 的 rebalance 以及 merge 和 split 等操作。每个集群需要部署奇数个 PD 实例。 获取 TiDB, TiKV, PD 的 Docker 镜像可以直接拉 Docker Hub 发布的 latest 镜像。 From 4bc629d96f1d925a43a67d12fe7d645c95754bec Mon Sep 17 00:00:00 2001 From: shenli Date: Fri, 29 Jul 2016 17:54:52 +0800 Subject: [PATCH 7/7] *: Address comment --- op-guide/docker.md | 58 +++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/op-guide/docker.md b/op-guide/docker.md index 70ed51b6e603..b080ab1f15cd 100644 --- a/op-guide/docker.md +++ b/op-guide/docker.md @@ -102,39 +102,39 @@ docker run -d --name tikv1 \ -p 20160:20160 \ -v /etc/localtime:/etc/localtime:ro \ --volumes-from ti-storage \ - pingcap/tikv:latest \ - -S raftkv \ - --addr=0.0.0.0:20160 \ - --advertise-addr=${host_ip1}:20160\ - --pd=${host_ip1}:2379 \ - --store=/ti-data/tikv \ - --cluster-id=1 + pingcap/tikv:latest \ + -S raftkv \ + --addr=0.0.0.0:20160 \ + --advertise-addr=${host_ip1}:20160\ + --pd=${host_ip1}:2379 \ + --store=/ti-data/tikv \ + --cluster-id=1 # 机器2 - docker run -d --name tikv2 \ - -p 20160:20160 \ - -v /etc/localtime:/etc/localtime:ro \ - --volumes-from ti-storage \ - pingcap/tikv:latest \ - -S raftkv \ - --addr=0.0.0.0:20160 \ - --advertise-addr=${host_ip2}:20160\ - --pd=${host_ip1}:2379 \ - --store=/ti-data/tikv \ - --cluster-id=1 +docker run -d --name tikv2 \ + -p 20160:20160 \ + -v /etc/localtime:/etc/localtime:ro \ + --volumes-from ti-storage \ + pingcap/tikv:latest \ + -S raftkv \ + --addr=0.0.0.0:20160 \ + --advertise-addr=${host_ip2}:20160\ + --pd=${host_ip1}:2379 \ + --store=/ti-data/tikv \ + --cluster-id=1 # 机器3 - docker run -d --name tikv3 \ - -p 20160:20160 \ - -v /etc/localtime:/etc/localtime:ro \ - --volumes-from ti-storage \ - pingcap/tikv:latest \ - -S raftkv \ - --addr=0.0.0.0:20160 \ - --advertise-addr=${host_ip3}:20160\ - --pd=${host_ip1}:2379 \ - --store=/ti-data/tikv \ - --cluster-id=1 +docker run -d --name tikv3 \ + -p 20160:20160 \ + -v /etc/localtime:/etc/localtime:ro \ + --volumes-from ti-storage \ + pingcap/tikv:latest \ + -S raftkv \ + --addr=0.0.0.0:20160 \ + --advertise-addr=${host_ip3}:20160\ + --pd=${host_ip1}:2379 \ + --store=/ti-data/tikv \ + --cluster-id=1 ``` #### 启动 tidb-server