ckdk's blog

测试搭建TIDB

2018/05/18

简介

TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。

部署

PingCap官方文档提供了几种部署方案。
这里我选择了docker部署方案。

测试使用了5台装有docker的机器,其中的两台装了PD和TIDB,另外三台装有TIKV。
这里有部署方式

机器 节点
b11 tikv1
b30 tikv2
b34 tikv3
b49 pd1
b24 pd2
b26 pd3
b7 tidb

部署PD

1
2
3
4
5
6
// pd1 入口
/pd-server --name=pd1 --data-dir=/data/pd --client-urls=http://0.0.0.0:12379 --advertise-client-urls=http://192.168.241.49:12379 --peer-urls=http://0.0.0.0:12380 --advertise-peer-urls=http://192.168.241.49:12380 --initial-cluster=pd1=http://192.168.241.49:12380,pd2=http://192.168.241.24:12380,pd3=http://192.168.241.26:12380
// pd2 入口
/pd-server --name=pd2 --data-dir=/data/pd --client-urls=http://0.0.0.0:12379 --advertise-client-urls=http://192.168.241.24:12379 --peer-urls=http://0.0.0.0:12380 --advertise-peer-urls=http://192.168.241.24:12380 --initial-cluster=pd1=http://192.168.241.49:12380,pd2=http://192.168.241.24:12380,pd3=http://192.168.241.26:12380
// pd3 入口
/pd-server --name=pd3 --data-dir=/data/pd --client-urls=http://0.0.0.0:12379 --advertise-client-urls=http://192.168.241.26:12379 --peer-urls=http://0.0.0.0:12380 --advertise-peer-urls=http://192.168.241.26:12380 --initial-cluster=pd1=http://192.168.241.49:12380,pd2=http://192.168.241.24:12380,pd3=http://192.168.241.26:12380
1
2
3
4
5
6
7
8
9
10
11
12
//镜像
pingcap/pd:latest
// 卷
//// pd1 12000M
/etc/localtime:/etc/localtime:ro
/disk1/pd:/data/pd
//// pd2 12000M
/etc/localtime:/etc/localtime:ro
/disk1/pd:/data/pd
//// pd3 12000M
/etc/localtime:/etc/localtime:ro
/disk1/pd:/data/pd
  • –name 注意区分不同pd名字
  • –initial-cluster需要填写pd节点的地址,其余按格式设置为本机地址。
  • 另外注意限制内存的使用。

部署TIKV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// tikv1
docker run -d --name tikv1 \
-m 64G \
-p 20160:20160 \
--ulimit nofile=1000000:1000000 \
-v /etc/localtime:/etc/localtime:ro \
-v /disk1/tikv:/data \
pingcap/tikv:latest \
--addr="0.0.0.0:20160" \
--advertise-addr="192.168.241.11:20160" \
--data-dir="/data/tikv" \
--pd="192.168.241.49:12379,192.168.241.24:12379,192.168.241.26:12379"

// tikv2
docker run -d --name tikv2 \
-m 24G \
-p 20160:20160 \
--ulimit nofile=1000000:1000000 \
-v /etc/localtime:/etc/localtime:ro \
-v /disk1/tikv:/data \
pingcap/tikv:latest \
--addr="0.0.0.0:20160" \
--advertise-addr="192.168.241.30:20160" \
--data-dir="/data/tikv" \
--pd="192.168.241.49:12379,192.168.241.24:12379,192.168.241.26:12379"
  • –name 注意区分不同tikv名字
  • –pd 需要填写pd节点的地址,其余按格式设置为本机地址。
  • 注意目录映射,需要把虚拟机的/data目录 映射到大容量磁盘目录下。

部署TIDB

1
2
3
4
5
6
// 入口 4000 10080
/tidb-server --store=tikv --log-file=/log/tidb/tidb.log --config=/log/tidb/tidb.config --path=192.168.241.49:12379,192.168.241.24:12379,192.168.241.26:12379

// 卷 64000M
/etc/localtime:/etc/localtime:ro
/var/log/tidb:/log/tidb
  • –name 注意区分不同tidb名字.
  • –path 需要填写pd节点的地址.

测试

1
2
3
4
5
6
7
8
// 设置root密码
SET PASSWORD FOR 'root'@'%' = 'xxx';

// 创建oopin用户
CREATE USER 'oopin'@'%' IDENTIFIED BY 'passwd';

// 赋权
grant all privileges on *.* to 'oopin'@'%';
  • 停掉一个PD: 服务正常,说明至少一个PD在线可以使服务正常运行
  • 扩展TIKV:可以稳定正常的扩展TIKV,副本正常迁移的新的TIKV上。
  • 停掉TIKV:三个TIKV的情况下,停掉一个正常,停掉两个无法提供服务。

运维

PD Control

PD Control 是 PD 的命令行工具,用于获取集群状态信息和调整集群。官网没有给出docker版本的安装方式,实际测试时在pd的docker镜像中已经自带PD Control了, 可以进任意一台节点的PD docker来使用。

1
2
3
4
5
# 进入docker
docker exec -it [dockerid] sh

# 进入PD Control交互模式
./pd-ctl -u http://127.0.0.1:12379

配置region replica数量

1
2
config set max-replicas $num
config show all

TIDB工具集

下载

1
2
3
4
5
6
7
8
9
# 下载 tool 压缩包
wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz
wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.sha256

# 检查文件完整性,返回 ok 则正确
sha256sum -c tidb-enterprise-tools-latest-linux-amd64.sha256
# 解开压缩包
tar -xzf tidb-enterprise-tools-latest-linux-amd64.tar.gz
cd tidb-enterprise-tools-latest-linux-amd64

从mysql导出数据

1
./mydumper -h mysqlhost -P 3306 -u root -p rootpwd -t 16 -F 64 -B dbname -T tablename -o /tmp/tidb  --no-locks -l 10000

导入数据到TIDB

1
/loader -h tidbhost -u root -p rootpwd -P 4000 -t 32 -d /tmp/tidb
CATALOG
  1. 1. 简介
  2. 2. 部署
    1. 2.1. 部署PD
    2. 2.2. 部署TIKV
    3. 2.3. 部署TIDB
  3. 3. 测试
  4. 4. 运维
    1. 4.1. PD Control
      1. 4.1.1. 配置region replica数量
    2. 4.2. TIDB工具集
      1. 4.2.1. 下载
      2. 4.2.2. 从mysql导出数据
      3. 4.2.3. 导入数据到TIDB