Skip to content

Commit

Permalink
Merge branch 'master' into document-split
Browse files Browse the repository at this point in the history
  • Loading branch information
hicqu committed Sep 30, 2018
2 parents e38959c + f676ec7 commit 1b06c60
Show file tree
Hide file tree
Showing 38 changed files with 1,326 additions and 613 deletions.
12 changes: 4 additions & 8 deletions FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,7 @@ sqoop export \
```
- 也可以选择增大 tidb 的单个事物语句数量限制,不过这个会导致内存上涨。

### 4.2 增量数据同步
### 4.2 在线数据同步

#### 4.2.1 Syncer 架构

Expand Down Expand Up @@ -745,11 +745,7 @@ sqoop export \

频繁执行 DDL 对同步速度会有影响。对于 Sycner 来说,DDL 是串行执行的,当同步遇到了 DDL,就会以串行的方式执行,所以这种场景就会导致同步速度下降。

#### 4.2.2 Wormhole 工具

Wormhole 是一项数据同步服务,让用户能够通过 Web 控制台, 轻松操作数据的全量 + 增量同步,支持多种同、异构数据源之间的数据迁移,如 MySQL -> TiDB,MongoDB -> TiDB。具体可联系官方进行试用 [[email protected]](mailto:[email protected])

#### 4.2.3 使用 Syncer gtid 的方式同步时,同步过程中会不断更新 syncer.meta 文件,如果 Syncer 所在的机器坏了,导致 syncer.meta 文件所在的目录丢失,该如何处理?
#### 4.2.1.6 使用 Syncer gtid 的方式同步时,同步过程中会不断更新 syncer.meta 文件,如果 Syncer 所在的机器坏了,导致 syncer.meta 文件所在的目录丢失,该如何处理?

当前 Syncer 版本的没有进行高可用设计,Syncer 目前的配置信息 syncer.meta 直接存储在硬盘上,其存储方式类似于其他 MySQL 生态工具,比如 mydumper。 因此,要解决这个问题当前可以有两个方法:

Expand All @@ -761,7 +757,7 @@ Wormhole 是一项数据同步服务,让用户能够通过 Web 控制台, 轻

#### 4.3.1 如何快速迁移业务流量?

我们建议通过 Syncer 或 Wormhole 搭建成多源 MySQL、MongoDB -> TiDB 实时同步环境,读写流量可以按照需求分阶段通过修改网络配置进行流量迁移,建议 DB 上层部署一个稳定的网络 LB(HAproxy、LVS、F5、DNS 等),这样直接修改网络配置就能实现无缝流量迁移。
我们建议通过 Syncer 工具搭建成多源 MySQL -> TiDB 实时同步环境,读写流量可以按照需求分阶段通过修改网络配置进行流量迁移,建议 DB 上层部署一个稳定的网络 LB(HAproxy、LVS、F5、DNS 等),这样直接修改网络配置就能实现无缝流量迁移。

#### 4.3.2 TiDB 总读写流量有限制吗?

Expand Down Expand Up @@ -974,4 +970,4 @@ update mysql.tidb set variable_value='30m' where variable_name='tikv_gc_life_tim

#### 9.2.4 ERROR 9001 (HY000): PD server timeout start timestamp may fall behind safe point

这个报错一般是 TiDB 访问 PD 出了问题,TiDB 后台有个 worker 会不断地从 PD 查询 safepoint,如果超过 100s 查不成功就会报这个错。一般是因为 PD 有故障或者 TiDB 和 PD 之间的网络有问题。TiDB 常见错误码请参考[错误码与故障诊断](sql/error.md)
这个报错一般是 TiDB 访问 PD 出了问题,TiDB 后台有个 worker 会不断地从 PD 查询 safepoint,如果超过 100s 查不成功就会报这个错。一般是因为 PD 磁盘操作过忙、反应过慢,或者 TiDB 和 PD 之间的网络有问题。TiDB 常见错误码请参考[错误码与故障诊断](sql/error.md)
296 changes: 14 additions & 282 deletions QUICKSTART.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,291 +5,23 @@ category: deployment

# TiDB 快速入门指南

## 关于 TiDB
作为开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,TiDB 可以部署在本地和云平台上,支持公有云、私有云和混合云。

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

## 关于本指南
你可以根据实际场景或需求,选择相应的方式来部署 TiDB 集群:

本指南为您介绍如何使用 TiDB-Ansible 快速部署一个 TiDB 集群,并了解 TiDB 的基本操作和管理。
- [使用 Ansible 部署](op-guide/ansible-deployment.md):如果用于生产环境,须使用 Ansible 部署 TiDB 集群。
- [使用 Ansible 离线部署](op-guide/offline-ansible-deployment.md):如果部署环境无法访问网络,可使用 Ansible 进行离线部署。
- [使用 Docker Compose 部署](op-guide/docker-compose.md):如果你只是想测试 TiDB、体验 TiDB 的特性,或者用于开发环境,可以使用 Docker Compose 在本地快速部署 TiDB 集群。该部署方式不适用于生产环境。
- [使用 Docker 部署](op-guide/docker-deployment.md):你可以使用 Docker 部署 TiDB 集群,但该部署方式不适用于生产环境。

## TiDB 集群部署
## 项目源码

本节具体介绍如何部署一个 TiDB 集群。一个 TiDB 集群由不同的模块组成,包括:TiDB 服务器、TiKV 服务器、Placement Driver (PD) 服务器。
TiDB 集群所有组件的源码均可从 GitHub 上直接访问:

架构图如下所示:

![TiDB Architecture](media/tidb-architecture.png)

参考 [TiDB Ansible 部署方案](./op-guide/ansible-deployment.md)

## TiDB 基本操作

本节具体介绍 TiDB 中基本的增删改查操作。

### 创建、查看和删除数据库

使用 `CREATE DATABASE` 语句创建数据库。语法如下:

```sql
CREATE DATABASE db_name [options];
```

例如,要创建一个名为 `samp_db` 的数据库,可使用以下语句:

```sql
CREATE DATABASE IF NOT EXISTS samp_db;
```

使用 `SHOW DATABASES` 语句查看数据库:

```sql
SHOW DATABASES;
```

使用 `DROP DATABASE` 语句删除数据库,例如:

```sql
DROP DATABASE samp_db;
```

### 创建、查看和删除表

使用 `CREATE TABLE` 语句创建表。语法如下:

```sql
CREATE TABLE table_name column_name data_type constraint;
```

例如:

```sql
CREATE TABLE person (
number INT(11),
name VARCHAR(255),
birthday DATE
);
```

如果表已存在,添加 `IF NOT EXISTS` 可防止发生错误:

```sql
CREATE TABLE IF NOT EXISTS person (
number INT(11),
name VARCHAR(255),
birthday DATE
);
```

使用 `SHOW CREATE` 语句查看建表语句。例如:

```sql
SHOW CREATE table person;
```

使用 `SHOW FULL COLUMNS` 语句查看表的列。 例如:

```sql
SHOW FULL COLUMNS FROM person;
```

使用 `DROP TABLE` 语句删除表。例如:

```sql
DROP TABLE person;
```

或者

```sql
DROP TABLE IF EXISTS person;
```

使用 `SHOW TABLES` 语句查看数据库中的所有表。例如:

```sql
SHOW TABLES FROM samp_db;
```

### 创建、查看和删除索引

对于值不唯一的列,可使用 `CREATE INDEX``ALTER TABLE` 语句。例如:

```sql
CREATE INDEX person_num ON person (number);
```

或者

```sql
ALTER TABLE person ADD INDEX person_num (number);
```

对于值唯一的列,可以创建唯一索引。例如:

```sql
CREATE UNIQUE INDEX person_num ON person (number);
```

或者

```sql
ALTER TABLE person ADD UNIQUE person_num on (number);
```

使用 `SHOW INDEX` 语句查看表内所有索引:

```sql
SHOW INDEX from person;
```

使用 `ALTER TABLE``DROP INDEX` 语句来删除索引。与 `CREATE INDEX` 语句类似,`DROP INDEX` 也可以嵌入 `ALTER TABLE` 语句。例如:

```sql
DROP INDEX person_num ON person;
ALTER TABLE person DROP INDEX person_num;
```

### 增删改查数据

使用 `INSERT` 语句向表内插入数据。例如:

```sql
INSERT INTO person VALUES("1","tom","20170912");
```

使用 `SELECT` 语句检索表内数据。例如:

```sql
SELECT * FROM person;
+--------+------+------------+
| number | name | birthday |
+--------+------+------------+
| 1 | tom | 2017-09-12 |
+--------+------+------------+
```
使用 `UPDATE` 语句修改表内数据。例如:

```sql
UPDATE person SET birthday='20171010' WHERE name='tom';

SELECT * FROM person;
+--------+------+------------+
| number | name | birthday |
+--------+------+------------+
| 1 | tom | 2017-10-10 |
+--------+------+------------+
```

使用 `DELETE` 语句删除表内数据:

```sql
DELETE FROM person WHERE number=1;
SELECT * FROM person;
Empty set (0.00 sec)
```

### 创建、授权和删除用户

使用 `CREATE USER` 语句创建一个用户 `tiuser`,密码为 `123456`

```sql
CREATE USER 'tiuser'@'localhost' IDENTIFIED BY '123456';
```

授权用户 `tiuser` 可检索数据库 `samp_db` 内的表:

```sql
GRANT SELECT ON samp_db.* TO 'tiuser'@'localhost';
```

查询用户 `tiuser` 的权限:

```sql
SHOW GRANTS for tiuser@localhost;
```

删除用户 `tiuser`

```sql
DROP USER 'tiuser'@'localhost';
```

## TiDB 集群监控

打开浏览器,访问以下监控平台:

地址:`http://172.16.10.3:3000`
默认帐户和密码为:`admin`@`admin`

### 重要监控指标详解

+ PD
- Storage Capacity : TiDB 集群总可用数据库空间大小
- Current Storage Size : TiDB 集群目前已用数据库空间大小
- Store Status -- up store : TiKV 正常节点数量
- Store Status -- down store : TiKV 异常节点数量

如果大于 0,证明有节点不正常
- Store Status -- offline store : 手动执行下线操作 TiKV 节点数量
- Store Status -- Tombstone store : 下线成功的 TiKV 节点数量
- Current storage usage : TiKV 集群存储空间占用率

超过 80% 应考虑添加 TiKV 节点
- 99% completed_cmds_duration_seconds : 99% pd-server 请求完成时间

小于 5ms
- average completed_cmds_duration_seconds : pd-server 请求平均完成时间

小于 50ms
- leader balance ratio : leader ratio 最大的节点与最小的节点的差

均衡状况下一般小于 5%,节点重启时会比较大
- region balance ratio : region ratio 最大的节点与最小的节点的差

均衡状况下一般小于 5%,新增/下线节点时会比较大

+ TiDB
- handle_requests_duration_seconds : 请求 PD 获取 TSO 响应时间

小于 100ms
- tidb server QPS : 集群的请求量

- connection count : 从业务服务器连接到数据库的连接数

和业务相关。但是如果连接数发生跳变,需要查明原因。比如突然掉为 0,可以检查网络是否中断;
如果突然上涨,需要检查业务。
- statement count : 单位时间内不同类型语句执行的数目
- Query Duration 99th percentile : 99% 的 query 时间

+ TiKV
- 99% & 99.99% scheduler command duration : 99% & 99.99% 命令执行的时间

99% 小于 50ms;99.99% 小于 100ms
- 95% & 99% storage async_request duration : 95% & 99% Raft 命令执行时间

95% 小于 50ms;99% 小于 100ms
- server report failure message : 发送失败或者收到了错误的 message

如果出现了大量的 unreachadble 的消息,表明系统网络出现了问题。如果有 store not match 这样的错误,
表明收到了不属于这个集群发过来的消息
- Vote : Raft vote 的频率

通常这个值只会在发生 split 的时候有变动,如果长时间出现了 vote 偏高的情况,证明系统出现了严重的问题,
有一些节点无法工作了
- 95% & 99% coprocessor request duration : 95% & 99% coprocessor 执行时间

和业务相关,但通常不会出现持续高位的值
- Pending task : 累积的任务数量

除了 pd worker,其他任何偏高都属于异常
- stall : RocksDB Stall 时间

大于 0,表明 RocksDB 忙不过来,需要注意 IO 和 CPU 了
- channel full : channel 满了,表明线程太忙无法处理

如果大于 0,表明线程已经没法处理了
- 95% send_message_duration_seconds : 95% 发送消息的时间

小于 50ms
- leader/region : 每个 TiKV 的 leader/region 数量
- [TiDB](https://github.com/pingcap/tidb)
- [TiKV](https://github.com/tikv/tikv)
- [PD](https://github.com/pingcap/pd)
- [TiSpark](https://github.com/pingcap/tispark)
- [TiDB Operator](https://github.com/pingcap/tidb-operator)
15 changes: 11 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

## 目录

+ TiDB 简介与整体架构
- [TiDB 简介](overview.md#tidb-简介)
- [TiDB 整体架构](overview.md#tidb-整体架构)
- [TiDB 快速入门指南](QUICKSTART.md)
+ 关于 TiDB
- [TiDB 简介](overview.md)
- [TiDB 整体架构](architecture.md)
- [TiDB 核心特性](features.md)
+ TiDB 快速入门
- [快速入门指南](QUICKSTART.md)
- [SQL 基本操作](try-tidb.md)
+ TiDB 用户文档
+ TiDB 数据库管理
- [TiDB 服务](sql/tidb-server.md)
Expand Down Expand Up @@ -120,6 +123,9 @@
- [常见问题与解答(FAQ)](FAQ.md)
- [最佳实践](https://pingcap.com/blog-cn/tidb-best-practice/)
+ [版本发布历史](releases/rn.md)
- [2.1 RC3](releases/21rc3.md)
- [2.1 RC2](releases/21rc2.md)
- [2.0.7](releases/207.md)
- [2.1 RC1](releases/21rc1.md)
- [2.0.6](releases/206.md)
- [2.0.5](releases/205.md)
Expand Down Expand Up @@ -150,6 +156,7 @@
- [Mobike](http://t.cn/RT8FbP6)
- [饿了么(一)](http://t.cn/RucuK6m)
- [饿了么(二)](http://t.cn/RnsqFT6)
- [爱奇艺](http://t.cn/EvErsc1)
- [易果生鲜](http://t.cn/RTYVhzH)
- [同程旅游](http://t.cn/RmXeNKR)
- [去哪儿](http://t.cn/RTKnsL7)
Expand Down
12 changes: 6 additions & 6 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ category: Roadmap
- [ ] Index Join 和并行 merge join
- [ ] Data Federation(桥接其他数据源,最好能和社区同步,这个接进来可以比较好扩展 Usecase,如果再做一个 InputFormat 适配就可以接 Hive 和 Presto 这些 Hadoop 上的数仓)

## SRE&Tools:
## Tools:

- [x] On-Premise 版本集成部署 (K8s based)
- [ ] On-Premise 版本 Dashboard UI
- [ ] 集群备份和恢复工具(结合物理备份)
- [ ] 数据迁移工具(Wormhole 二期)
- [ ] 安全与系统诊断
- [x] 集群部署工具
- [X] 高性能数据导入工具
- [X] 集群备份和恢复工具 (包括全量+增量备份)
- [ ] 数据在线迁移工具 (Syncer 升级版)
- [ ] 集群诊断和分析工具
Loading

0 comments on commit 1b06c60

Please sign in to comment.