文档章节

分布式数据库TiDB的部署(一)

kenyon_君羊
 kenyon_君羊
发布于 2017/05/12 18:28
字数 1608
阅读 468
收藏 0

前段时间DBGeek有一篇推文,是关于分布式数据库TiDB的介绍,吸引我的是他的口号,喊得震天响:水平线性扩展高可用、分布式事务、跨数据中心的一致性保证。虽然还没出GA版本,好奇之下翻了下文档,照着官方文档简单安装一下。

一、环境
CentOS Linux release 7.3.1611 (Core)

二、架构
摘自官方文档,主要是三个模块,PD模块、TiDB模块和TiKV模块,三个模块的各自功能:
TiDB Server
TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。 TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址。

PD Server
Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个: 一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);三是分配全局唯一且递增的事务 ID。
PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。

TiKV Server
TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range (从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region 。TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。


三、安装
用了简易安装,就一台服务器

1.下载安装包
wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz
wget http://download.pingcap.org/tidb-latest-linux-amd64.sha256

2.检查完整性
[root@temp TiDB]# ls -l
total 67408
-rw-r--r-- 1 root root          97 May  4 10:15 tidb-latest-linux-amd64.sha256
-rw-r--r-- 1 root root    69019625 May  4 10:15 tidb-latest-linux-amd64.tar.gz
[root@temp TiDB]# sha256sum -c tidb-latest-linux-amd64.sha256
tidb-latest-linux-amd64.tar.gz: OK

3.解压安装
tar -xzf tidb-latest-linux-amd64.tar.gz
cd tidb-latest-linux-amd64
mkdir -p /data/tidb
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/pd-tso-bench /usr/bin
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/tikv-server  /usr/bin/
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/tidb-server  /usr/bin/
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/pd-server    /usr/bin/
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/pd-ctl       /usr/bin/


四、启动

1.启动PD
[root@temp bin]# ./pd-server -data-dir=/data/tidb/pd  -log-file=/data/tidb/log/pd.log -name=pd1 &

日志输出
2017/05/04 13:43:23 util.go:58: [info] Welcome to Placement Driver (PD).
2017/05/04 13:43:23 util.go:59: [info] Version:
2017/05/04 13:43:23 util.go:60: [info] Git Commit Hash: cced626b9477a028a8fdc1c81f75f11f8f214752
2017/05/04 13:43:23 util.go:61: [info] UTC Build Time: 2017-05-03 01:29:53
2017/05/04 13:43:23 metricutil.go:83: [info] disable Prometheus push client
2017/05/04 13:43:23 server.go:109: [info] PD config - Config({FlagSet:0xc4202020c0 Version:false 
...
172.23.195.23:2379, this is strongly discouraged!]
2017/05/04 13:43:23 server.go:194: [info] init cluster id 6416151155803689316
2017/05/04 13:43:23 tso.go:106: [info] sync and save timestamp: last 0001-01-01 00:00:00 +0000 UTC save 2017-05-04 13:43:26.769379123 +0800 CST
2017/05/04 13:43:23 leader.go:209: [info] PD cluster leader pd1 is ready to serve

2.启动TiKV
[root@temp bin]#./tikv-server --pd="127.0.0.1:2379" --data-dir=/data/tidb/tikv --log-file=/data/tidb/log/tikv.log  &

日志输出
2017/05/04 15:01:00.532 mod.rs:403: [INFO] Welcome to TiKV.
2017/05/04 15:01:00.532 mod.rs:404: [INFO] Version:
2017/05/04 15:01:00.532 mod.rs:405: [INFO] Git Commit Hash: d16f69898c04be729775291c936df290b54c79d9
2017/05/04 15:01:00.532 mod.rs:406: [INFO] UTC Build Time:  2017-05-04 03:35:37
2017/05/04 15:01:00.532 mod.rs:407: [INFO] Rustc Version:   1.17.0-nightly (7846dbe0c 2017-03-26)
...
2017/05/04 15:01:10.437 tikv-server.rs:179: [INFO] metric.interval use default Some(0)
2017/05/04 15:01:10.437 tikv-server.rs:836: [INFO] start storage
2017/05/04 15:01:10.438 tikv-server.rs:841: [INFO] Start listening on 127.0.0.1:20160...
2017/05/04 15:01:10.445 mod.rs:198: [INFO] starting working thread: end-point-worker
2017/05/04 15:01:10.445 mod.rs:198: [INFO] starting working thread: snap-handler
2017/05/04 15:01:10.445 server.rs:153: [INFO] TiKV is ready to serve

3.启动TiDB
[root@test04 bin]# ./tidb-server -L info -store=tikv --path=/data/tidb/tidb --path=127.0.0.1:2379 -log-file=/data/tidb/log/tidb.log  &

日志输出
2017/05/04 15:13:43 printer.go:31: [info] Welcome to TiDB.
2017/05/04 15:13:43 printer.go:32: [info] Version:
2017/05/04 15:13:43 printer.go:33: [info] Git Commit Hash: c8e674e6d45e16e66367b508b0b94e6f1b788e24
2017/05/04 15:13:43 printer.go:34: [info] UTC Build Time:  2017-05-04 02:35:50
2017/05/04 15:13:43 client.go:96: [info] [pd] create pd client with endpoints [172.23.195.23:2379]
2017/05/04 15:13:43 client.go:186: [info] [pd] leader switches to: http://172.23.195.23:2379, previous: 
2017/05/04 15:13:43 client.go:114: [info] [pd] init cluster id 6416151155803689316
2017/05/04 15:13:43 gc_worker.go:104: [info] [gc worker] 56f493abb540002 start.
2017/05/04 15:13:43 tidb.go:68: [info] store tikv-6416151155803689316 new domain, lease 1s
2017/05/04 15:13:43 ddl.go:229: [info] start DDL:ff4a4105-6c2a-44ec-ad68-cb7f94e707ca
2017/05/04 15:13:43 domain.go:95: [info] [ddl] full load InfoSchema from version 0 to 12, in 10.561365ms
2017/05/04 15:13:43 server.go:152: [info] Server run MySQL Protocol Listen at [0.0.0.0:4000]
2017/05/04 15:13:43 main.go:204: [info] disable Prometheus push client 
2017/05/04 15:13:43 client.go:96: [info] [pd] create pd client with endpoints [172.23.195.23:2379]
2017/05/04 15:13:43 systime_mon.go:11: [info] start system time monitor 
2017/05/04 15:13:43 client.go:186: [info] [pd] leader switches to: http://172.23.195.23:2379, previous: 
2017/05/04 15:13:43 client.go:114: [info] [pd] init cluster id 6416151155803689316
2017/05/04 15:13:43 http_status.go:78: [info] Listening on :10080 for status and metrics report.


五、登陆
因为是用的mysql的协议和兼容语法,可以用mysql的登陆方式登陆

[root@test04 ~]# mysql  -h 127.0.0.1 -P 4000 -u root -D test
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.1-TiDB-1.0 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database db_kenyon;
Query OK, 0 rows affected (2.04 sec)

mysql> use db_kenyon;
Database changed
mysql> show tables;
Empty set (0.00 sec)

六、总结
暂时只是了解了一下他的框架和代码实现,和一款叫小强的数据库比较相近,功能上结合传统RDBMS和缓存KV的实现,又比较像PostgreSQL,这个产品目前还只是RC版本,新出世也没多久,上生产慎重,安装操作很简单,对于习惯了Mysql的人来说比较方便,后续再测试一下它的性能和扩展功能。

七、参考:
1.https://www.pingcap.com/doc-binary-deployment-zh#
2.https://www.pingcap.com/doc-recommendation-zh

© 著作权归作者所有

共有 人打赏支持
kenyon_君羊
粉丝 499
博文 170
码字总数 121714
作品 0
杭州
其他
私信 提问
加载中

评论(6)

kenyon_君羊
kenyon_君羊

引用来自“宏哥”的评论

citus 看起来比较成熟
支持国产😄
宏哥
宏哥
citus 看起来比较成熟
kenyon_君羊
kenyon_君羊

引用来自“乌龟壳”的评论

pg分布式上还没形成产品级啊~~~

引用来自“kenyon_君羊”的评论

xc可以😄

引用来自“乌龟壳”的评论

不觉得这个新事物属于产品级~~~
理想很丰满,以后做得怎么样让时间来验证吧
乌龟壳
乌龟壳

引用来自“乌龟壳”的评论

pg分布式上还没形成产品级啊~~~

引用来自“kenyon_君羊”的评论

xc可以😄
不觉得这个新事物属于产品级~~~
kenyon_君羊
kenyon_君羊

引用来自“乌龟壳”的评论

pg分布式上还没形成产品级啊~~~
xc可以😄
乌龟壳
乌龟壳
pg分布式上还没形成产品级啊~~~
UCloud 与 PingCAP 达成合作 Cloud TiDB 全球正式发布

2017 年 10 月,国内领先的中立云计算厂商 UCloud 与国内开源分布式 NewSQL 数据库 TiDB 团队 PingCAP 正式达成合作,双方将联手在 UCloud 全球数据中心逐步推出新一代 TiDB 的云端版本——C...

TiDB
2017/10/30
0
0
自动化部署运维工具 - TiDB Operator

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 TiDB 成为真正的 Cloud-Native 数据库...

TiDB
2018/08/23
0
0
PingCAP 开源 TiDB 自动化部署运维工具 TiDB Operator

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,目前,TiDB Operator 已经正式开源。 借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 ...

TiDB
2018/08/23
1K
2
开源 TiDB Operator 让 TiDB 成为真正的 Cloud-Native 数据库

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 TiDB 成为真正的 Cloud-Native 数据库...

CSDN资讯
2018/08/23
0
0
TiDB Executive Summary

一、重要文档 ● 【TiDB 中文文档】 https://pingcap.com/docs-cn ● 【FAQ】 https://pingcap.com/doc-FAQ-zh ● 【OPS】https://www.tidb.cc 二、TiDB 的技术原理 ● 【TiDB 技术内幕】 ○...

易野
2018/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

发布xxl-job executor dotnet core 执行器的实现

DotXxlJob [github][https://github.com/xuanye/DotXxlJob] xxl-job的dotnet core 执行器实现,支持XXL-JOB 2.0+ 1 XXL-JOB概述 [XXL-JOB][1]是一个轻量级分布式任务调度平台,其核心设计目标...

假正经哥哥
今天
2
0
mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
今天
3
0
Spring 事务初始化源码分析

相关文章 Spring 事务使用详解 Spring AOP 创建代理的源码解析 Spring AOP 注解方式源码解析 Spring AOP 功能使用详解 Spring 的 getBean 方法源码解析 Spring bean 创建过程源码解析 Spring...

TSMYK
今天
1
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
今天
3
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部